1

私の C++/Cocos2d-x コードには、いくつかのカスタム Cocos2d アクションがあります。CCActionInterval私の場合、 orを継承するクラスCCActionInstant。Cocos2d-x バージョン 1.0.1 とバージョン 2.0 では、これらのクラスの更新メソッドの呼び出し方法が異なることに気付きました。アップグレード前は、更新メソッドは常に time=1.0 で少なくとも 1 回呼び出されていました。私が今見たところ、バージョン 2.0 では、インスタント アクションの更新メソッドは time=0 で 1 回だけ呼び出されます。いつもそうですか?CCActionInstantバージョン 2.0 では、 を継承するクラスで update メソッドが 1 回だけ呼び出され、時刻の値が常に 0 になると想定できますか?

4

1 に答える 1

0

最初に言っておきますが、このような実装の詳細について心配する必要はないと思います。をサブクラス化するときCCActionInstantは、サブクラスがインスタント アクションであると常に想定できます。実装の詳細が将来変更された場合、クラスをさらに改善するために変更される可能性があり、サブクラスのパフォーマンスが向上するはずです。

そうは言っても、この実装の詳細について心配する理由があるかもしれないので、ここに拡張された答えがあります。

ライブラリを更新しない限り、常に時刻 0 に呼び出されると想定できます。Cocos2d-x は非常に動的で、cocos2d-iphone のバージョンに応じて変化するため、変更は必ず発生します。


cocos2d v2.0 では、すべてのアクションはCCActionManagerクラスによって管理されます。したがって、そのクラスを確認すると、次のことがわかります。

// main loop
void CCActionManager::update(float dt)
{
...
    if (m_pCurrentTarget->currentAction->isDone())
    {
        m_pCurrentTarget->currentAction->stop();

        CCAction *pAction = m_pCurrentTarget->currentAction;
        // Make currentAction nil to prevent removeAction from salvaging it.
        m_pCurrentTarget->currentAction = NULL;
        removeAction(pAction);
    }
}

ご覧のとおり、が true のremoveAction場合に呼び出されます。isDone()驚くことではありませんが、isDone()メソッドはCCActionInstant常に true を返すため、一度実行すると常に削除されます :)。

于 2012-11-20T10:49:43.607 に答える