我正在学习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
端
谢谢!
答案 0 :(得分:1)
您可以使对象bodyActive为false,然后它不会响应物理。你无法从活动屏幕中的物理中移除一个物体,因此更好的选择是将该物体保持在屏幕之外。
答案 1 :(得分:-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
本地类型的变量(对象)使其工作。
P.S。:vanshika,感谢您的回答,这很有用;)