LUA and Corona error: Attempt To Call Method ' ' (A Nil Value) - Driving Me Crazy

coronasdk, lua

Solution

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. At that point the new value you assigned doesn't have the metatable association you established as it's on the value (not variable).

Move `setmetatable` after `_spaceShip = display.newRect...`.

Problem

I would ask your help for an error that is driving me crazy. 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: ``` 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 ``` 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 ```

Original source

Related problems