我对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))
我只能看到一列错误。我希望上面的场景自动发生,我想我需要在这里使用调用函数,但我仍然需要在我喜欢的连续间隔自动完成。
答案 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();
这个函数的作用是在开始时产生一件事,然后在MINUMUM
和MILLISECONDS