環境は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