2011-11-23 69 views
0

我在處理碰撞檢測工作時遇到了一些問題。我已經過測試,以確保它檢測到碰撞,並且確實如此,但是我無法在它穿過該區塊時使其工作。我也嘗試在碰撞後從x值中減去-10,但它會保持前幾次嘗試,然後只是通過塊。碰撞檢測Flash Builder

private function collisionDetect(evt:Event):void{ 
    if(IMG3.hitTestObject(block)){ 
     if(IMG3.x > block.x){ 
      IMG3.x = block.x-1; 
     } 
    } 
} 
+0

如何hitTestObject工作,並在collisionDetect觸發時,我不認爲這是可能爲他人找到這個片段答案。 – kyohiro

+1

如果兩個對象碰撞,hitTestObject返回true,碰撞檢測由addEventListener(Event.ENTER_FRAME,collisionDetect)觸發; – user1017243

+1

'IMG3.x> block.x'這是有問題的,除非IMG3位於右邊緣,塊的中心位於左邊緣。你需要考慮它們的寬度,所以假設它們都以左邊緣爲中心,則正確的是'IMG3.x + IMG3.width> block.x'。 – felipemaia

回答

0

這取決於物體移動的速率。提供你想要完成的更多細節。如果兩個對象矩陣相互碰撞,你的代碼應該可以正常工作,而且img的中心點x大於塊的中心點x。

負責移動物體的代碼在哪裏?

反正另一種方法將是一個while循環:

private function collisionDetect(evt:Event):void{ 
    if(IMG3.hitTestObject(block)){ 
    while (IMG3.x > block.x) 
    { 
     IMG3.x--; 
    } 
    } 
} 

但同樣這取決於IMG如何移動到開始和它在代碼中發生的。還要注意felipemaia對物體中心點的評論。正確的方法是(IMG3.x + IMG3.width/2) > (block.x - block.width/2)假設對象的中心點確實是它們的精確中心。

P.S改寫標題 - 這不是一個Flash Builder問題