luaノードイベントの呼び出し

環境はcocos2d-x 3.15 + Xcode v7.3.1 + macOS Sierra v10.12.4です。

cocos2d-xのc++プロジェクトではonEnter()を呼び出させるには、それを以下のようにオーバーライドすれば良いですが、
virtual void onEnter() override;
luaは以下のようにイベントハンドラーを登録する必要があります。

function GameScene:onCreate()
    local function onNodeEvent(event)
        if event == "enter" then
            self:onEnter()
        elseif event == "enterTransitionFinish" then
            self:onEnterTransitionFinish()
        elseif event == "exit" then
            self:onExit()
        elseif event == "cleanup" then
            self:onCleanup()
        end
    end
    self:registerScriptHandler(onNodeEvent)
end
	

これだと、Viewごとに登録する必要があります。よくこういったところに処理を追加するのであれば、src/packages/mvc/ViewBase.luaにある以下のコードを真似して
if self.onCreate then self:onCreate() end
以下のように追加すれば、各ビューで登録せずに呼ばれていいではないでしょうか。

    if self.onEnter then
        local function onNodeEvent(event)
            if event == "enter" then
                self:onEnter()
            end
        end
        self:registerScriptHandler(onNodeEvent)
    end
    if self.onEnterTransitionFinish then
        local function onNodeEvent(event)
            if event == "enterTransitionFinish" then
                self:onEnterTransitionFinish()
            end
        end
        self:registerScriptHandler(onNodeEvent)
    end
    if self.onExit then
        local function onNodeEvent(event)
            if event == "exit" then
                self:onExit()
            end
        end
        self:registerScriptHandler(onNodeEvent)
    end
    if self.onCleanup then
        local function onNodeEvent(event)
            if event == "cleanup" then
                self:onCleanup()
            end
        end
        self:registerScriptHandler(onNodeEvent)
    end

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください