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

C# Discussion :

XNA mon animation ne se fait pas :/


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut XNA mon animation ne se fait pas :/
    Salut a tous !

    Je développe (enfin j'essaye) un Metal Slug a ma sauce.

    J'ai les déplacement etc mais maintenant que je me lance dans les balles, je n'arrive pas a les animer.

    Je ne vois pas d’où ca peut venir. Je les ajoutes dans une liste, je les dessines, mais c'est tout... Elle ne bouge pas (animations)

    voila mon code :

    CLASS PERSONNAGE :

    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
     
     
    List<ClassBalles> ListBalles;
     
    ...
     
    METHODE DE SHOOT
     
     ListBalles.Add(new ClassBalles((int)Math.Round(Position.X + 50), (int)Math.Round(Position.Y) - 30, ClassRessources.pistolBullet));
     
    ...
     
    public void Draw(SpriteBatch spriteBatch)
            {
               for (int i = 0; i < ListBalles.Count; i++)
                {
                    ClassBalles currentBalle = ListBalles[i];
                    currentBalle.Draw(spriteBatch);
                }
    }

    CLASS BALLE

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace SlugRemix
    {
        class ClassBalles
        {
            Rectangle Hitbox;
            Texture2D Texture;
     
            int Timer, AnimationSpeed, FrameColone;
     
            public ClassBalles(int x, int y, Texture2D texture)
            {
                Hitbox = new Rectangle(x, y, texture.Width / 6, texture.Height);
                Texture = texture;
            }
            public ClassBalles()
            {
                Texture = ClassRessources.pistolBullet;
                AnimationSpeed = 10;
            }
     
     
            public void Animate()
            {
                this.Timer++;
     
                if (this.Timer >= AnimationSpeed)
                {
                    this.Timer = 0;
                    this.FrameColone++;
     
     
                    if (FrameColone == 6)
                        FrameColone = 0;
     
                }
            }
     
     
            public void Update()
            {
                Animate();
            }
     
            public void Draw(SpriteBatch spriteBatch)
            {
     
                spriteBatch.Draw(
                   Texture,
                   Hitbox,
                   new Rectangle((FrameColone) * 18, 0, 18, 18),
                   Color.White,
                   0f,
                   new Vector2(18/2, 18/2),
                   SpriteEffects.None,
                   0f);
     
                spriteBatch.DrawString(ClassRessources.font, "Frame " + FrameColone, new Vector2(50, 50), Color.Red);
            }
        }
    }

    Voila mes codes... Le FrameColone tourne bien, mais l'animation ne se fait pas, une petite aide ? Thx !

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Si je lis cette fonction : http://msdn.microsoft.com/en-us/library/ff433992.aspx, il semblerais qu'il y a inversion des paramètres destination/source rectangle.

    Peut-être ceci à la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    spriteBatch.Draw(
                   Texture,
                   new Rectangle((FrameColone) * 18, 0, 18, 18),
                   Hitbox,
                   Color.White,
                   0f,
                   new Vector2(18/2, 18/2),
                   SpriteEffects.None,
                   0f);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    Salut !

    Je viens d'echanger comme tu me l'a dis mais rien du tout. Elle ne s'affiche même plus !

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Re.

    C'est normal. Il faut revoir la classe. Hitbox correspond maintenant aux coordonnées de la texture.

    Peut-ëtre ceci pour vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hitbox = new Rectangle(0, 0, texture.Width, texture.Height);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    Mais ma hitbox sert de point d'origine sur l'apparition de mes balles.

    En quelque sorte je recupere les coordonnés de mon personnage et je l'affiche a cet endroit.

    Si je met 0,0 elle s'affiche en haut a gauche de ma fenetre et toujours sans animation.

  6. #6
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Re.

    Modifie la classe pour en compte les changements comme ceci :

    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
     
     
    class ClassBalles
        {
            Rectangle Hitbox;
            Rectangle SpritePosition;
            Texture2D Texture;
     
            int Timer, AnimationSpeed, FrameColone;
     
            public ClassBalles(int x, int y, Texture2D texture)
            {
                Hitbox = new Rectangle(0, 0, texture.Width, texture.Height);
                SpritePosition = new Rectangle(x, y, texture.Width, texture.Height);
                Texture = texture;
            }
     
            ...
     
     
     
    spriteBatch.Draw(
                   Texture,
                   new Rectangle(FrameColone * SpritePosition.X, SpritePosition.Y, SpritePosition.Width, SpritePosition.Height),
                   Hitbox,
                   Color.White,
                   0f,
                   new Vector2(18/2, 18/2),
                   SpriteEffects.None,
                   0f);


    PS : Le texture.(Width / 6) sert à quoi ?

  7. #7
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 641
    Points : 2 154
    Points
    2 154
    Par défaut
    Il avait oublié d'animer les balles dans la boucle qui les dessinent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void Draw(SpriteBatch spriteBatch)
            {
               for (int i = 0; i < ListBalles.Count; i++)
                {
                    ClassBalles currentBalle = ListBalles[i];
                    currentBalle.Animate();
                    currentBalle.Draw(spriteBatch);
                }
    }

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    Merci bien PixelJuice !

    Et merci a toi aussi Moldavi !

  9. #9
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Re

    Citation Envoyé par PixelJuice Voir le message
    Il avait oublié d'animer les balles dans la boucle qui les dessinent.
    Citation Envoyé par Naografix Voir le message

    Voila mes codes... Le FrameColone tourne bien, mais l'animation ne se fait pas
    Le truc que je ne comprends pas c'est que si le FrameColone tourne bien, c'est que la méthode Animate est appelée...

    En DirectX, la convention (et pour d'autres raisons utiles) est que l'on appelle pas Update/Animate dans le méthode Draw. D'ailleurs je ne vois pas l'intérêt de Animate ici, le code pourrait être directecment dans Update. La méthode Draw c'est pour dessiner et la méthode update c'est juste avant le dessin.

    Mais bon je ne suis pas certain d'avoir tout suivi...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. animate ne fait pas bouger mon image
    Par beegees dans le forum jQuery
    Réponses: 2
    Dernier message: 17/12/2013, 08h41
  2. [2.x] La validation de mon formulaire ne se fait pas
    Par gilloubillou dans le forum Symfony
    Réponses: 7
    Dernier message: 03/08/2012, 09h24
  3. Pourquoi mon animation Flash ne marche pas sur IE ?
    Par Audrey75 dans le forum Flash
    Réponses: 23
    Dernier message: 23/12/2008, 13h58
  4. Mon animation ne se lance pas
    Par sourivore dans le forum Flash
    Réponses: 10
    Dernier message: 09/04/2007, 13h30
  5. Int 21H AX=716Ch ne fait pas mon affaire !!
    Par TheBigMac dans le forum Assembleur
    Réponses: 4
    Dernier message: 10/09/2004, 20h51

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