Cocos2D中动态地改变动画速度与CCSpeed(cocos2d dynamically chan

2019-08-06 06:16发布

在一个简单的游戏,角色有大约15帧的动画行走。 基于加速度计是速度沿任一方向变化。 我想动画加快或相应放缓。 我意识到,一旦动画被初始化,则不能更改延迟速度,而是你需要创建一个新的动画。 但由于速度变化几乎不断,如果我坚持正在重置动画,它总是被卡在同一框架上。

有没有办法找到该帧的动画,目前在,停下来,然后创建一个新的动画与同一框架,但开始时的最后一个动画结束?

否则,没有任何人有你怎么可能去实现一个动态变化的动画延迟时间的想法?

编辑:

我一直在使用CCSpeed做这个尝试从一个例子中学习的Cocos2D 2.下面是代码:

CCRepeatForever *walkLeftRepeat = [CCRepeatForever actionWithAction:[CCAnimation animationWithSpriteFrames:walkLeftFrames]];

self.walkLeft = [CCSpeed actionWithAction:walkLeftRepeat speed:animationWalkingSpeed];

我得到以下警告:不兼容的指针类型发送“CCRepeatForever *”到类型的参数“CCActionInterval *”

下面是我从下面的例子:

CCRepeatForever* repeat = [CCRepeatForever actionWithAction:rotateBy];
CCSpeed* speedAction = [CCSpeed actionWithAction:repeat speed:0.5f];

第二个编辑:

然后我尝试这样的:

CCAnimation *walkLeftRepeat = [CCAnimation animationWithSpriteFrames:walkLeftFrames];
CCAnimate *temp = [CCAnimate actionWithAnimation:walkLeftRepeat];
CCAnimate*temp2 = [CCRepeatForever actionWithAction:temp];
self.walkLeft = [CCSpeed actionWithAction:temp2 speed:animationWalkingSpeed];
[_guy runAction:_walkLeft];

最后编辑。 它没有显示出来,此问题已修复通过将延迟ccanimation。

这不会给任何错误的,但没有任何反应。 谢谢!

Answer 1:

无需重新创建动画。 使用与CCAnimate行动作为其内部行动CCSpeed动作。 然后,你可以修改CCSpeed动作的速度性能,以加快或减慢动画。

另一种方法是自己前进帧。 这很容易做到,你只需要一个预定的更新,并且告诉您何时切换到下一帧的计时器。 你加速或通过简单地改变你多么添加到计时器每帧减慢动画。 如果计时器>大于特定值更改帧和计时器复位为0。



Answer 2:

你可以做到这一点在cocos2d游戏:

-(void)preLoadAnim
{
     CCAnimation* animation = nil;
    animation = [[CCAnimationCache sharedAnimationCache]  animationByName:@"ANIMATION_HERO"];

    if(!animation)
    {
        CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];

        NSMutableArray *animFrames = [NSMutableArray array];

        for( int i=1;i<=4;i++)
        {
            CCSpriteFrame *frame = [cache spriteFrameByName:[NSString stringWithFormat:@"HeroRun_%d.png",i]];
            [animFrames addObject:frame];
        }

        animation = [CCAnimation animationWithSpriteFrames:animFrames];

        animation.delayPerUnit = 0.5f; 
        animation.restoreOriginalFrame = NO;

        [[CCAnimationCache sharedAnimationCache] addAnimation:animation name:animName];
    }
}

-(void)runHeroSlowMode
{
     CCAnimation* animation = nil;
    animation = [[CCAnimationCache sharedAnimationCache]  animationByName:@"ANIMATION_HERO"];

    animation.delayPerUnit = 1.0f; 

    CCAnimate *animAction  = [CCAnimate actionWithAnimation:animation];
    CCRepeatForever *runningAnim  = [CCRepeatForever actionWithAction:animAction];
    runningAnim.tag = kTagHeroRunAction;

    [self stopActionByTag: kTagHeroRunAction];

    [heroSprite runAction:runningAnim];

}


-(void)runHeroFastMode
{
     CCAnimation* animation = nil;
    animation = [[CCAnimationCache sharedAnimationCache]  animationByName:@"ANIMATION_HERO"];

    animation.delayPerUnit = 0.1f; 

    CCAnimate *animAction  = [CCAnimate actionWithAnimation:animation];
    CCRepeatForever *runningAnim  = [CCRepeatForever actionWithAction:animAction];
    runningAnim.tag = kTagHeroRunAction;

    [self stopActionByTag: kTagHeroRunAction];
    [heroSprite runAction:runningAnim];

}


Answer 3:

我也面临同样的问题。 在我的游戏,每当我收集的东西我的速度增加。 当时我停下我的当前帧动画改变其延迟时间,然后恢复它....现在它的工作



文章来源: cocos2d dynamically changing animation speed with CCSpeed