LUA和Corona错误:尝试调用方法”(零值) – 让我疯狂

前端之家收集整理的这篇文章主要介绍了LUA和Corona错误:尝试调用方法”(零值) – 让我疯狂前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我会请求你的帮助,因为一个让我疯狂的错误.

哦……我正在使用LUA和Corona SDK btw ……

我正在创建一个船的实例.该船正在实例化,我可以访问其属性,但我无法访问任何方法!按照代码,我不知道该怎么做:

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,height)
    _spaceShip:setFillColor(140,140,0)
    _spaceShip.width = width
    _spaceShip.height = height

    local shipShape = { -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,height/2 }
    local shipMotorMaterial = { density = 1.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')

-- Add Physics
local physics = require( "physics" )
physics.start()
physics.setDrawMode( "hybrid" )
physics.setGravity( 0,0 )

-- Load camera
local camera = camera:New()

-- Containers
meteorManager = {}
shipManager = {}

-- Load Vector class
vector = require "vector"

-- Create one ship
local myShip = nil;
myShip = {}
myShip = spaceShip:New(600,200,30,60)
table.insert(shipManager,myShip)
camera:insert(myShip)
myShip:log() <----- HERE IS THE ERROR

rest of the code...

终端中的错误是:

2013-03-21 19:18:15.736 Corona Simulator[48347:707] Runtime error: 
2013-03-21 19:18:15.737 Corona Simulator[48347:707] ...t/iOS/Deep Space Harvest/Deep Space Harvest/main.lua:28: attempt to call method 'log' (a nil value)
stack traceback:
[C]: in function 'log'
...t/iOS/Deep Space Harvest/Deep Space Harvest/main.lua:28: in main chunk

解决方法

我怀疑这个问题是因为这个片段:
_spaceShip = {}
setMetatable(_spaceShip,spaceShip)

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

您在_spaceShip上设置了Metatable,但随后为其分配了一个新值.此时,您指定的新值没有您建立的Metatable关联,因为它在值(非变量)上.

在_spaceShip = display.newRect后移动setMetatable ….

猜你在找的Lua相关文章