我怎样才能在cocos2d中使用动画?

时间:2009-01-28 06:01:14

标签: iphone objective-c cocoa-touch animation cocos2d-iphone

我正在尝试为iPhone开发轮盘游戏。如何动画(旋转)轮盘?

4 个答案:

答案 0 :(得分:19)

在Cocos2D中非常简单:

[sprite runAction:[RotateBy actionWithDuration:dur angle:360]];

转一圈或

id action = [RepeatForever actionWithAction: [RotateBy actionWithDuration:dur angle:360]];
[sprite runAction:action];

[sprite stopAction:action];

如果您需要连续旋转。

不要忘记确保sprite transformAnchor设置为图像的中心。我想下一个问题应该出现 - 如何让它顺利停止;)

有关操作的更多信息:http://lethain.com/entry/2008/oct/03/notes-on-cocos2d-iphone-development(适用于旧版本,因此使用弃用的'do'代替'runAction')

答案 1 :(得分:17)

我不知道如何在cocos2d中执行此操作(甚至不是这样),但您可以使用Core Animation或CALayers或UIViews来执行此操作。可能最简单的方法是创建一个UIImageView,其中包含轮盘赌的图像并为其制作动画。

要完成此操作,首先通过使用轮盘赌图像初始化来设置UIImageView。如果希望滚轮旋转,请使用以下代码:

CATransform3D rotationTransform = CATransform3DMakeRotation(1.0f * M_PI, 0, 0, 1.0);

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];

rotationAnimation.toValue = [NSValue valueWithCATransform3D:rotationTransform];
rotationAnimation.duration = 0.25f;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 10; 

[rotatingImage.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

假设rotateImage是你的UIImageView。

在此示例中,滚轮将旋转5次,每次旋转需要0.5秒。旋转被分成两半,因为Core Animation将进入下一个最接近的状态,因此在动画想要向另一个方向旋转之前,你可以旋转的最多是半旋转。也就是说,这里的pi弧度(180度)旋转是半圆,但如果你使用(1.5f * pi)旋转角度,它只会变成四分之一圆。同样,如果您使用(0.999f * pi),圆圈将以顺时针方式旋转。

您需要实现轮子的加速和减速,对于那些CAKeyframeAnimation,将取代此示例中的CABasicAnimation。

答案 2 :(得分:5)

您可以按一定数量的弧度旋转视图,无论它是小于完整旋转还是完整旋转的多倍,而不必将旋转分割成碎片。作为示例,以下代码将每秒一次旋转视图达指定的秒数。您可以轻松地修改它以按一定数量的旋转或某些弧度旋转视图。

- (void) runSpinAnimationWithDuration:(CGFloat) duration;
{
    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ];
    rotationAnimation.duration = duration;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

答案 3 :(得分:3)

有几种方法可以做到。

如果您有车轮的逐帧动画,请查看AtlasDemo(cocos2d发行版的一部分)。

否则,请看一下Sprite的RotateBy:方法。