2016-07-10 171 views
1

我有一個2D OpenGL的遊戲,我想實現在AABB碰撞檢測這裏是碰撞檢測代碼:OpenGL的2D碰撞檢測工作不

boolean collisionX = position.x + size.x + dx >= collision.position.x && collision.position.x + collision.size.x >= position.x + dx; 
boolean collisionY = position.y + size.y + dy >= collision.position.y && collision.position.y + collision.size.y >= position.y + dy; 
return collisionX && collisionY; 

對於大小我使用這種計算,因爲其中一些精靈來自紋理地圖集。

size.x = pixelWidth * scaleX/modelTexture.spriteWidth, 
size.y = pixelHeight * scaleY/modelTexture.spriteWidth 

我使用modelTexture.spriteWidth兩個因爲紋理地圖的高度和寬度是相同的,因爲它是一個2^x的平方。

PixelWidth和PixelHeight是在紋理圖像,通過我的計數的像素大小。

我認爲這個問題可能是因爲這些計算結果,如果他們錯了。請告訴我。

但是,碰撞檢測似乎發生在錯誤的地方,就好像每個精靈的邊界框從中心開始並向右上方延伸。我試圖用一個等於-size/2f的位移矢量來解釋這個。但不幸的是它沒有改變任何東西。

下面是一個衝突,不出現的例子被正確神韻::

enter image description here

你認爲問題可能出在精靈/對象的由來?以中心爲中心。如果是這樣,我會如何將原點設置在左上角?

+0

嘗試默認的方法之一,例如'布爾相交=新的Rectangle(X1,Y1,寬度1,height1).intersects(新的Rectangle(x2,y2,寬2,身高2));從''java.awt'並看到如何繼續下去 –

+0

如果您需要縮放大小,你可能不得不相應擴大職位? –

+0

'position.x + size.x + dx> = collision.position.x && collision.position.x + collision.size.x> = position.x + dx;'這裏不應該是'||' ? (與y相同)只是直覺閱讀代碼,我沒有做數學 – Zouch

回答

0

我認爲你只是驗證一方的碰撞。爲了驗證碰撞你必須做somethint這樣的:

collisionX = (right_side_Obj1 > left_side_Obj2 && left_side_Obj1 < left_side_Obj2) 
|| (left_side_Obj1 < right_side_Obj2 && right_side_Obj1 > right_side_Obj2); 

你的情況,我認爲它應該是:

boolean collisionX = (position.x + size.x + dx >= collision.position.x 
      && position.x <= collision.position.x) 
     || (position.x - dx <= collision.position.x + collision.size.x 
      && position.x + + size.x >= collision.position.x + collision.size.x); 
+0

我將方法更改爲您發佈的內容,但沒有幫助,衝突仍然無效。這些盒子似乎更加混亂,但很難說。任何其他想法? –

+0

在每個座標方向上進行兩次比較足以檢查矩形重疊。我覺得更容易考慮他們做* *不重疊的條件,如果一個的左邊大於另一個的右邊,就是這種情況。這給出了兩個條件。然後在邏輯上否定表達式,給出檢查重疊的兩個條件。 –