Javascript游戏自动创建新对象以连续添加到数组中[javascript]

时间:2016-10-15 05:06:22

标签: javascript arrays object

我对Javascript游戏很陌生,所以如果这是一个明显的问题,请不要介意。 我一直在尝试一个蛙人游戏。为此,我有一个对象,而我只是想要一致地创建新的构造函数,这样它看起来就好像一堆错误会不断出现。

这是我的敌人对象。

    // Enemies our player must avoid
var Enemy = function(x,y) {
    // Variables applied to each of our instances go here,
    // we've provided one for you to get started

    // The image/sprite for our enemies, this uses
    // a helper we've provided to easily load images
    this.sprite = 'images/enemy-bug.png';
    this.x = x;
    this.y =y;
};

// Update the enemy's position, required method for game
// Parameter: dt, a time delta between ticks
Enemy.prototype.update = function(dt) {
    // You should multiply any movement by the dt parameter
    // which will ensure the game runs at the same speed for
    // all computers.

   this.x = this.x+((Math.random() * (15 - 1 + 1) + 1)*dt*35);

   this.y = this.y;
};

// Draw the enemy on the screen, required method for game
Enemy.prototype.render = function() {
    ctx.drawImage(Resources.get(this.sprite), this.x, this.y);
};

然后我将它们手动推入数组

    // Place all enemy objects in an array called allEnemies
var allEnemies=[];
allEnemies.push(new Enemy(0,135))
allEnemies.push(new Enemy(0,225))
allEnemies.push(new Enemy(0,50))

我只能看到一列错误。我希望上面的场景自动发生,我想我需要在这里使用调用函数,但我仍然需要在我喜欢的连续间隔自动完成。

2 个答案:

答案 0 :(得分:1)

只需致电window.setInterval()

var allEnemies = [];
window.setInterval(function () {
  allEnemies.push(new Enemy(0, 135));
}, 2000);

这将在你的数组中每隔2秒在同一位置创建一个新的Enemy对象(你也可以随机化)。

答案 1 :(得分:1)

您可以像Joachim所说的那样使用window.setInterval(),或者使用window.requestAnimationFrame()甚至使用window.setTimeout()。我个人建议在浏览器中使用requestAnimationFrame(),因为它专门用于绘制动画和渲染,但如果您在节点环境中执行某些操作,则应该使用setInterval

除此之外,我看到你将所有新的Enemy实例推送到一个数组,你可以用一个添加的语句来完成。 每当你创建一个像这样的对象时,你也可以推送到一个数组:

var allEnemies = [];

function Enemy(x,y){
    this.x = x || (Math.random() * WIDTH) | 0;
    this.y = y || (Math.random() * height) | 0;
    this.sprite = "bug-sprite-thing";
    allEnemies.push(this); // this is called every time you do `new Enemy(n,n)
    // the new object will automatically be pushed to the array.
}

如果您想以随机间隔产生新敌人,可以使用setTimeout

var MINIMUM = 100; // 0.1 seconds
var MILLISECONDS = 10000; // 10 seconds
function spawnAtRandom(){
    // add your code here.
    setTimeout(spawnAtRandom, minimum + (Math.random() * (MILLISECONDS-MINIMUM)));
}
spawnAtRandom();

这个函数的作用是在开始时产生一件事,然后在MINUMUMMILLISECONDS

之间的随机间隔中产生某些东西