2012-08-10 57 views
4

所以,我試圖創建幾個圈子,然後我希望它們掉下來。這裏是代碼和演示:demo FireBug告訴我,未定義的對象沒有定義「移動」方法,所以當我想創建一個obects數組時,一定是錯誤的。糾正我的錯誤,並考慮到我剛剛開始在JS中學習面向對象編程。使用帆布在JS中的重力模擬很少

+2

'功能移動(){ 這個清算的問題。 Y + = 4; }' – mic4ael 2012-08-10 20:34:03

+0

它在那裏。我看到它... – 2012-08-10 20:35:53

+0

我有你的經驗的示例代碼。 http://genosite.free.fr/canvas/game/grav/ 和 http://genosite.free.fr/canvas/game/grav/grav.js享受! – Genosite 2012-08-10 21:07:13

回答

4

而是創建多個事件,在那裏創建一個事件,並循環:

setInterval(function(){ 
    ctx.clearRect(0,0,1000,1000); //Clear the canvas here 
    for (i = 0;i<bubble.length;++i) 
    { 
     bubble[i].move(); 
     bubble[i].redraw(); 
    } 
    },32); 

的問題是一個範圍問題。 你寫的方式i在執行的所有事件中的值都是10。

工作小提琴:http://jsfiddle.net/some/fGChQ/16/

你的另一個問題是,你清除你的重繪畫布......對於每一個圓圈。

+0

這幾乎可以工作,但會破壞除一個圓之外的所有圓。一個圓圈正確地落下。 – 2012-08-10 21:10:09

+1

@GiovanniB所有的圈子都在下降......但在重繪畫布已被清除。所以它清除了畫布,畫了圓圈1,清除了畫布,畫了圓圈2 ....清除了畫布並畫了圓圈10.然後等待32毫秒,直到它重新開始。 – some 2012-08-10 21:24:37

+0

非常感謝,現在我知道我做錯了什麼。 – mic4ael 2012-08-10 21:34:03

-1
for (i = 0;i<bubble.length - 1; ++i) 
{ 
    console.log(bubble[i].y) 
    setInterval(function(){ 
     bubble[i].move(); 
     bubble[i].redraw(); 
    },32); 
} 

bubble.length是10,數組是索引0-9。泡沫[10]是未定義的,所以你不能調用它的方法。

+0

這會產生同樣的問題 – 2012-08-10 20:59:23

+1

這已經不是符號帳戶。我會更喜歡i ++,但真正的問題在於它的外觀。 – blackbourna 2012-08-10 20:59:29

+0

它仍然不能解決我的問題,因爲我想每個圓都在同一時間跌倒 – mic4ael 2012-08-10 21:00:34

1

我做的這一點,解決循環問題fork,也似乎一直與畫布矩形這是造成一些干擾