首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在cocos2d中使用动画?

如何在cocos2d中使用动画?
EN

Stack Overflow用户
提问于 2009-01-28 06:01:14
回答 4查看 25.8K关注 0票数 16

我正在尝试为iPhone开发一个轮盘游戏。如何对轮盘纸板进行动画(旋转)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-29 22:08:07

我不知道如何在cocos2d中做到这一点(甚至不知道那是什么),但你可以使用核心动画来做这件事,无论是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"];

假设rotatingImage是您的UIImageView。

在此示例中,轮子将旋转5次,每次旋转需要0.5秒。旋转被一分为二,因为核心动画将转到下一个最接近的状态,因此在动画想要向另一个方向旋转之前,您最多只能旋转一半。也就是说,圆周率(180度)在这里的旋转是一个半圆,但是如果你使用(1.5f * pi)作为旋转角度,它只会旋转四分之一个圆。同样,如果使用(0.999f * pi),圆将以顺时针方式旋转。

您将希望实现轮子的加速和减速,对于这些加速和减速,CAKeyframeAnimation将取代本例中的CABasicAnimation。

票数 17
EN

Stack Overflow用户

发布于 2009-07-26 18:51:53

这在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')

票数 19
EN

Stack Overflow用户

发布于 2009-09-14 19:41:10

可以按一定数量的弧度旋转视图,而不必将旋转拆分为多个部分,而不管它是小于完全旋转还是完全旋转的倍数。例如,下面的代码将每秒旋转视图一次,持续指定的秒数。您可以轻松地对其进行修改,以按一定数量的旋转或按一定数量的弧度旋转视图。

- (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"];
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/486609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档