我有3個以1像素的速度向右移動的對象「球」實例。同時,我希望他們以不同的速度移動 - 每個人都有獨特的setInterval值。每個對象實例的唯一setInterval值
最初,我讓它們設置爲以單獨的像素速率向右移動,但這使得碰撞檢測(在另一個項目中使用時)有點不可靠。這裏是我的代碼:
$(window).load(function() {
balls = [];
FPS = 1000/60;
function Speed(ballSpeed) {
this.ballSpeed = ballSpeed;
}
function Ball() {
var rNum = Math.random() + 1;
var rate = Math.round(rNum*10)/10;
var ballDrop = $('<div />').addClass('ball');
this.speed = new Speed(rate);
this.output = ballDrop.appendTo($(".container"));
}
Ball.prototype = {
updatePos: function() {
bL = this.output.position().left;
this.output.css({left: bL += 1});
this.output.text(this.speed.ballSpeed);
}
}
var ballRate = setInterval(function() {
balls.forEach(function(ball){
ball.updatePos();
if (bL === 580) {
window.clearInterval(ballRate);
}
});
}, FPS);
function addBall() {
ball = new Ball(10, 20);
balls.push(ball);
}
for (var i=0; i<3; i++) {
addBall();
}
});
我一直想要做的東西像下面,但它不工作...
balls.forEach(function(ball){
var ballRate = setInterval(function() {
ball.updatePos();
if (bL === 580) {
window.clearInterval(ballRate);
}
}, ball.speed.ballSpeed);
});
這裏的jsFiddle
每像素1像素?不要在動畫幀中測量時間! – Bergi
你的問題到底是什麼? – jfriend00
你應該爲Ball類定義一些'run'方法,叫它開始運行球,當然每個運行方法都應該調用核心'setInterval'並且間隔時間應該是不同的(特別是每個球),就像這個http://jsfiddle.net/viphalongpro/76QpJ/9/ –