我会请求你的帮助,因为一个让我疯狂的错误. 哦……我正在使用LUA和Corona SDK btw …… 我正在创建一个船的实例.该船正在实例化,我可以访问其属性,但我无法访问任何方法!按照代码,我
哦……我正在使用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, 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') -- 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, posY - height/2, width, height)
您在_spaceShip上设置了metatable,但随后为其分配了一个新值.此时,您指定的新值没有您建立的metatable关联,因为它在值(非变量)上.
在_spaceShip = display.newRect后移动setmetatable ….