как я могу использовать анимацию в cocos2d?
Я пытаюсь разработать игру в рулетку для iPhone. Как я могу анимацию (rotation) платы Roulette?
- Как получить разницу во времени в iPhone
- Получить процентное использование процессора
- Управление несколькими асинхронными соединениями NSURLConnection
- Понимание подсчета ссылок с помощью Cocoa и Objective-C
- как правильно использовать insertRowsAtIndexPaths?
- SplitView как приложение Facebook на iPhone
- Как добавить userInfo в UIAlertView?
- UIScrollView - показывает полосу прокрутки
Я не знаю, как это сделать в 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"];
предполагая, что rotatingImage является вашим UIImageView.
В этом примере колесо будет вращаться 5 раз, причем каждое rotation занимает 0,5 секунды. Вращения разделены пополам, потому что Core Animation перейдет в следующее ближайшее состояние, так что больше всего вы можете вращать что-то наполовину, пока анимация не захочет вращаться в другом направлении. То есть, поворот pi радиан (180 gradleусов) идет по полукругу, но если вы используете (1.5f * pi) для вашего угла поворота, он будет только четверть круга. Аналогично, если вы использовали (0.999f * pi), кружок вращался по часовой стрелке.
Вы захотите реализовать ускорение и замедление вашего колеса, а для тех, кто в этом примере заменит CAKeyframeAnimation, заменит CABasicAnimation.
В Cocos2D довольно просто:
[sprite runAction:[RotateBy actionWithDuration:dur angle:360]];
сделать один оборот или
id action = [RepeatForever actionWithAction: [RotateBy actionWithDuration:dur angle:360]]; [sprite runAction:action];
а также
[sprite stopAction:action];
если вам нужно постоянно вращаться.
Не забудьте удостовериться, что преобразование спрайта Anchor установлено в центр изображения. И я предполагаю, что следующий вопрос должен возникнуть – как заставить его останавливаться плавно;)
Подробнее о действиях: http://lethain.com/entry/2008/oct/03/notes-on-cocos2d-iphone-development (это для более старой версии, поэтому вместо «runAction» используется устаревшее «do»)
Вы можете поворачивать представление по некоторому количеству радианов, независимо от того, меньше ли это полного вращения или много кратных полного вращения, без необходимости разделить поворот на куски. Например, следующий код будет вращать просмотр один раз в секунду в течение заданного количества секунд. Вы можете легко изменить его, чтобы вращать вид на определенное количество вращений или на некоторое количество радианов.
- (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"]; }
Есть несколько способов, которыми вы можете это сделать.
Если у вас есть покадровая анимация для колеса, посмотрите AtlasDemo (часть дистрибутива cocos2d).
В противном случае взгляните на метод RotateBy: