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

前端之家收集整理的这篇文章主要介绍了LUA和Corona错误:尝试调用方法”(零值) – 让我疯狂前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我会请求你的帮助,因为一个让我疯狂的错误.

哦……我正在使用LUA和Corona SDK btw ……

我正在创建一个船的实例.该船正在实例化,我可以访问其属性,但我无法访问任何方法!按照代码,我不知道该怎么做:

spaceShip.lua:

  1. require('gameConf')
  2.  
  3. spaceShip = {}
  4. spaceShip.__index = spaceShip
  5.  
  6. function spaceShip:New(posX,posY,width,height)
  7. local _spaceShip = nil
  8. _spaceShip = {}
  9. setMetatable(_spaceShip,spaceShip)
  10.  
  11. _spaceShip = display.newRect(posX - width/2,posY - height/2,height)
  12. _spaceShip:setFillColor(140,140,0)
  13. _spaceShip.width = width
  14. _spaceShip.height = height
  15.  
  16. local shipShape = { -width/2,-height/2,width/2,height/2,-width/2,height/2 }
  17. local shipShapeMaterial = { density = 1.0,friction = 1.0,bounce = 0.0,shape = shipShape}
  18.  
  19. local shipMotor = { -width/2,height/3,height/2 }
  20. local shipMotorMaterial = { density = 1.0,shape = shipMotor}
  21.  
  22. physics.addBody( _spaceShip,shipShapeMaterial,shipMotorMaterial )
  23.  
  24. return _spaceShip
  25. end
  26.  
  27. function spaceShip:log()
  28. print("ship")
  29. end
  30.  
  31. function spaceShip:applyFrontImpulse()
  32. local angle = math.rad(self.rotation)
  33. local xComp,yComp = math.cos(angle),-math.sin(angle)
  34. local forceMag = 2
  35.  
  36. self:applyLinearImpulse(forceMag * xComp,forceMag * yComp,self.x,self.y)
  37. end

和main.lua的一部分

  1. require('camera')
  2. require('gameConf')
  3. require('meteor')
  4. require('spaceShip')
  5.  
  6. -- Add Physics
  7. local physics = require( "physics" )
  8. physics.start()
  9. physics.setDrawMode( "hybrid" )
  10. physics.setGravity( 0,0 )
  11.  
  12. -- Load camera
  13. local camera = camera:New()
  14.  
  15. -- Containers
  16. meteorManager = {}
  17. shipManager = {}
  18.  
  19. -- Load Vector class
  20. vector = require "vector"
  21.  
  22. -- Create one ship
  23. local myShip = nil;
  24. myShip = {}
  25. myShip = spaceShip:New(600,200,30,60)
  26. table.insert(shipManager,myShip)
  27. camera:insert(myShip)
  28. myShip:log() <----- HERE IS THE ERROR
  29.  
  30. rest of the code...

终端中的错误是:

  1. 2013-03-21 19:18:15.736 Corona Simulator[48347:707] Runtime error:
  2. 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)
  3. stack traceback:
  4. [C]: in function 'log'
  5. ...t/iOS/Deep Space Harvest/Deep Space Harvest/main.lua:28: in main chunk

解决方法

我怀疑这个问题是因为这个片段:
  1. _spaceShip = {}
  2. setMetatable(_spaceShip,spaceShip)
  3.  
  4. _spaceShip = display.newRect(posX - width/2,height)

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

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

猜你在找的Lua相关文章