如何每隔x秒创建一个对象?

我是编码新手,我正在制作一个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);


一只萌萌小番薯
浏览 96回答 2
2回答

MMTTMM

您可以尝试为每个新敌人创建一个新变量,并创建一个包含所有这些敌人的全局变量。var enemies = []; // when creating a new enemy define it hereif(framect % 300 === 0) {&nbsp;&nbsp; enemies[enemies.length + 1] = new enemy();&nbsp;} // this goes into your loop

慕田峪9158850

为什么在 for 循环内部?看起来这不是所述变量的预期用途。在代码的情况下,当数组为空时,代码将不会到达行,因此不会更新帧。framect++objectsframect++for (var i = 0; i<objects.length; i++) {&nbsp; &nbsp; if(objects[i].step) objects[i].step();&nbsp; &nbsp; // framect++;}framect++; // I think this is how it should be另外,我不确定你为什么要做.您正在检查正在迭代的对象是否具有正确的方法?我认为如果你创建一个不同的数组来保存不同类型的对象会更容易。if(objects[i].step)step
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript