加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 00:26:38 所属栏目:大数据 来源:网络整理
导读:我会请求你的帮助,因为一个让我疯狂的错误. 哦……我正在使用LUA和Corona SDK btw …… 我正在创建一个船的实例.该船正在实例化,我可以访问其属性,但我无法访问任何方法!按照代码,我不知道该怎么做: spaceShip.lua: require('gameConf')spaceShip = {}spa
我会请求你的帮助,因为一个让我疯狂的错误.

哦……我正在使用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 ….

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读