如何在Lua中使用Cocos2d-x实现此模式

问题描述:

我想在Square中调用GameScenesetSpecificSquare函数,它会发生'尝试索引字段'方块'错误。如何在Lua中使用Cocos2d-x实现此模式

以我的理解,require("GameScene")onTouchEnded(touch event)没有得到GameScene的最后一个变量,它还没有被构造,所以它没有squares属性。

如何调用GameScene静态功能setSpecificSquare in Square?或者换句话说,如何获得最后的GameScene这样我可以设置self.squares表?

感谢先进! :)

Square.lua

require "Cocos2d" 
require "Cocos2dConstants" 

     local Square = class("Square",function() 
      return cc.Node:create() 
     end) 

     function Square.create() 

      local square = Square.new() 

      return square 
     end 

     function Square:ctor() 
      self.bg = cc.Sprite:create("square_bg.png") 
      self:addChild(self.bg) 
      self.isHighlight = true 
      local function onTouchEnded(touch,event) 
       --occur error here 
       require("GameScene"):setSpecificSquare() 
      end 
     end 

return Square 

GameScene.lua

require "Cocos2d" 
require "Cocos2dConstants" 

local GameScene = class("GameScene",function() 
    return cc.Scene:create() 
end) 

function GameScene.create() 
    local scene = GameScene.new() 
    return scene 
end 


function GameScene:ctor() 
    self.visibleSize = cc.Director:getInstance():getVisibleSize() 
    self.x = cc.Director:getInstance():getVisibleOrigin().x 
    self.y = cc.Director:getInstance():getVisibleOrigin().y 

    self.squares = {} 
    for i=0, 5 do 
     self.squares[i] = {} -- create a new row 
     for j=0, 5 do 
      self.squares[i][j] = nil 
     end 
    end 
    --add layer 
    self.bombLayer = cc.Layer:create() 
    self:addChild(self.bombLayer) 

    --add squares 
    self:addSquares() 
end 

function GameScene:addSquares() 

    for i=0,5 do 
     for j=0,5 do 
      local square = require("src/Square"):create() 
      square:setPosition(0+j*70,0+i*70) 

      self.bombLayer:addChild(square) 

      self.squares[i][j] = square 

     end 
    end 

end 

function GameScene:setSpecificSquare() 
--can not access self.square here, occur attempt to index field 'squares' error 
self.square[0][0].isHighLight 
end 

return GameScene 

移动self.squares = {}ctor功能,或调用addSquares之前调用ctor功能,或者你可以叫此功能在addsquares之内。

推荐的方法是移动它的功能和创建你GameScene对象的创建它:

require "Cocos2d" 
require "Cocos2dConstants" 

local GameScene = class("GameScene",function() 
    return cc.Scene:create() 
end) 

function GameScene.create() 
    local scene = GameScene.new() 
    return scene 
end 

GameScene.squares = {} 

...