0

cocos2dのiPhoneゲームでCCSpeedアクションを使用しました。しかし、いつもクラッシュします。

CCAnimation* animation = nil;
animation = [[CCAnimationCache sharedAnimationCache]  animationByName:ATTACK_ANIM];

if(animation)
{
    CCAnimate *animAction  = [CCAnimate actionWithAnimation:animation];

    id speed = [CCSpeed actionWithAction:animAction speed:0.13f];
    id calBlock = [CCCallBlock actionWithBlock:^{
                                                    //[self updateState:kTileState_Idle];
                                                }];
    CCSequence *sequence = [CCSequence actions:speed, calBlock, nil];        
    [self runAction:sequence];
}

しかし、以下のコードは正常に動作します..しかし、アニメーションの速度を変更することはできません. 上記のコードの何が問題になっていますか?

    CCAnimation* animation = nil;
    animation = [[CCAnimationCache sharedAnimationCache]  animationByName:quakeAnim];

    if(animation)
    {
        CCAnimate *animAction  = [CCAnimate actionWithAnimation:animation];
        id calBlock = [CCCallBlock actionWithBlock:^{
                                                        //[self updateState:kTileState_Idle];
                                                    }];
        CCSequence *sequence = [CCSequence actions:animAction, calBlock, nil];        
        [self runAction:sequence];
    }

ここに 1 つの別のスレッドがあります。しかし、コードソリューションは提供されていません。

4

2 に答える 2

1

animation.delayPerUnit を適切な値に設定して、実行速度を変更できませんか? 私は通常、使用するたびにその数を計算します...したがって、アニメーションをキャッシュに配置する前に設定した最初の「delayPerUnit」を保持する必要はありません。

float totalAnimationTime = kSomeDesiredValue; // game logic dictates this, as well as
                                              // rendering requirements (too slow will be perceived)
animation.delayPerUnit = totalAnimationTime/animation.totalDelayUnits;

// totalDelayUnits is a property of the animation, usually equal to the number
// of frames.
于 2013-03-06T15:36:04.383 に答える
1

あなたはそれを間違っています。;)

CCSpeed はシーケンスで使用できません。シーケンスに animAction を追加する必要がありますが、CCSpeed アクション (ivar) への参照を保持します。次に、アニメーションの速度を変更したいときはいつでも、CCSpeed インスタンスの速度プロパティを変更します。

CCSped を使用するには、シーケンスのメモリと CCSpeed を適切に管理する必要があります。

于 2013-03-06T20:28:34.990 に答える