?找到办法了
也许你的delTime有问题(猜测
解决不了 清空画布
我觉得有以下几个原因:
1、html文件中没有包含fruit.js
2、在主程序main.js中没有调用画果实的函数fruit.draw;
3、可能拼写错误,比如prototype写为了protoType,只要有一处这样的错误,就会显示不出来,这类错误在控制台显示不出来,比较难找。
4、...
fruitObj.prototype.draw=function () { ctx2.clearRect(0,0,canWidth,canHeight);//加上这句就行了 for(var i=0;i<this.num;i++){ // draw // find a ane,grow,fly up if(this.l[i]<=14){ this.l[i]+=0.01*daltaTime; } else{ this.y[i]-=0.07*daltaTime } ctx2.drawImage(this.orange,this.x[i]-this.l[i]*0.5, this.y[i]-this.l[i]*0.5,this.l[i],this.l[i]) } }
果实图片宽度的变化,每个间隔时间内,宽度增加0.01;this.l[i]+=0.01*deltaTime;
this.l[i]在i=0的时候,this.l[i]+=不会报NaN?
//绘制果实
var fruitObj = function()
{
this.alive = [];//bool
this.x = [];
this.y = [];
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.l[i] = 0;
this.spd[i] = Math.random() * 0.017 + 0.003; //[0.003,0.02)
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++)
{
//draw
//find an ane,grow,fly,up
if(this.alive[i])
{
if(this.fruitType[i] == "blue")
{
var pic = this.blue;
}
else
{
var pic = this.orange;
}
if(this.l[i] <= 14)
{
this.l[i] += this.spd[i] * deltaTime;
}
else
{
this.y[i] -= this.spd[i] * 7 * deltaTime;
}
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] < 10)
{
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 ran = Math.random();
if(ran < 0.2)
{
this.fruitType[i] = "blue"; //orange,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)
{
//send fruit
sendFruit();
return;
}
}
function sendFruit()
{
for(var i = 0; i < fruit.num; i++)
{
if(!fruit.alive[i])
{
fruit.born(i);
return;
}
}
}
应该是代码有的地方打错了,这个代码是对的,你可以看一下
在gameloop方法中加上if(deltaTime > 40) deltaTime = 40;
额,你关心她笑干嘛。。。。。
果实的大小与果实的位置相关。你对比一下代码应该可以找到错误
你再去看一下main.js这个文件,你的deltaTime这个变量是不是没有初始化,这个代码的问题就是你在deltaTime还没有初始化的时候就用了这个变量
我也有这样原问题,我是在画背景的时候多添加了句代码
function drawBackground() {
bgPic.onload = function() {
ctx2.drawImage(bgPic, 0, 0, canWidth, canHeight);
}
}
改成:
function drawBackground() {
ctx2.drawImage(bgPic, 0, 0, canWidth, canHeight);
}
你确定写过这个没? this.l=[];
第一,你这个写的是果实的部分。
第二,你看看你的drawImage函数部分是不是写错了,该写在括号里面的东西你写在外面。
下面的是我的你可以找js里的fruit参考一下。
https://github.com/dirstart/h5_tiny
ctx2.drawImage(this.orange,this.x[i]-this.l[i]*0.5,this.y[i]-this.l[i]*0.5),this.l[i],this.l[i]; 这句里面的“)”位置写错了
请问你解决了吗?
代码没有问题,是不是浏览器卡了? 我帮你测试了 在我的上面正常显示
可能是主函数中loopgame中没有调用该方法或者主函数中没有定义初始化
没有用 改成dead了
this.x[i] - this.l[i] * 0.5 wrong
this.x[i] - this.orange.width* 0.5
NaN是not a number的缩写,你看看是不是逻辑上有错误
截个图看看
this.alive=true;
应该这样写: this.alive[i]=true;
给数组中的元素赋值,而不是给整个数组赋值