0

歩行方向(鳥の目で見るRPGのように)でプレーヤーをアニメートしようとしているのでif (joystick.velocity. y > 0){ [player runAction: walkUpAction] }、もちろんこれが問題の原因Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'runAction: Action already runningになります。私が得られないのは、これを回避する方法です。いくつかの変数を追加しようとしましたが(isRunning、実行中の場合はtypethingを呼び出さないでください)、何も機能しないようです。私はcocos2dフォーラムでこれを尋ねましたが、運がありません。何か案は?

4

2 に答える 2

1

これを試して:

最初に.hでいくつかのiVarを宣言します

BOOL _isWalkingUp;
BOOL _isWalkingDown;
BOOL _isWalkingLeft;
BOOL _isWalkingRight;

次に、方向の変化を検出するコードの各セクションで、次のようにします。

if(!_isWalkingUp && ( joystick.velocity.y >0 ) ) {
    [player stopAllActions];
    [player runAction:walkUpAction];
    _isWalkingUp=YES;
    _isWalkingDown=NO;
    _isWalkingLeft=NO;
    _isWalkingRight=NO;
}

など....ぎくしゃくしたモーションコントロールを回避するために、「状態」を追加することをお勧めします。しかし、これはある種の始まりになります。

于 2012-07-09T02:27:28.640 に答える
1

cocos2dでは、実行する前にアクションを再作成する必要があります。つまり、同じアクションを複数回実行することはできません。したがって、他のアクションではなく、このアクションのみを停止したくない場合は、アクションを変数に保存する必要はありません。これはあなたのエラーについてです。もう少し詳しく教えていただければ、あなたはあなたが何をしようとしているのかwalkUpAction、私はあなたが望むことをどのように行うかについてあなたにいくつかの提案をすることを試みることができます。

実際、このジョイスティックがどのように機能するかはわかりませんが、以前の状態が保存されていない場合は、手動で保存して、以前の速度が0で現在の速度が0より大きい場合にアクションを実行できます。再度実行する前にアクションを再作成してください。だから、あなたはこのようなものを持つでしょう

- (void) update:(ccTime)dt
{
    BOOL needRunWalkUpAnimation = (prevVelocity == 0) && (curVelocity > 0);
    if( needRunWalkUpAnimation )
    {
        id walkUpAction = \\create your action here
        [player runAction: walkUpAction];
    }

    prevVelocity = curVelocity;
}
于 2012-07-09T10:29:24.287 に答える