一只萌萌小番薯
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

慕田峪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
提交
取消