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

时间:2014-08-27 08:26:29

标签: lua cocos2d-x

我想在GameScene中调用setSpecificSquare Square功能,它会出现'尝试索引字段'正方形'错误。

据我了解,require("GameScene")中的onTouchEnded(touch event)未获取GameScene的最后一个变量,但尚未构造,因此它没有squares属性。

如何在GameScene中拨打setSpecificSquare静态函数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 个答案:

答案 0 :(得分:1)

self.squares = {}移出ctor函数,或在调用ctor之前调用addSquares函数,或者只需在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 = {}

...