2-3看完了正在看2-4
你第16行的this.born(i)被注释掉了
括号去掉还是报错啊
你是不是通过css设置的画布宽高?
可以的
fruitObj.prototype.born = function(){
var aneID = Math.floor(Math.random() * ane.num);
this.x = ane.x[aneID];
this.y = canHeight - ane.len[aneID];
}
代码写错了,应该是
this.x[i] = ane.x[aneID];
this. y[i] = canHeight - ane.len[aneID];
fruit.js中第26、27行少了this,应该是this.x[i],this.y[i]
加油!!
搞不定,描述台复杂了,大哥 你是不是打开了一个错的页面啊
我把你的放在我的里面,果实是正常大小,你是只截图截了一部分吗?
this.bule.src = "./src/bule.png";
这个应该是blue吧,,,
所有的东西都是基于canvas渲染,而当alive为false不执行渲染draw这个方法属性,因而画布上果实消失。
ctx2.globalAlpha = 0.6;//这个语句就是设置海葵的透明度呀
同学们,我终于弄明白为什么生成不了果子了,代码顺序有问题,大家可以把初始化果树放在初始化果子之前,那么就没问题拉。
因为她以后这些都是动画,所以会每次都绘制
解决了,少写了this.born(i);
方便调用
您是怎样解决的,求答
贴下源代码呗
怎么改的
怎么解决的,给一下源码呗,我快烦死了
fruitObj.prototype.num=30;
fruitObj.prototype.init=function
这两句你都多出了一个括号,正确的如上,fruitObj后不要括号
function gameloop(){ window.requestAnimFrame(gameloop); deltaTime = now - lastTime; lastTime = now; deltaTime = (deltaTime>40)?40:deltaTime; }
在 main.js中添加
deltaTime = (deltaTime>40)?40:deltaTime;
来限制帧的最大时间。因为切换到其他标签后页面停止刷新,导致帧会变得很大
为什么我的也不显示
求解决办法
代码没报错就是逻辑问题 可能是你的draw()没放到主函数main里 也可能是你的出生代码无效
我的 你对比下吧
希望能对你有帮助
var fruitObj=function()
{
this.alive=[];//bool
this.y=[];
this.x=[];
this.l=[];
this.spd=[];
this.fruitType=[];
this.orange=new Image();
this.blue=new Image();
}
fruitObj.prototype.num=30;
fruitObj.prototype.init=function()
{
for(var i=0;i<this.num;i++)
{
this.alive[i]=false;
this.x[i]=0;
this.y[i]=0;
this.spd[i]=Math.random()*0.017+0.003;//[0.005,0.015)
this.fruitType[i]="";
}
this.orange.src="./src/fruit.png";
this.blue.src="./src/blue.png";
}
fruitObj.prototype.draw=function()
{
for(var i=0;i<this.num;i++)
{
if(this.alive[i])//为什么不是this。alive[i]=true
{
if(this.fruitType[i]=="blue")
{
var pic=this.blue;
}
else{
var pic =this.orange;
}
if(this.l[i]<15)
{
this.l[i]+=this.spd[i]*daltaTime;
}
else
{
this.y[i]-=this.spd[i]*7*daltaTime;
}
ctx2.drawImage(pic,this.x[i]-this.l[i]*0.5,this.y[i]-this.l[i]*0.5,this.l[i],this.l[i]);
if(this.y[i]<(Math.random()*50+20))
{
this.alive[i]=false;
}
}
}
}
fruitObj.prototype.born=function(i)
{
var aneID=Math.floor(Math.random()*ane.num);
this.x[i]=ane.x[aneID];
this.y[i]=canHeight-ane.len[aneID];
this.l[i]=0;
this.alive[i]=true;
var run=Math.random();
if(run<=0.3)
{
this.fruitType[i]="blue";
}
else{
this.fruitType[i]="orange";
}
}
fruitObj.prototype.dead=function(i)
{
this.alive[i] = false;
}
function fruitMonitor()
{
var num=0;
for (var i = 0; i < fruit.num; i++)
{
if(fruit.alive[i]) num++;
}
if (num<15)
{
sendFruit();
return;
}
}
function sendFruit()
{
for(var i=0; i<fruit.num; i++)
{
if (!fruit.alive[i])
{
fruit.born(i);
return;
}
}
}
上面的是你的代码吗,this.y =0,这个地方改下
born方法中的代码写错了:
this.x = ane.x[aneID];应该是:this.x[i]=ane.x[aneID];
this.y = canHeight - ane.len[aneID];应该是:this.y[i] = canHeight - ane.len[aneID];
坐标x和y少写了[i].
var aneObj = function(){ this.x = []; this.h = []; } aneObj.prototype.num = 50; aneObj.prototype.init = function(){ for (var i = 0; i < this.num; i++) { this.x[i] = i * 16 + Math.random(); this.h[i] = 200 + Math.random() * 50; }; } aneObj.prototype.draw = function(){ ctx2.save(); ctx2.globalAlpha = 0.6; ctx2.lineWidth = 20; ctx2.lineCap = 'round'; ctx2.strokeStyle = '#3b154e'; for (var i = 0; i < this.num; i++) { // beginPath,moveTo,lineTo,stroke,strokeStyle,lineWidth,lineCap,globalAlpha ctx2.beginPath(); ctx2.moveTo(this.x[i], canHeight); ctx2.lineTo(this.x[i], canHeight - this.h[i]); ctx2.stroke(); }; ctx2.restore(); }
js里面的定义属性和方法应该都是这样定义的吧,感觉本质上和java挺相似的,只是写法不同