LUA和电晕错误:尝试调用方法''(一个Nil值)-使我疯狂 [英] LUA and Corona error: Attempt To Call Method ' ' (A Nil Value) - Driving Me Crazy

查看:151
本文介绍了LUA和电晕错误:尝试调用方法''(一个Nil值)-使我疯狂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我会问你一个错误,这使我发疯.

I would ask your help for an error that is driving me crazy.

哦...我正在将LUA与Corona SDK结合使用...

Ohh... I'm using LUA with 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

和main.lua的一部分

and part of 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

推荐答案

我怀疑问题是由于此片段引起的:

I suspect the issue is because of this fragment:

_spaceShip = {}
setmetatable(_spaceShip, spaceShip)

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

您在_spaceShip上设置了一个元表,但随后为其分配了一个新值.那时,您分配的新值不具有您在该值(不是变量)上建立的元表关联.

You set a metatable on _spaceShip, but then assigned a new value to it. At that point the new value you assigned doesn't have the metatable association you established as it's on the value (not variable).

_spaceShip = display.newRect...之后移动setmetatable.

这篇关于LUA和电晕错误:尝试调用方法''(一个Nil值)-使我疯狂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆