IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Rotation d'une image


Sujet :

XNA/Monogame

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut Rotation d'une image
    Bonjour,

    J'essaye désespérément de faire tourner une image sur elle même :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
            Texture2D maTexture;
     
            Rectangle position;
            int rotation;
     
            protected override void Initialize()
            {
                this.graphics.IsFullScreen = false;
                this.graphics.PreferredBackBufferWidth = 800;
                this.graphics.PreferredBackBufferHeight = 600;
                this.graphics.ApplyChanges();
     
                this.Window.Title = "Notre premier programme !";
                this.Window.AllowUserResizing = false;
     
                position = new Rectangle(100, 100, 200, 200);
                rotation = 45;
     
                base.Initialize();
            }
     
            protected override void LoadContent()
            {
                spriteBatch = new SpriteBatch(GraphicsDevice);
                maTexture = this.Content.Load<Texture2D>("carre");
            }
     
            protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.LightSkyBlue);
     
                // TODO: Add your drawing code here
                spriteBatch.Begin();
     
                spriteBatch.Draw(maTexture, position, null, Color.Violet);
                spriteBatch.Draw(maTexture,
                    position,
                    null,
                    Color.White,
                    MathHelper.ToRadians(rotation),
                    new Vector2(position.Width /2, position.Height/2),
                    SpriteEffects.None,
                    0);
     
     
                spriteBatch.End();
                base.Draw(gameTime);
            }
        }
    Avec ce code j'obtiens ça:



    Le 2ème carré à fait une rotation correcte mais le centre des 2 devraient être parfaitement superposés...

    Je ne comprends pas ou est l'erreur

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Salut Kronoss,

    Le rectangle de destination doit être modifié pour prendre en compte la rotation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.LightSkyBlue);
                Rectangle recDest= new Rectangle( position.X + position.Width / 2, 
                                                  position.Y + position.Height / 2, 
                                                  position.Width, 
                                                  position.Height);
     
     
                spriteBatch.Begin(SpriteSortMode.BackToFront,BlendState.AlphaBlend);
     
                spriteBatch.Draw(maTexture, position, null, Color.Violet);
     
                spriteBatch.Draw(maTexture,
                recDest,
                position,
                Color.White,
                MathHelper.ToRadians(rotation),
                new Vector2(position.Width / 2, position.Height / 2),
                SpriteEffects.None,
                0.0f);
     
     
                spriteBatch.End();
                base.Draw(gameTime);
            }
    Un petit conseil, fournis le type d'argument demandé. Rotation doit ête un float donc :
    float rotation;
    puis rotation=45.0f;
    Idem pour le paramêtre layerDepth.
    Ici ça passe quand même, mais ça t'évitera des problèmes à l'avenir.

    Salutations.

Discussions similaires

  1. Rotation d'une image 2D
    Par FidoDido® dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 29/06/2011, 11h55
  2. Rotation d'une image.
    Par poly128 dans le forum Delphi
    Réponses: 4
    Dernier message: 15/05/2006, 12h26
  3. rotation d'une image
    Par KHEOPS1982 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/12/2005, 17h21
  4. Rotation d'une image TIFF
    Par Tub-95 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/10/2005, 20h56
  5. Définir un angle de rotation pour une image
    Par mateo.14 dans le forum C++
    Réponses: 5
    Dernier message: 25/03/2005, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo