2013-12-18 48 views
0

我有從上方落下的塊和在地板上的移動立方體之間的碰撞排除的對象。問題是,無論何時我做多維數據集:addEventListener(「碰撞」,onCollision),立方體碰到地板,電暈認爲這是碰撞。 block:addEventListener也是一樣。由於立方體正在移動的事實,塊並不總是碰到立方體,但碰到地板,電暈檢測到碰撞。從碰撞

我也有一個循環回事產卵塊。有沒有辦法在發生碰撞時禁用此循環,因爲它會不斷產生區塊。

這是我的代碼:你認同&執行相應的動作發生了碰撞對象塊

function blockremove() 
display.remove(block) 
timer.performWithDelay(1000, blockspawn) 
end 

function collision(event) 
if(event.phase == "began") then 
    display.remove(cube) 
    display.remove(block) 
    gameover = display.newText("Game Over", display.contentCenterX, display.contentCenterY, native.systemFontBold, 36) 
    gameover:setFillColor(1,0,0) 
end 
end 


function blockspawn() 
block = display.newRect(0, 0, 50, 50) 
block:setFillColor(1,0,0) 
block.x = math.random(50, display.contentWidth -50) 
block.y = -50 
physics.addBody(block, {density=50, friction=0, bounce=0.3}) 
timer.performWithDelay(3000, blockremove) 
block:addEventListener("collision", collision) 
end 
+0

你說你有多次碰撞可能(塊地板,立方體,地板,塊立方體),並不能找到一種方法來區分他們?不清楚問題是什麼。此外,我建議你保持獨立的問題,在我看來,「禁用循環」問題與第一個完全不同。 – Schollii

+0

是的,那是另外一個問題,我會盡量不要再問在同一職位兩個問題,是的,我有3個對象:地板,那地板上,從空中落下的方塊移動的立方體,我想要的遊戲結束時,塊落在立方體,但我希望它繼續落在地板上時。 – Yupie

回答

1

這方面一個解決方案是

在onCollision功能

您可以識別使用

event.object1.myName event.object2.myName

if event.object2.myName ~= "floor" then 

    -- do what you want here 
else 
    --do nothing 

end 

注意的對象:你會先命名對象 如。

floor.myName = 「地板」

http://developer.coronalabs.com/content/game-edition-collision-detection 請回復或點擊這裏投票我上午塊。

+0

每當我試圖做到這一點:地面。MYNAME = 「接地」 功能碰撞(事件) \t如果event.object2.myName〜= 「接地」 然後 \t \t display.remove(立方體) \t \t display.remove(塊) \t \t GAMEOVER =顯示。 newText( 「遊戲結束」,display.contentCenterX,display.contentCenterY,native.systemFontBold,36) \t \t GAMEOVER:setFillColor(1,0,0) \t年底 結束它似乎沒有工作,我得到的錯誤:嘗試將nil值設置爲object2 – Yupie

+0

如果cube〜= nil,請嘗試此操作,然後將其移除&nil。 –

+0

記住它只能刪除你所看到的,即視覺部分,但同樣的物理身體將留在你的記憶中,你還需要刪除它。 –

1

當物體與其他物體發生碰撞,你看到它調用衝突功能,但它調用幾次,所以首先在一次調用它刪除的對象,但它正試圖清理的對象已經是下一次清潔。

總是安全地刪除對象。

如果對象〜=零然後

--remove 

+0

嗯,這解決了我得到的錯誤,但現在又發生了同樣的情況:當塊碰到地板時,它會檢測到碰撞。我這樣做的權利:功能衝突(事件) \t \t如果立方體〜=零和塊〜=零則 \t \t display.remove(立方體) \t \t立方=零 \t \t display.remove(塊) \t \t塊=零 \t \t GAMEOVER = display.newText( 「遊戲結束」,display.contentCenterX,display.contentCenterY,native.systemFontBold,36) \t \t GAMEOVER:setFillColor(1,0,0) \t \t端 – Yupie

+0

如果event.object2.myName〜= 「地板」,那麼 如果立方體〜=零和塊〜=零然後display.remove(立方體)立方體=零 別的 --do沒什麼 端 –

0
if event.object2.myName ~= "floor" then 
     if cube ~= nil and block ~= nil then 
      display.remove(cube) 
      cube =nil end 
     end 
    end 

首先把該對象與相撞的條件應不地板,如果滿足條件,那麼它應該還通過一個另一個測試,它不應該已經被刪除。