Domanda

Sto cercando di sviluppare un gioco di Roulette per iPhone. Come posso animare (girare) la scheda della Roulette?

È stato utile?

Soluzione

Non ho idea di come farlo in cocos2d (o anche di cosa si tratti), ma puoi farlo usando Core Animation con CALayers o UIVview. Probabilmente il modo più semplice sarebbe creare un UIImageView contenente un'immagine della tua roulette e animarla.

A tale scopo, prima imposta UIImageView inizializzandolo con l'immagine della ruota della roulette. Quando vuoi che la ruota giri, usa il seguente codice:

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"];

supponendo che rotaryImage sia il tuo UIImageView.

In questo esempio, la ruota ruoterebbe 5 volte, con ogni rotazione impiegando 0,5 secondi. Le rotazioni sono divise a metà perché l'animazione principale passerà al successivo stato più vicino, quindi il massimo che puoi ruotare è una mezza rotazione prima che l'animazione voglia ruotare nell'altra direzione. Cioè, la rotazione pi radian (180 gradi) qui fa un semicerchio, ma se si usasse (1.5f * pi) per l'angolo di rotazione, farebbe solo un quarto di cerchio. Allo stesso modo, se si usasse (0.999f * pi), il cerchio ruoterebbe in senso orario.

Ti consigliamo di implementare l'accelerazione e la decelerazione della tua ruota, e per quelli un CAKeyframeAnimation prenderebbe il posto di CABasicAnimation in questo esempio.

Altri suggerimenti

È abbastanza semplice in Cocos2D:

[sprite runAction:[RotateBy actionWithDuration:dur angle:360]];

per fare un giro o

id action = [RepeatForever actionWithAction: [RotateBy actionWithDuration:dur angle:360]];
[sprite runAction:action];

e

[sprite stopAction:action];

se è necessario ruotare continuamente.

Non dimenticare di assicurarti che sprite transformAnchor sia impostato al centro dell'immagine. E immagino che dovrebbe sorgere la prossima domanda: come farlo smettere senza intoppi;)

Altre informazioni sulle azioni: http: // lethain .com / entry / 2008 / oct / 03 / notes-on-cocos2d-iphone-development (è per la versione precedente, quindi usa 'do' obsoleto invece di 'runAction')

È possibile ruotare una vista di un numero di radianti, indipendentemente dal fatto che sia inferiore a una rotazione completa o molti multipli di una rotazione completa, senza dover dividere la rotazione in pezzi. Ad esempio, il seguente codice farà girare una vista, una volta al secondo, per un determinato numero di secondi. Puoi facilmente modificarlo per ruotare una vista di un certo numero di rotazioni o di un numero di radianti.

- (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"];
}

Ci sono un paio di modi in cui puoi farlo.

Se hai l'animazione fotogramma per fotogramma per la ruota, controlla AtlasDemo (parte della distribuzione cocos2d).

Altrimenti, dai un'occhiata al metodo RotateBy: di Sprite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top