我是编码新手,我正在制作一个javascript游戏。在这个游戏中,我想每5秒左右生成一次敌人。我创建了一个敌对类,并试图做一个if语句,每5秒创建一个新的敌人(在我的情况下是300帧)。if(framect % 300 === 0) new enemy();这是我的敌人类var plusOrMinus = Math.random() < 0.5 ? -1 : 1;espd = plusOrMinus*Math.random()*13;class enemy{ constructor(){ this.x = Math.random() * window.innerWidth; this.y= Math.random() * window.innerHeight; this.xspd = espd; this.yspd = espd; this.size= 12; objects.push(this); } step(){ this.x += this.xspd; this.y += this.yspd; } draw(){ strokeColor(255, 0, 0); fillColor(255,0,0); circle(this.x,this.y,this.size); }}当我尝试这样做时,它只会产生一个敌人。我知道,因为我有一个对象列表,列表中只显示一个敌人。我该怎么做?我很确定它不是framect的问题,因为它随着每一帧的增加而增加。以下是我进行帧计数和游戏循环的方式。function loop(){ stepLoop(); drawLoop(); keyEnd();}function stepLoop(){ for (var i = 0; i<objects.length; i++) { if(objects[i].step) objects[i].step(); framect++; }}function drawLoop(){ background(25, 25, 25); for (var i = 0; i<objects.length; i++) { if(objects[i].draw) objects[i].draw(); } hero.draw();}var target_fps = 60;setInterval(loop, 1000/target_fps);
2 回答

MMTTMM
TA贡献1869条经验 获得超4个赞
您可以尝试为每个新敌人创建一个新变量,并创建一个包含所有这些敌人的全局变量。
var enemies = []; // when creating a new enemy define it here
if(framect % 300 === 0) {
enemies[enemies.length + 1] = new enemy();
} // this goes into your loop

慕田峪9158850
TA贡献1794条经验 获得超7个赞
为什么在 for 循环内部?看起来这不是所述变量的预期用途。在代码的情况下,当数组为空时,代码将不会到达行,因此不会更新帧。framect++objectsframect++
for (var i = 0; i<objects.length; i++) {
if(objects[i].step) objects[i].step();
// framect++;
}
framect++; // I think this is how it should be
另外,我不确定你为什么要做.您正在检查正在迭代的对象是否具有正确的方法?我认为如果你创建一个不同的数组来保存不同类型的对象会更容易。if(objects[i].step)step
添加回答
举报
0/150
提交
取消