2013-05-05 152 views
0

我需要阻止在Action Script中彼此碰撞的兩個矩形。代碼我只能在二維情況下工作(只有X對X碰撞或Y對Y)。當我測試它是否在X軸和Y上發生碰撞時,它們會相互干擾。AS3二維矩形碰撞阻塞

功能collisionTest(OBJ1,OBJ2) {

var b1 = getBound(obj1); 
var b2 = getBound(obj2); 

if(((b1.x < b2.x + b2.width) && (b1.x + b1.width > b2.x)) && ((b1.y + b1.height > b2.y) && (b1.y < b2.y + b2.height))) 
{ 
    if(b1.x + b1.width > b2.x + b2.width) 
     obj1.x = b2.x + b2.width; 
    else if(b1.x < b2.x) 
     obj1.x = b2.x - obj1.width; 
    else if(b1.y < b2.y) 
     obj1.y = b2.y - obj1.height; 
    else if(b1.y + b1.height > b2.y + b2.height) 
     obj1.y = b2.y + b2.height; 
} 

}

如果有任何其他方式來測試碰撞並阻止它,那麼請告訴我,但我已經搜查在谷歌和stackoverflow,並沒有發現任何有用的阻止衝突,但我已經找到了很多關於他們的測試。

回答

0

第1步:獲取Box2d。 第2步:謝謝:)

嚴格來說,使用衆所周知的高度優化的庫。碰撞可能會有更多機制。

如果碰撞是你想要的唯一的東西,那麼我會建議你使用hitTest。這樣做的好處是你可以比較不規則的形狀,而不僅僅是盒子。如果hitTest爲真,您只需測試每次物體移動。如果是,那麼你回到以前的狀態,或者把它們放在另一個旁邊。

此方法的另一個變體是爲您的移動物體添加「光環」。如果光環擊中目標對象,則停止。這樣您就不必執行額外的步驟來重新定位對象。

希望我表達清楚我自己,我半睡半醒:d

0

hitTestObject作品就好了兩個矩形對象:

if (obj1.hitTestObject(obj2)) 
{ 
    // handle collision 
} 
0

如果是純矩形碰撞,您可以使用交叉矩形法。

var overlapRect:Rectangle = RECTANGLE1.intersection(RECTANGLE2); 

這會將像這樣的碰撞信息轉儲到overlapRect中。

enter image description here

從那裏可以使用邏輯來找出碰撞正在發生,並使用交叉點的寬度和高度移動矩形中的一個遠離另一個。

enter image description here