在Lua中使用Corona SDK,如何使对象在碰撞后变为不活动状态?

我正在使用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)也变得不可见,但仍可以被新子弹击中。因为球是一个数组,所以必须像ball[i].whatever这样来处理它。是否有一种方法可以通过onCollision函数传递索引i?

点赞
用户1150918
用户1150918

根据CoronaSDK事件碰撞章节event.object1event.object2是用于确定发生碰撞的物体(在您的例子中是子弹和其中一个球)的属性(引用)。因此,这不是解决您的问题吗?

2013-10-29 16:21:56
用户1300186
用户1300186

你可以在碰撞处理程序中设置微小的延迟来将物体设置为不活动状态。 即:

-- 在你的碰撞事件中
local function delay()
    -- 将物体的活动状态设置为 false
    body.isBodyActive = false
end

timer.performWithDelay( 10, delay )
2013-10-29 19:15:40