2013-10-29 49 views
0

我正在使用Corona SDK编写Lua,并且我正在寻找一个对象在碰撞后不活动。如何在Lua(使用Corona SDK)之后使对象处于非活动状态?

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)在碰撞后也是不可见的,但它仍然可以被新的子弹击中。只有一颗子弹,所以我可以直接说出子弹。不管怎样,但是有一系列的球,所以球必须像球一样处理。 有没有办法通过索引,我通过onCollision函数?

回答

2

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

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

timer.performWithDelay(10, delay) 
+1

工作正常!我添加了该代码,然后在重置时重新激活身体。谢谢! –

+0

非常欢迎你:) – PersuitOfPerfection

0

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

+0

那么,event.object1或event.object2是有用的,但它们有一定的局限性。例如,我可以(并且)制作event.object2:isVisible = false;但是,我无法重置object2的x位置,或者将其移动到另一个方向或类似的位置。 –

相关问题