我目前正在設法解決如何使用Corona SDK射擊彈丸。但是,我不知道這樣做的最佳方式。我猜你必須產生同一個對象的實例並對它們施加強制,但我不知道最好的方法來實現它,或者我應該如何處理每個實例。我仍然在學習Lua,只需要一些指導如何去做,任何幫助將不勝感激。Corona SDK - 射擊彈丸(處理每個實例)
我想能夠檢查是否有任何子彈擊中傳感器對象(我沒有實現這一點,但我知道如何)在屏幕的頂部,然後銷燬擊中傳感器的子彈,但如何我是否檢查每個實例並單獨銷燬它們?
這是我迄今爲止的基本結構。
display.setStatusBar(display.HiddenStatusBar)
local physics = require('physics')
physics.start()
local speed = -500
local contentW, contentH = display.contentWidth, display.contentHeight
-- Background
local bg = display.newRect(0, 0, contentW, contentH)
bg.anchorX = 0
bg.anchorY = 0
bg:setFillColor(0, 1, 1)
-- Ground
local ground = display.newRect(0, contentH - 50, contentW, 50)
ground.anchorX = 0
ground.anchorY = 0
ground:setFillColor(0, 0.8, 0)
-- Hero
local hero = display.newRect(contentW/2, contentH/2, 40, 40)
hero:setFillColor(1, 0, 0)
function shoot(event)
if (event.phase == 'began') then
local projectile = display.newRect(hero.x, hero.y, 10, 30)
physics.addBody(projectile, 'dynamic')
projectile.gravityScale = 0
projectile.isBullet = true
projectile:setLinearVelocity(0, -600)
end
end
Runtime:addEventListener('touch', shoot)
這是在電暈論壇上向我解釋的方法,這是由Corona工作人員之一回答的。他還檢查了我的代碼,但沒有對此作出評論,因此我認爲這是正確的解決方案。我已經更新了我的解決方案,指出它是一種替代方法,並且您的解決方案也可以工作。如果調用一個將'other'對象作爲參數並在該函數中刪除它的函數也是一種可行的方法,而不是使用計時器? – guitarmatt99 2014-10-25 21:16:26
如果別人在另一個論壇上提供了答案,那麼在SO中做的正確的事情就是在該論壇中引用該帖子(當然,它有一個URL)。也就是說,現在我的臉上有雞蛋,因爲我剛剛查看了說這是改變的文檔/創建了不需要基本移除的文檔(請參閱下一條評論)。 – Schollii 2014-10-25 21:43:11
來自Corona文檔:「如果您需要修改/創建一個碰撞結果的對象,碰撞處理程序應該設置一個標誌或添加時間延遲,以便在下一個應用程序循環或更高版本中進行更改,例如通過timer.performWithDelay()。在碰撞期間,一個或兩個對象的基本移除(display.remove()或object:removeSelf())不受此規則的約束。 – Schollii 2014-10-25 21:43:38