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

Md *_*din 16 iphone animation cocoa-touch objective-c cocos2d-iphone

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

小智 19

在Cocos2D中它非常简单:

[sprite runAction:[RotateBy actionWithDuration:dur angle:360]];
Run Code Online (Sandbox Code Playgroud)

转一圈或

id action = [RepeatForever actionWithAction: [RotateBy actionWithDuration:dur angle:360]];
[sprite runAction:action];
Run Code Online (Sandbox Code Playgroud)

[sprite stopAction:action];
Run Code Online (Sandbox Code Playgroud)

如果你需要连续旋转.

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

有关行动的更多信息:http://lethain.com/entry/2008/oct/03/notes-on-cocos2d-iphone-development(它适用于旧版本,因此它使用弃用的'do'而不是'runAction')


Bra*_*son 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"];
Run Code Online (Sandbox Code Playgroud)

假设rotateImage是你的UIImageView.

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

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


mah*_*udz 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"];
}
Run Code Online (Sandbox Code Playgroud)