我正在尝试为iPhone开发一个轮盘游戏。如何对轮盘纸板进行动画(旋转)?
发布于 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。
发布于 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')
发布于 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"];
}
https://stackoverflow.com/questions/486609
复制相似问题