Class Corona运行时错误:";尝试调用一个nil值";

Class Corona运行时错误:";尝试调用一个nil值";,class,function,lua,coronasdk,collision,Class,Function,Lua,Coronasdk,Collision,下面的代码来自一个类,该类在太空射击游戏中创建一艘外星飞船并将其返回main.lua 我需要包含一个函数,该函数确定当飞船撞到某个对象时会发生什么,但当我运行代码时,外星飞船确实撞到了某个对象,我会得到Corona运行时错误: 尝试调用nil值-开始回溯:[C]: 如果我删除了collision eventlistener,则没有错误,外星飞船只是撞到了另一个对象,因此它试图调用函数的方式肯定有问题,但我不知道是什么原因。我创建了与您相同的对象,当我添加 返回setmetatable(newXe

下面的代码来自一个类,该类在太空射击游戏中创建一艘外星飞船并将其返回main.lua

我需要包含一个函数,该函数确定当飞船撞到某个对象时会发生什么,但当我运行代码时,外星飞船确实撞到了某个对象,我会得到Corona运行时错误:

尝试调用nil值-开始回溯:[C]:


如果我删除了collision eventlistener,则没有错误,外星飞船只是撞到了另一个对象,因此它试图调用函数的方式肯定有问题,但我不知道是什么原因。

我创建了与您相同的对象,当我添加
返回setmetatable(newXenosShip,xenosShip\u mt)
我认为当您使用setmetatable时,它会导致对象变为零。尝试删除元表

添加错误行#这在上发生。nil值的变量名是什么?Corona给我的信息不比我在那里发布的信息多。这似乎有效,谢谢!这里的教程()使我认为在创建类时,metatable部分是必需的。
-- 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