我正在嘗試在我正在處理的應用中從物理引擎(addBody()和removeBody())添加/刪除對象。我正在使用的應用程序是模塊化的,因此問題出現在兩個文件之一中。Corona SDK添加物理實體/不接受碰撞
目的文件(TransmitterObject)或主文件(主):
這對於相關的代碼:
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' ,然後它會執行一些基本的數學運算以獲得座標。然後它使用計算的信息創建一個矩形(光束)並設置一些屬性。這是所有基本的東西。接下來我告訴它從不可見(alpha = 0)過渡到1秒的可見範圍。什麼時候調用將物體添加到物理引擎的函數'add'。同樣在下一行中刪除對象。
這就是說,當我設置physics.setDrawMode(「調試」)梁對象顯示爲一個靜態的身體,但不接受衝突。有誰知道爲什麼上面的代碼不會接受梁對象的碰撞?
請記住,我有物理引擎中正常工作的其他對象。