我正在尝试在我正在处理的应用中添加/删除物理引擎中的对象(addBody()和removeBody())。我正在处理的应用程序是模块化的,所以问题出在两个文件中。
对象文件(TransmitterObject)或主文件(main):
这是两者的相关代码:
main.lua
local physics = require("physics")
physics.start()
physics.setGravity(0,0)
physics.setDrawMode( "debug" )
local TransmitterObject = require("TransmitterObject")
function updateGame(event)
if(ITERATIONS % 100 == 0) then
tran1:activate() --create new physics object here
end
ITERATIONS = ITERATIONS + 1
--print(ITERATIONS)
end
Runtime:addEventListener("enterFrame", updateGame)
TransmitterObject.lua
function transmitter.new(props) --constructor
Transmitter =
{
x = props.x,
y = props.y,
receivers = props.receivers
}
return setmetatable( Transmitter, transmitter_mt )
end
function transmitter:activate()
local group = math.random(1, #self.receivers)
local receiver = math.random(1,#self.receivers[group])
local x , y = self.receivers[group][receiver][1], self.receivers[group][receiver][2]
local d = math.sqrt(math.pow((self.x-x),2) + math.pow((self.y-y),2))
local dx = math.abs(self.x - x)
local angle = math.deg(math.acos(dx/d))
local beam = display.newRect(self.x,self.y, d, 10)
beam:setReferencePoint(display.TopLeftReferencePoint)
beam.rotation = 180 + angle
beam:setFillColor(0,255,0)
beam.alpha = 0
local function add(event)
physics.addBody(beam, "static")
end
local function delete(event)
physics.removeBody(beam)
end
transition.to( beam, { time=1000, alpha=1.0, onComplete=add } )
transition.to( beam, { time=1000, delay=2500, alpha=0, onComplete=delete})
end
现在让我试着更好地描述这个问题。基本上每100次'enterFrame'触发我告诉发射器对象(tran1)调用它的函数'activate' 然后预先形成一些基本的数学来获得坐标。然后,它使用计算的信息创建一个矩形(梁)并设置一些属性。这都是基本的东西。接下来我告诉它在1秒的范围内从不可见(alpha = 0)过渡到可见。什么时候调用函数'add'将对象添加到物理引擎。与删除对象的下一行相同。
话虽这么说,当我设置physics.setDrawMode(“debug”)时,梁对象显示为静态体,但不接受碰撞。有谁知道上面的代码为什么不接受梁对象的碰撞?
请记住,我有其他物体在物理引擎中正常工作。
答案 0 :(得分:0)
local function addBody ( event )
physics.addBody(ball, "static")
end
并且在碰撞事件中你必须添加它,
timer.performWithDelay(500, addBody)
唯一可能导致一些问题的是延迟,但由于碰撞不会占用太多时间,所以应该没问题。
对不起这个necroposting,
这只是为了帮助那些可能遇到这个问题的人,
Fannick