LUA和Corona错误:尝试调用方法''(空值)- 让我发疯

我想请你帮我解决一个让我很困扰的错误。

哦...我在使用 Corona SDK 的 LUA ...

我正在创建一个飞船实例。飞船正在被实例化,我可以访问它的属性,但我无法访问任何方法!请看下面的代码,我不知道该如何处理:

spaceShip.lua:

require('gameConf')

spaceShip = {}
spaceShip.__index = spaceShip

function spaceShip:New(posX, posY, width, height)
    local _spaceShip = nil
    _spaceShip = {}
    setmetatable(_spaceShip, spaceShip)

    _spaceShip = display.newRect(posX - width/2, posY - height/2, width, height)
    _spaceShip:setFillColor(140, 140, 140, 0)
    _spaceShip.width = width
    _spaceShip.height = height

    local shipShape = { -width/2, -height/2, width/2, -height/2, width/2, height/2, -width/2, height/2 }
    local shipShapeMaterial = { density = 1.0, friction = 1.0, bounce = 0.0 , shape = shipShape}

    local shipMotor = { -width/2, height/3, width/2, height/3, width/2, height/2, -width/2, height/2 }
    local shipMotorMaterial = { density = 1.0, friction = 1.0, bounce = 0.0 , shape = shipMotor}

    physics.addBody( _spaceShip, shipShapeMaterial, shipMotorMaterial )

    return _spaceShip
end

function spaceShip:log()
    print("ship")
end

function spaceShip:applyFrontImpulse()
    local angle = math.rad(self.rotation)
    local xComp, yComp = math.cos(angle), -math.sin(angle)
    local forceMag = 2

    self:applyLinearImpulse(forceMag * xComp, forceMag * yComp, self.x, self.y)
end

以及 main.lua 的一部分

require('camera')
require('gameConf')
require('meteor')
require('spaceShip')

-- 添加物理引擎
local physics = require( "physics" )
physics.start()
physics.setDrawMode( "hybrid" )
physics.setGravity( 0, 0 )

-- 加载相机
local camera = camera:New()

-- 容器
meteorManager = {}
shipManager = {}

-- 加载向量类
vector = require "vector"

-- 创建一个飞船
local myShip = nil;
myShip = {}
myShip = spaceShip:New(600, 200, 30, 60)
table.insert(shipManager, myShip)
camera:insert(myShip)
myShip:log() <----- 这里出现了错误

其他代码...

终端中的错误是:

2013-03-21 19:18:15.736 Corona Simulator[48347:707] 运行时错误:
2013-03-21 19:18:15.737 Corona Simulator[48347:707] …/Deep Space Harvest/Deep Space Harvest/main.lua:28: 嘗試調用空值的方法'log'
堆栈追踪:
[C]:在函数'log'中
…/Deep Space Harvest/Deep Space Harvest/main.lua:28:在主块中
点赞
用户1442917
用户1442917

我怀疑问题出在这段代码上:

_spaceShip = {}
setmetatable(_spaceShip, spaceShip)

_spaceShip = display.newRect(posX - width/2, posY - height/2, width, height)

你在_spaceShip上设置了元表,但是之后又给它赋了一个新值。在那一点上,你分配的新值没有元表关联,因为它在值上(而不是变量)。

setmetatable放在_spaceShip = display.newRect…之后。

2013-03-22 01:05:09