iphone - ¿cómo puedo usar la animación en cocos2d?
objective-c cocoa-touch (4)
Estoy tratando de desarrollar un juego de Ruleta para iPhone. ¿Cómo puedo animar (girar) la placa de ruleta?
No tengo idea de cómo hacer esto en cocos2d (o incluso qué es eso), pero puedes hacerlo usando Core Animation con CALayers o UIViews. Probablemente, la forma más simple sería crear un UIImageView que contenga una imagen de su ruleta y animar eso.
Para lograr esto, primero configure su UIImageView inicializándolo con su imagen de ruleta. Cuando desee que la rueda gire, use el siguiente código:
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"];
suponiendo que rotatingImage es tu UIImageView.
En este ejemplo, la rueda giraría 5 veces, y cada rotación tomaría 0,5 segundos. Las rotaciones se dividen a la mitad porque Core Animation pasará al siguiente estado más cercano, por lo que lo máximo que puedes girar es media rotación antes de que la animación quiera girar en la otra dirección. Es decir, la rotación de pi radianes (180 grados) aquí tiene un semicírculo, pero si usó (1.5f * pi) para su ángulo de rotación, solo iría un cuarto de círculo. Del mismo modo, si usaste (0.999f * pi), el círculo rotaría en el sentido de las agujas del reloj.
Deberá implementar aceleración y desaceleración de su rueda, y para aquellos, una CAKeyframeAnimation tomaría el lugar de la CABasicAnimation en este ejemplo.
Hay un par de formas en que puedes hacerlo.
Si tienes la animación fotograma a fotograma para la rueda, echa un vistazo a AtlasDemo (parte de la distribución de cocos2d).
De lo contrario, eche un vistazo al método Sprite''s RotateBy :.
Es bastante simple en Cocos2D:
[sprite runAction:[RotateBy actionWithDuration:dur angle:360]];
hacer un giro o
id action = [RepeatForever actionWithAction: [RotateBy actionWithDuration:dur angle:360]];
[sprite runAction:action];
y
[sprite stopAction:action];
si necesitas rotar continuamente
No se olvide de asegurarse de que Sprite transformAnchor esté en el centro de la imagen. Y creo que debería surgir la siguiente pregunta: cómo hacer que pare sin problemas;)
Más sobre las acciones: http://lethain.com/entry/2008/oct/03/notes-on-cocos2d-iphone-development (es para una versión anterior, por lo que usa ''do'' en desuso en lugar de ''runAction'')
Puede girar una vista, por un número de radianes, independientemente de si es menor que una rotación completa o muchos múltiplos de una rotación completa, sin tener que dividir la rotación en partes. Como ejemplo, el siguiente código girará una vista, una vez por segundo, durante un número específico de segundos. Puede modificarlo fácilmente para hacer girar una vista por un cierto número de rotaciones, o por una cierta cantidad de radianes.
- (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"];
}