【问题标题】:How do you make an object inactive in Lua (using Corona SDK) after collision?碰撞后如何在 Lua(使用 Corona SDK)中使对象不活动?
【发布时间】:2013-10-30 09:50:20
【问题描述】:

我正在使用 Corona SDK 在 Lua 中编写代码,我希望在碰撞后使对象处于非活动状态。

function onCollision(event)
    if event.phase == "began" then
        bullet.collided = true
        bullet.isVisible = false
        bullet:applyLinearImpulse(-5, 0, bullet.x, bullet.y)
        explode(event)
    end 
end 

function explode(event)
    local x = event.object2.x
    local y = event.object2.y

    explosion.x = x
    explosion.y = y
    explosion.isVisible = true
    explosion:play()
    resetExplosion()
end 

上述函数获取屏幕上的单个子弹,并在与它在 y 轴上射出的球碰撞后使其不可见。然后它会施加一个脉冲以将其从 x 轴的屏幕上移除。我的问题是碰撞中的球(object2)在碰撞后也是不可见的,但它仍然可以被新子弹击中。只有一个子弹,所以我可以直接说bullet.whatever,但是有一系列球,所以球必须像ball[i].whatever一样被寻址。 有没有办法通过 onCollision 函数传递索引?

【问题讨论】:

    标签: android ios lua coronasdk


    【解决方案1】:

    如果您在碰撞处理程序中使用轻微延迟,您可以将主体设置为非活动状态。 即:

    -- Inside your Collision event
    local function delay()
        --Change the body's active state to false
        body.isBodyActive = false
    end
    
    timer.performWithDelay( 10, delay )
    

    【讨论】:

    • 成功了!我添加了该代码,然后在它重置时重新激活了主体。谢谢!
    【解决方案2】:

    根据CoronaSDK chapter about event.collision event.object1event.object2 是标识那些碰撞对象的属性(引用到子弹和你的案例中的一个球)。那么,它不能解决您的问题吗?

    【讨论】:

    • 嗯,event.object1 或 event.object2 很有用,但它们有局限性。例如,我可以(并且确实)使 event.object2:isVisible = false;但是,我无法重置 object2 的 x 位置,或将其移动到另一个方向或类似的东西。
    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 2014-05-31
    • 2015-12-29
    • 2014-06-22
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多