2 votes

XNA : éviter la mise à l'échelle de la texture du curseur de la souris en fonction de la matrice de transformation

J'ai besoin de placer le curseur de la souris à la bonne position dans le monde, j'ai donc utilisé ce code :

Matrix inverseViewMatrix = Matrix.Invert(camera.GetViewMatrix(graphics.GraphicsDevice));
mousePos.X -= cursorTex.Width / 2;
mousePos.Y -= cursorTex.Height / 2;
Vector2 worldMousePosition = Vector2.Transform(mousePos, inverseViewMatrix);
spriteBatch.Draw(cursorTex, worldMousePosition, Color.White);

Cela fonctionne, mais lorsque je fais un zoom arrière sur la caméra, le curseur de la souris est mis à l'échelle.

Existe-t-il un moyen d'éviter cela ? Je souhaite conserver la dimension originale de la texture du curseur (32 x 32) même lorsque je fais un zoom arrière.

2voto

Jon Points 7497

La façon la plus simple de procéder est de dessiner le curseur de la souris dans un lot de sprites séparé, en supprimant l'échelle.

SpriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, camera.GetViewMatrix(graphics.GraphicsDevice));
//Regular Draw Code
SpriteBatch.End();

SpriteBatch.Begin();
//Mouse Cursor Draw Code
SpriteBatch.End();

EDIT

Une autre option consisterait à redimensionner votre texture manuellement, en fonction du niveau de zoom actuel de la caméra. Il suffit d'ajuster l'échelle de la texture du curseur en fonction de ce niveau de zoom.

Dans le même appel à tirage au sort que toutes les autres choses, vous pourriez faire :

float scale = 1 / camera.Scale;    //untested
Helper.SpriteBatch.Draw(cursorTex, worldMousePosition, null, Color.White, 0, Vector2.Zero, scale, SpriteEffects.None, 1);

En supposant que votre appareil photo garde la trace de l'échelle mondiale actuelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X