Corona SDK - 发射抛射物(处理每个实例)

我目前正在尝试使用 Corona SDK 来进行投射物射击。然而,我不知道应该如何最好地去做。我猜想你必须生成相同对象的实例并对它们施加力量,但我不知道最好的方式是什么,或者我应该如何处理每个实例。我仍在学习 Lua,只需要一些关于如何做的指导,任何帮助都将不胜感激。

我想能够检查子弹是否击中了屏幕顶部的一个传感器对象(我还没有实现这一点,但我知道如何做),然后销毁击中传感器的子弹,但是我如何检查每个实例并逐个销毁它们呢?

以下是我目前拥有的基本结构。

点赞
用户869951
用户869951

不确定这是否符合你的要求,但处理可以在后续碰撞中被删除的多个对象的策略是:

  1. 创建子弹显示对象,带有碰撞处理程序
  2. 在碰撞处理程序中,如果需要删除对象,请使用 removeSelf;其他更改可能需要延迟更改,如 修改对象 中所述。

因此,在你的 shoot 函数中,你可以添加以下代码,在 projectile:setLinearVelocity 后面:

projectile.collision = function (event)
        ...
        if remove then
             self:removeSelf()
        end
        ...
    end
projectile:addEventListener( "collision", projectile)

这将为每个子弹添加处理程序。你也可以为传感器添加一个处理程序,它将是类似的代码,在创建传感器后紧接着添加,只是删除 event.other 而不是 self

sensor.collision = function (event)
        ...
        if remove then
             event.other:removeSelf()
        end
        ...
    end
sensor:addEventListener( "collision", sensor)
2014-10-19 23:19:57
用户2839684
用户2839684

这个想法是由 Corona 的工作人员在 Corona 论坛上建议的。

要删除每一个击中传感器的子弹,你需要给它一个类似此类的“类型”。请注意,你可以使用任何单词来替代“类型”,但这是我偏爱的方式。

projectile.type = 'bullet'

然后,你需要向检测碰撞的传感器对象添加一个事件侦听器,这种情况下它是一个名为“wall”的对象。碰撞时,你可以这样移除另一个参与碰撞的对象(子弹)。

local function wallCollision( event )
    if event.phase == 'began' then
        if event.other.type == 'bullet' then
            display.remove( event.other )
            event.other = nil
        end
    end
end

wall:addEventListener( 'collision', wallCollision )

“event.other”针对碰撞事件中涉及到的另一个对象,这种情况下是“bullet”。

2014-10-21 15:23:03