我在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。但是没有提供代码解决方案。
答案 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的内存。