読者です 読者をやめる 読者になる 読者になる

フニゲの開発日記

Electronとか...

applicationDidEnterBackgroundとか


 Androidで電話がかかってきたりして、アプリケーションがバックグラウンドに入るときの処理をjsbで書きたい。
 適当なハンドラが見あたらないので(見落としてるかも)、C++側のapplicationDidEnterBackground() から直接呼び出すように書いてみよう。

// Classes/AppDelegate.cpp
...
void AppDelegate::applicationDidEnterBackground()
{
    ...
    ScriptingCore* sc = ScriptingCore::getInstance();
    jsval nsval;
    JS_GetProperty(sc->getGlobalContext(), sc->getGlobalObject(), "g", &nsval);
    if (nsval != JSVAL_VOID) {
        sc->executeFunctionWithOwner(nsval, "didEnterBackground");  
    }
}

 リファレンスを読むと、グローバル関数を呼び出す executeGlobalFunction() というメソッドもあるんだけど、なぜか動かないので executeFunctionWithOwner() を使った。対応するJavaScript側のハンドラは以下の通り。

var g = {};
g.didEnterBackground = function () {
    cc.log("backgroundに入るよ");
};

 同じやり方で applicationWillEnterForeground() に復帰処理も書けると思う。

広告を非表示にする