2

Je développe actuellement un jeu en utilisant Swift 3 et SpriteKit. J'ai une pièce qui tombe pendant un jeu que l'utilisateur peut collecter. À l'heure actuelle, il tombe et n'a aucune rotation ou quoi que ce soit. Je veux ajouter un effet de rotation 3D pendant qu'il tombe. Cet effet devrait être une rotation autour de l'axe des ordonnées. Je ne sais pas comment créer un effet 3D comme celui-ci ou si je devrais utiliser un autre programme.3D Coin Flipping Animation sur SKSpriteNode

J'ai trouvé ce que je cherche sur un autre poste de débordement de la pile, mais il est en c objectif:

Spinning an image like a coin

J'ai trouvé un moyen de le faire (à partir du lien) avec Core Animations/Core Graphics, mais je ne sais pas comment le faire fonctionner sur un SKSpriteNode.

var coinFlip = CATransition() 
    coinFlip.startProgress = 0 
    coinFlip.endProgress = 1.0 
    coinFlip.type = "flip" 
    coinFlip.subtype = "fromRight" 
    coinFlip.duration = 0.5 
    coinFlip.repeatCount = 2 

    yourView.layer.addAnimation(coinFlip, forKey: "transition") 

Cette dernière ligne ne fonctionne que sur UIViews et provoque donc des erreurs lorsque je tente de l'exécuter sur un SKSpriteNode.

Si quelqu'un pouvait me expliquer comment faire et/ou me montrer une autre façon de créer cette animation pour un SKSpriteNode il serait grandement apprécié.

+0

Convertir en swift - https://objectivec2swift.com/#/home/converter/ – penatheboss

+1

... um UIKit et SpriteKit sont des animaux trop différents, votre code ne fonctionne pas, Sprite Kit n'a rien que je sais de ce que vous obtiendrez ce que vous recherchez nativement, vous allez devoir faire des textures qui créent un effet de rotation 3d et l'animent de cette façon. – Knight0fDragon

+0

Je me suis dit ... Existe-t-il une autre façon similaire de créer ce type d'animation dans le kit de sprite? – Nik

Répondre

1

J'ai fini par créer l'effet de rotation en diminuant et en augmentant le xScale de la pièce tout en changeant le colorBlendFactor pour que la pièce semble s'assombrir quand la lumière ne devrait pas la frapper.

Voici mon code:

let scaleSequence = SKAction.sequence([SKAction.scaleX(to: 0.1, duration: 0.75), SKAction.scaleX(to: 1, duration: 0.75)]) 
let darkenSequence = SKAction.sequence([SKAction.colorize(with: SKColor.black, colorBlendFactor: 0.25, duration: 0.75, SKAction.colorize(withColorBlendFactor: 0, duration: 0.75)]) 
let group = SKAction.group([scaleSequence, darkenSequence]) 
fallingCoin.run(SKAction.repeatForever(group)) 

Il est un peu en désordre, mais il fonctionne. En termes simples, il utilise SKAction.group pour que les actions menées simultanément et je mets les SKAction.sequence s de assombrir la couleur et « tourner » la pièce de monnaie dans le groupe de sorte que chaque séquence fonctionne simultanément. Notez également que toutes les durées sont de 0,75. Si vous utilisez ce code, assurez-vous que toutes les durées sont les mêmes afin que l'effet ne soit pas gâché.

Pour que la pièce ressemble à son retournement plutôt que de tourner, au lieu de modifier le xScale, remplacez le yScale à la place.

Merci à @mobile Ben pour moi pointant dans la bonne direction!

+0

Maintenant, c'est la déclaration longue :) Avez-vous envisagé de mettre cela en quelques lignes distinctes?Je veux dire, je suis très familier avec SpriteKit et SKAction est mon préféré :), mais même s'il est facile de comprendre ce qui se passe, ce n'est pas lisible. La décomposer en quelques phrases rendrait ce code beaucoup plus efficace. – Whirlwind

+0

@Whirlwind Ouais lol. C'est écrit de cette façon seulement parce que j'ai écrit cette ligne très tôt dans ma "carrière" rapide/SpriteKit. Je vais arranger ça maintenant – Nik