2012-07-09 265 views
0

我有一個對象的數組都是'矩形'。我也有一個圈子是對象。我使用的重力的公式爲:碰撞檢測不檢測

newYPos = oldYPos + prevFallingSpeed +重力

基本上,我加入重力的速率像素圈中的前一幀「下降」的數目,然後加入該到最後一幀中的圓的位置。

我檢測所述球的任何部分的任何使用此代碼的對象的內部:

for(var i = 0; i < objects.length; i++){ 
    if(ball.x > objects[i].x - ball.r && ball.y > objects[i].y - ball.r && ball.x < ball.r + objects[i].x + objects[i].w && ball.y < ball.r + objects[i].y + objects[i].h){ 
     alert('test'); 
     gSy = (-1 * gSy); 
    } 
} 

代碼檢查如果圓的座標加上或減去該半徑比頂部/左更大箱壁的位置並小於箱壁的右/底位置。

球是在一個點內的對象,但我從來沒有得到警報。我試過了我能想到的一切。但願我只是做了一些愚蠢的錯誤,我不能看到...

這裏是一個的jsfiddle如果你是爲我的代碼搞亂或不理解的變量:

http://jsfiddle.net/JGKx5/

回答

0

小問題:

你有四個對象。

  • 其中兩個(數字1和3)身高又瘦,並向左或向右。球永遠不會靠近他們。
  • 其中一個(數字2)是短而寬的,並且在y座標小於球所獲得的。
  • 另一個(數字0)短而寬,其y座標是一個真實的物理球可以通過的座標 - 但是因爲你的球以不連續的步驟移動,所以你的腳本永遠不會看到它這樣做。 (從Y = 580.4去Y = 601.2)

的一個大問題:

在的jsfiddle,在碰撞測試所有的比較似乎是完全圍繞着錯誤的方法: - )。 (這是奇怪的,因爲這裏的代碼是正確的方式。)

隨着這兩個改變(我使球移動了0.1 * gSy而不是gSy,並翻轉了所有的比較運算符),碰撞被檢測到。

+0

對象都是通過對象的半徑生長的。我最終會這樣做,以便根據球的方向而不是位置來檢測。你能否將鏈接發佈到你的代碼版本上,然後我會接受 – maxhud 2012-07-09 01:38:51

+0

如果球的移動量超過了單個框架的範圍,球的半徑增長是不夠的。修改後的代碼位於http://jsfiddle.net/JGKx5/1/,儘管沒有比上面描述的更多的mod。 – 2012-07-09 02:24:02