2015-04-01 44 views
1

我正在製作大部分基於動態物理機構的遊戲,現在我需要在該元素與其他物品重疊時對其施加作用力(箭頭)這是一個傳感器主體。檢測動態物體停止與Corona SDK上的傳感器重疊時的檢測

我知道,只要碰撞事件的相位開始發生在箭頭上,我就可以開始施加力,但是,如何檢測何時停止施加此力?

有沒有辦法知道動態物體何時在傳感器體的邊界之外?

+0

鑑於您使用階段「開始」,您不能只使用相應的階段「結束」嗎? – 2015-04-02 09:43:57

+0

我嘗試過,但即使當動態物體仍在傳感器內部時,它也會被調用...並且當動態物體在其內部睡眠時也會調用它(僅在調試階段時才進行測試)。 – 2015-04-02 10:04:12

回答

1

好,多次嘗試後,甚至想在分離軸定理後,我做了這對一個更簡單的方法(因爲SAT之一是速度太慢,我):

element:addEventListener("collision", function(event) 
    if (event.other.id=="ball") then 
     if (event.phase=="began") then 
      element.collision_counter=element.collision_counter+1 
     elseif (event.phase=="ended") then 
      element.collision_counter=element.collision_counter-1 
     end 
    end 
end) 

所以,從我理解,似乎event.phase=="began"每次被調用時的Shape的碰撞被驗證,而event.phase=="ended"在對象不再與相同的Shape碰撞時被調用。現在,使此代碼正常工作的「祕密」是這樣的事實,即如果對象仍在Body上發生碰撞,但是與另一個Shape發生衝突,則將首先調用event.phase=="began",然後調用Shape,然後調用event.phase=="ended"

在此之後,因爲我想影響我物體的速度,而這是在我的element(這是對我的情況下的箭頭),我只是在我的場景,下面這段代碼中使用的Runtime:addEventListener("enterFrame", scene)

function scene:enterFrame() 
    if (element.collision_counter>0) then 
     local rad=math.rad(element.rotation) 
     other_object:applyForce(15, 0, other_object.x, other_object.y) 
    end 
end