2010-11-08 4 views
0

Est-ce que quelqu'un sait comment appliquer la transformation au sprite sans les possibilités de la méthode SpriteBatch.Draw()?XNA sprite transormation

(Mise à jour à partir des commentaires) Voici ce dont j'ai besoin: J'ai un sprite circulaire. Cette image contient des ombres. Je dois étirer ce cercle (faire une ellipse) et le faire pivoter, mais je veux que l'ombre ne change pas sa position en ellipse. La rotation et la mise à l'échelle changent chaque image. Je pense que c'est possible avec la transformation de matrice

+0

Votre question n'a pas de sens Pourriez-vous essayer reformulant Qu'est-ce que vous essayez d'atteindre –

+0

j'ai besoin.? Au premier sprite rotate puis scale SpriteBatch.Draw() met d'abord le sprite à l'échelle, puis le fait pivoter. –

Répondre

0

La matrice passée en SpriteBatch.Begin est appliquée en dernier. L'utilisation de ceci est la seule façon de réaliser une opération d'échelle après une opération de rotation à travers SpriteBatch (en supposant que votre balance est non-uniforme). L'inconvénient est que, si l'échelle de chaque sprite est différente, vous devrez commencer un nouveau lot pour chacun.

Votre autre option est d'écrire votre propre sprite batcher - mais cela semble un peu drastique.

0

Merci! J'ai trouvé la solution, mais il est très lentement = (

this.displayMatrix = 
       Matrix.CreateTranslation(-(new Vector3(Position, 0))) * 
       Matrix.CreateRotationZ(1) * 
       Matrix.CreateScale(new Vector3(new Vector2(1f, 2f), 1)) * 
       Matrix.CreateTranslation((new Vector3(Position, 0)));