我的setIntervals()
遇到了问题。我知道这些问题看起来很多,但我似乎无法弄清楚我的实现的确切问题是什么。每次我实例化一个新的Obstacle()
时,它会清除用于旋转障碍物实例的设定间隔,并且障碍物的下一个实例化似乎旋转速度快两倍!我确定这是与范围有关,但我是一个相对初学者,所以我不太确定这里发生了什么。可以提供更多信息。
var obstacleCount = 1;
function Obstacle(){
this.angle = 0;
this.id = obstacleCount;
this.elPrefix = "cookie-";
this.el = '.' + this.elPrefix + this.id;
$('#game-wrapper').append('<div class="' + this.elPrefix + this.id + '"></div>');
obstacleCount += 1;
}
var intervals = new Array();
Obstacle.prototype.roll = function() {
self = this;
intervals[self.id] = setInterval(function(){
self.angle -= 3;
$(self.el).rotate(self.angle);
}, 5);
$(self.el).animate({
right: 1000
}, 4000, 'linear', function(){
$(self.el).remove();
clearInterval(intervals[self.id]);
});
};
var obstacles = new Array();
setInterval(function(){
obstacleID = obstacleCount;
obstacles[obstacleID] = new Obstacle();
obstacles[obstacleID].roll();
}, 1000);
答案 0 :(得分:0)
在大多数游戏中,只有一个更新循环可以处理游戏的所有更新逻辑。我建议使用单个时间间隔来更新所有对象,而不是通过setInterval为每个对象提供自己的预定更新。您可以从更新循环方法中获得一些优势:
不必跟踪间隔。
因为setInterval与定时不一致(它在主脚本执行完毕时触发,并且在下一次运行之前有一些额外的时间,但只有当它的间隔时间到了。这意味着你不能完全依赖它的时间就是你所要求的。)你最好在当时更新所有物体,这样你才能保持稳定。
使您开始的常规伪代码:
initialize objects
add all objects to an array
setInterval(updateObjects, 30);
updateObjects(){
for each object in array
object.roll();
}