0

我正在学习 Corona SDK,并为此目的制作小项目。

所以,我的问题是下一个:我设法创建了 2 个物理对象,并在其中一个与另一个碰撞时使它们“爆炸”。我的问题是如何让其他物体(它施加了线性脉冲)在碰撞时停止?此外,当它停止时,必须将其从屏幕上移除以避免与其他物体发生碰撞......

这是在碰撞时移除第一个对象的部分:

nloDrop = function()
local nlo = display.newImageRect("nlo.png", 65, 25)
nlo.x = 35 + mRand(410) ; nlo.y = -60
physics.addBody(nlo, "dynamic", {density=1, bounce = 0, friction = 0, filter = {maskBits = 4, categoryBits = 2}})
nlo:applyLinearImpulse(0, 0.8, nlo.x, nlo.y)
nlo.isSensor = true
nlo.collision = nloCollision
nlo:addEventListener("collision", nlo)
nlo.name = "nlo"
toFront()

结尾

这是“碰撞”功能:

function nloCollision(self, event)
if ((event.other.myName == "weaponName") then
    print("funkc")
    self:removeSelf()
    self:removeEventListener("collision", nlo)
    self = nil
    if weapon ~= nil then
        -- stop moving of weapon
    end
end

结尾

谢谢!

4

2 回答 2

1

您可以将对象 bodyActive 设为 false,然后它不会响应物理。您不能在活动屏幕内从物理中移除身体,因此将对象保持在屏幕之外是一个更好的选择。

于 2013-06-13T10:24:08.777 回答
-1

我让它像局部变量一样设置对象,并在一些交互或碰撞后创建一个删除/删除每个变量(对象)的函数。

第一个函数包含对象创建(即函数下的局部类型)并将物理应用于该对象。第二个函数包含删除(self:removeSelf()),因为每个对象都是它自己的对象,当删除它时,物理东西将继续工作,因为将创建新的本地对象。

function create(event)
    local weap1 = display.newImage("weap1.png", 0, 0)
    weap1.x = turret.x ; weap1.y = turret.y
    weap1.rotation = turret.rotation
    weap1.collision = weap1Collision
    weap1:addEventListener("collision", weap1)
    physics.addBody(weap1, "dynamic", {density = 1, friction = 0, bounce = 0, filter = {maskBits = 2, categoryBits = 4}})
    weap1:applyLinearImpulse(forceWeap1*xComp, forceWeap1*yComp, weap1.x, weap1.y)

function weap1Collision(self,event)
    if (event.other.name == "collisionObject") then
        self:removeSelf()
        self:removeEventListener("collision", weap1)
        self = nil
    end
end

变量(对象)的局部类型使其工作。

PS:vanshika,感谢您的回答,它很有用;)

于 2013-06-18T06:47:26.763 回答