为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2022-08-27 10:49:44
我是编码新手,我正在制作一个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


查看完整回答
反对 回复 2022-08-27
?
慕田峪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


查看完整回答
反对 回复 2022-08-27
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号