LUA和Corona错误,为何总尝试调用零值方法,让我抓狂不已?

2026-04-01 20:021阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计563个文字,预计阅读时间需要3分钟。

LUA和Corona错误,为何总尝试调用零值方法,让我抓狂不已?

我会请求你的帮助,因为一个让我疯狂的错误... 唉... 我目前正在使用LUA和Corona SDK,正在创建一个船的实例。该船实例正在实例化,我可以访问其属性,但我无法访问任何方法!按照代码,我...

我会请求你的帮助,因为一个让我疯狂的错误.

哦……我正在使用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 我怀疑这个问题是因为这个片段:

LUA和Corona错误,为何总尝试调用零值方法,让我抓狂不已?

_spaceShip = {} setmetatable(_spaceShip, spaceShip) _spaceShip = display.newRect(posX - width/2, posY - height/2, width, height)

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

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

本文共计563个文字,预计阅读时间需要3分钟。

LUA和Corona错误,为何总尝试调用零值方法,让我抓狂不已?

我会请求你的帮助,因为一个让我疯狂的错误... 唉... 我目前正在使用LUA和Corona SDK,正在创建一个船的实例。该船实例正在实例化,我可以访问其属性,但我无法访问任何方法!按照代码,我...

我会请求你的帮助,因为一个让我疯狂的错误.

哦……我正在使用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 我怀疑这个问题是因为这个片段:

LUA和Corona错误,为何总尝试调用零值方法,让我抓狂不已?

_spaceShip = {} setmetatable(_spaceShip, spaceShip) _spaceShip = display.newRect(posX - width/2, posY - height/2, width, height)

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

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