下面的代码来自一个在太空射击游戏中创建并返回外星飞船到main.lua的类。
我需要包含一个函数来确定如果这艘船遇到一个物体会发生什么,但是当我运行代码时,外星人的船确实遇到了什么,我得到了Corona运行时错误:
尝试调用nil值 - 启动追溯:[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
如果我删除碰撞eventlistener,没有错误,外星船只碰到另一个对象,所以它试图调用该函数的方式一定有问题,但我无法弄清楚是什么。 / p>
答案 0 :(得分:3)
我像你一样创建相同的对象,当我添加时我得到错误
return setmetatable(newXenosShip, xenosShip_mt)
我认为当你使用setmetatable时它会导致对象变为nil。尝试删除metatable