2013-07-08 46 views
1

下面的代碼來自一個類,該類創建一個外星飛船並將其返回到太空射擊遊戲中的main.lua。電暈運行時錯誤:「嘗試調用一個零值」

我需要包括確定這艘船碰到物體會發生什麼功能,但是當我運行的代碼,和外星飛船確實碰到了什麼東西,我得到的電暈運行時錯誤:

attempt to call a nil value - start traceback: [C]:?

-- COLLISION FUNCTION 
local function xenosColl(event) 
    if (event.phase == "began") then 
    print("hahf") 
    end 
end 


-- XENOS SHIP 
function xenosShip.new() 

    local newXenosShip=display.newSprite(alShipSheet, alShipSeqData) 
    newXenosShip:play() 
    newXenosShip.x=580 
    newXenosShip.y=70 
    newXenosShipShape = {0,-40 , 60,0 , 0,40 , -60,0} 
    newXenosShip.myName = "newXenosShip" 
    physics.addBody(newXenosShip,"dynamic", {density = 1.0, friction = 0.3, bounce = 1, shape = newXenosShipShape}) 
    newXenosShip:applyForce(0,2000,newXenosShip.x,newXenosShip.y) 

    newXenosShip:addEventListener("collision", xenosColl) 

    return setmetatable(newXenosShip, xenosShip_mt) 

end 

return xenosShip 

如果我刪除碰撞事件監聽器,沒有錯誤,外星船隻碰到另一個對象,所以在嘗試調用這個函數時肯定有問題,但我弄不清楚是什麼。

+0

添加錯誤行#這種情況正在發生。 nil值的變量名稱是什麼? – greatwolf

+0

科羅娜給我的信息並不比我放在那裏的信息多。 – Ravn

回答

3

我創建就像你做了同樣的對象,我得到的錯誤,當我加入 return setmetatable(newXenosShip, xenosShip_mt)我認爲它使對象當您使用setmetatable成爲零。嘗試刪除metatable

+0

這似乎工作,謝謝!這裏的教程(http://www.coronalabs.com/blog/2011/09/29/tutorial-modular-classes-in-corona/)讓我覺得在製作課程時,metatable部分是強制性的。 – Ravn

相關問題