如何在Lua中使用Cocos2d-x实现此模式
问题描述:
我想在Square
中调用GameScene
setSpecificSquare
函数,它会发生'尝试索引字段'方块'错误。如何在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 = {}
...