2013-02-18 47 views
0

我正在嘗試在我正在處理的應用中從物理引擎(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(「調試」)梁對象顯示爲一個靜態的身體,但不接受衝突。有誰知道爲什麼上面的代碼不會接受梁對象的碰撞?

請記住,我有物理引擎中正常工作的其他對象。

回答

0

哇,我回答超級遲!
碰撞時,不支持修改主體。
我建議你的是創建一個新的功能是什麼,

local function addBody (event) 
physics.addBody(ball, "static") 
end 

,並在碰撞事件,你必須添加此,

timer.performWithDelay(500, addBody) 

,可能會導致一些問題的唯一的事情是在延遲,但由於碰撞不需要太多時間,應該可以。
對不起,這necroposting,
這只是幫助那些可能有問題的其他人,
Fannick