Date: 2017/8/9 Cate: C++, cocos2d-x Tags:  

cocos2d-xで、毎フレーム実行したいときにscheduleUpdateとかを使うかと思いますが、その引数でfloat dtとして前のフレームからの経過時間がとれます。
この経過時間に対してゲーム内のアニメーション等を進めて行ったりするのですが、これがデバッグビルドと開発ビルドで異なることがあって少しハマりました。

COCOS2D_DEBUGがtrueなら補正が入る

例えばiOSでアプリ実行時にホームボタンを2度押しして、マルチタスクの画面に入り、数秒経過してから再びアプリに戻ると、dtの値は大きい値になるはずです。
これがXcodeからビルドしたデバッグビルドだと大きい値にならず、リリースビルドでは大きい値になる、ということがありました。
調べてみたところ、この経過時間を計算しているDirector::calculateDeltaTime()にて以下の処理が入っていました。

#if COCOS2D_DEBUG
    // If we are debugging our code, prevent big delta time
    if (_deltaTime > 0.2f)
    {
        _deltaTime = 1 / 60.0f;
    }
#endif

COCOS2D_DEBUGがtrueのとき、すなわちデバッグビルドのときは前フレームからの経過時間が0.2秒以上の場合に1/60秒に修正しているようです。

これに気づかず結構ハマったので、忘れないようメモ。

Leave a Reply