2013-03-22 4 views
6

私は狂った運転をしているエラーについて助けを求めるでしょう。LUAとコロナのエラー:メソッドを呼び出そうとしています(値無し) - 私を狂わせて運転します

おお...私は、私は、船のインスタンスを作成しています...ところでコロナSDKで

を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の一部

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 

答えて

6

このフラグメントが原因で問題が発生している可能性があります。

_spaceShip = {} 
setmetatable(_spaceShip, spaceShip) 

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

_spaceShipでメタテーブルを設定した後、新しい値を割り当てました。その時点で、割り当てられた新しい値には、値(変数ではない)に設定されたメタテーブルがありません。

setmetatableの後に_spaceShip = display.newRect...の後に移動します。

+0

はい!あなたが正しいです!私はディスプレイで私のメタテーブルを定義していました...修正するために、私はdisplayShip.body =を作成しました。ありがとうございました! –

+0

これを手伝ってもらえますか? http://stackoverflow.com/questions/15716914/object-assignment-lua – user2136963

関連する問題