Cocos2d CCSpeed在行动中崩溃

时间:2013-03-06 15:12:19

标签: cocos2d-iphone ccspeed

我在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];
    }

这是一个花药thread。但是没有提供代码解决方案。

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

你做错了。 ;)

CCSpeed不能按顺序使用。您仍然需要将animAction添加到序列中,但保留对CCSpeed操作(ivar)的引用。然后,每当您想要更改动画速度时,请更改CCSpeed实例的speed属性。

使用CCSped要求您正确管理序列和CCSpeed的内存。