[英]LUA and Corona error: Attempt To Call Method ' ' (A Nil Value) - Driving Me Crazy
I would ask your help for an error that is driving me crazy. 我会请求你的帮助,因为一个让我疯狂的错误。
Ohh... I'm using LUA with Corona SDK btw... 哦......我正在使用LUA和Corona SDK btw ......
I am creating an instance of a ship. 我正在创建一个船的实例。 The ship is being instantiated, I can access its properties, but I can not access any method!! 该船正在实例化,我可以访问其属性,但我无法访问任何方法! Follow the codes, I do not know what to do: 按照代码,我不知道该怎么做:
spaceShip.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
and part of main.lua 和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...
The error in terminal is: 终端中的错误是:
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
I suspect the issue is because of this fragment: 我怀疑这个问题是因为这个片段:
_spaceShip = {}
setmetatable(_spaceShip, spaceShip)
_spaceShip = display.newRect(posX - width/2, posY - height/2, width, height)
You set a metatable on _spaceShip
, but then assigned a new value to it. 您在_spaceShip
上设置了metatable,但随后_spaceShip
分配了一个新值。 At that point the new value you assigned doesn't have the metatable association you established as it's on the value (not variable). 此时,您指定的新值没有您建立的metatable关联,因为它在值(非变量)上。
Move setmetatable
after _spaceShip = display.newRect...
. 在_spaceShip = display.newRect...
之后移动setmetatable
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.