как я могу использовать анимацию в cocos2d? - PullRequest
16 голосов
/ 28 января 2009

Я пытаюсь разработать игру для рулетки для iPhone. Как я могу анимировать (раскрутить) доску рулетки?

Ответы [ 4 ]

19 голосов
/ 26 июля 2009

В 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 (для более старой версии, поэтому вместо «runAction» используется устаревшее «do»)

17 голосов
/ 30 января 2009

Я понятия не имею, как это сделать в 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"];

при условии, что вращающийся образ - это ваш UIImageView.

В этом примере колесо будет вращаться 5 раз, причем каждое вращение занимает 0,5 секунды. Вращения разделены пополам, потому что базовая анимация перейдет в следующее ближайшее состояние, поэтому самое большее, что вы можете повернуть, это половинное вращение, прежде чем анимация захочет повернуть в другом направлении. То есть вращение в радианах Пи (180 градусов) здесь идет полукругом, но если вы используете (1,5f * pi) для угла поворота, оно будет идти только четверть круга. Аналогично, если вы используете (0,999f * pi), круг будет вращаться по часовой стрелке.

Вы захотите реализовать ускорение и замедление вашего колеса, и для них CAKeyframeAnimation заменит CABasicAnimation в этом примере.

5 голосов
/ 14 сентября 2009

Вы можете вращать вид на некоторое количество радиан, независимо от того, меньше ли это полный оборот или многократных кратных полного вращения, без необходимости разбивать вращение на части. Например, следующий код будет вращать представление один раз в секунду в течение указанного количества секунд. Вы можете легко изменить его, чтобы вращать вид на определенное количество поворотов или на некоторое количество радиан.

- (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 голосов
/ 07 февраля 2009

Есть несколько способов сделать это.

Если у вас есть покадровая анимация для колеса, посмотрите AtlasDemo (часть дистрибутива cocos2d).

В противном случае взгляните на метод Sprite RotateBy :.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...