2014-08-27 34 views
1

我想在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 

回答

1

移動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 = {} 

...