我目前正在设法解决如何使用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