1

cocos2d-x で、CCSequence を個別に定義しようとすると、つまり runAction 内ではなく、次の問題が発生しました。

これは機能します:

sprWheel1->runAction(   CCSequence::actions(
    CCDelayTime::actionWithDuration( fDelayTime ),
    CCEaseExponentialOut::actionWithAction( 
        CCRotateBy::actionWithDuration( fMoveTime, fAngle ) ),
    NULL
) );
sprWheel2->runAction(   CCSequence::actions(
    CCDelayTime::actionWithDuration( fDelayTime ),
    CCEaseExponentialOut::actionWithAction( 
        CCRotateBy::actionWithDuration( fMoveTime, fAngle ) ),
    NULL
) );

これは動作しません:

CCFiniteTimeAction* actRotate = CCSequence::actions(
    CCDelayTime::actionWithDuration( fDelayTime ),
    CCEaseExponentialOut::actionWithAction( 
        CCRotateBy::actionWithDuration( fMoveTime, fAngle ) ),
    NULL
);

sprWheel1->runAction( actRotate );
sprWheel2->runAction( actRotate );

コンパイラ エラーやクラッシュなどは発生しません。スプライトを回転させないだけです。

どうすればこれを修正できますか? (私はこのアクションを複数回使用しているので、一度だけ定義できれば、コードをきれいに保つのに本当に役立ちます)

4

1 に答える 1

4

CCAction の 1 つのインスタンスを複数のオブジェクトで同時に使用しないでください。シーケンス内に含まれるオブジェクトは、アクションの現在の実行時に状態を維持するため、複数のオブジェクトを同時に使用すると騒乱が発生します (cocos は、すべてのアクションを停止することによって、それに対して静かに「ガード」している可能性があります)。アニメートするスプライトごとに個別のシーケンスを用意することをお勧めします。コードの可読性が気になる場合は、そのクラスに、常にシーケンスの新しいインスタンスを返すメソッドを作成してください。

于 2012-10-13T13:51:38.853 に答える