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 :

[XNA] aide affichage d'un missile lancer par un sprite


Sujet :

XNA/Monogame

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut [XNA] aide affichage d'un missile lancer par un sprite
    bonjour,
    j ai commerncer la creation d un jeu 2d sur xna mais voila je dessine un monstre dans le jeu mais il va de de gauche a droite alors que moi je voudrait qu il va de droite a gauche pouvez vous m aider voici le code:
    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 System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
    namespace MonsterWorld
    {
        class monstre
        {
            int changeImage;
            //propiétés statiques : tous les monstres utilisent les mêmes textures
            static private Texture2D textureMonstre2;
            static private Texture2D textureMonstre1;
            //chaque monstre a les propriétés suivantes :
            private Rectangle posMonstre;       //position du monstre
     
            public Rectangle PosMonstre
            { get
                 {  return posMonstre;}
     
     
            }
                      //utilisée pour changer les images toutes les 8 exécutions de boucle
     
            static public void LoadGraphicsContent(ContentManager monContent) 
            {
                //charge les textures
               textureMonstre1 = monContent.Load<Texture2D>("images/monstre/Requin1") as Texture2D;
               textureMonstre2 = monContent.Load<Texture2D>("images/monstre/Requin2") as Texture2D;
     
            }
            public monstre()        //constructeur par défaut
            {
             changeImage = 0;
             posMonstre = new Rectangle(100,0,80,80);
     
            }
     
             public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier, GameTime Temps, Rectangle ecran )
            {   //initialiation du générateur de nb aléatoires
              Random aleatoire = new Random((int)Temps.TotalRealTime.TotalMilliseconds);
     
              posMonstre.X = (posMonstre.X + aleatoire.Next(1,4 )) % ecran.Width;//vitesse du monstre
              posMonstre.Y = ecran.Height- 400;
              changeImage++;
     
             }
     
            public void Draw(SpriteBatch monSpriteBatch)
            { if (changeImage < 8)
                    {//si on a exécuté 8 boucles : on affiche la première image
                        monSpriteBatch.Draw(textureMonstre1, posMonstre, Color.White);
                    }
                    else
                    {//si on a exécuté plus de 8 boucles : on affiche la deuxième image
                        monSpriteBatch.Draw(textureMonstre2, posMonstre, Color.White);
                        if (changeImage > 16)
                        {
                            changeImage = 0;
                        }
     
                    }
             }
     
        }
    }
    merci encore

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    posMonstre.X = (posMonstre.X + aleatoire.Next(1,4 )) % ecran.Width;
    ton + fait qu'il avance de gauche à droite, tout simplement...

    Si tu initialise sa position à écran.width et qu'ensuite tu fait position - aléatoire tu devrais avoir ce que tu cherche
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Salut, en attendant quelqu'un de plus expérimenté je peux déjà te conseiller de changer cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    posMonstre.X = (posMonstre.X + aleatoire.Next(1,4 )) % ecran.Width;//vitesse du monstre
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    posMonstre.X = (posMonstre.X - aleatoire.Next(1,4 )) % ecran.Width;//vitesse du monstre
    si tu veux que ton monstre aille de droite à gauche.

    Ensuite pour l'animation, personnellement je la choisie en fonction du temps avec l'objet GameTime que tu prend en paramètre de Update et Draw.
    Après je sais pas quelle est la solution la plus efficace, mais en tout cas c'est plus précis.

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci encore maitnenat il defile bien de droite a gauche mais voila il reste bloquer a gauche et continue de recule de quelques centimetre dans une petite zone a gauche.je ne compend pas?
    de plus pouvez vous m aider j essaye de savoir comment je doit m y prendre pour mettre un menu avec le score et les vie en haut de l ecran.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Ton position.X % ecran.Width renvoie un nombre négatif lorsque position.X descend en dessous de 0, c'est donc normal qu'il disparaisse de l'écran vu que l'écran visible va de 0 à ecran.Width..

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    bonjour,
    merci encore de votre attention j ai donc remplacer mes plus par les moins et enlever %ecran witdh le probleme mainteant c est que mes monstre defile bien dans le sens de droite et gauche et ne reste plus bloquer mais il ne defile qu une fois et je ne le revois apres de l autre coté de l'ecran:

    voici le script modiifer:
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
    namespace MonsterWorld
    {
        class monstre
        {
            int changeImage;
            //propiétés statiques : tous les monstres utilisent les mêmes textures
            static private Texture2D textureMonstre4;
            static private Texture2D textureMonstre3;
            static private Texture2D textureMonstre2;
            static private Texture2D textureMonstre1;
            //chaque monstre a les propriétés suivantes :
            private Rectangle posMonstre;     //position du monstre 1
            private Rectangle posMonstre1;
     
     
     
                 public Rectangle PosMonstre1
            { get
                 {  return posMonstre1;}
     
     
            }
     
     
            public Rectangle PosMonstre
            { get
                 {  return posMonstre;}
     
     
            }
                      //utilisée pour changer les images toutes les 8 exécutions de boucle
     
            static public void LoadGraphicsContent(ContentManager monContent) 
            {
                //charge les textures
               textureMonstre4 = monContent.Load<Texture2D>("images/monstre/Pieuvre2") as Texture2D;
               textureMonstre3 = monContent.Load<Texture2D>("images/monstre/Pieuvre1")as Texture2D;
               textureMonstre1 = monContent.Load<Texture2D>("images/monstre/Requin1") as Texture2D;
               textureMonstre2 = monContent.Load<Texture2D>("images/monstre/Requin2") as Texture2D;
     
            }
            public monstre()        //constructeur par défaut
            {
             changeImage = 0;
             posMonstre = new Rectangle(100,0,80,80);
             posMonstre1 = new Rectangle(500, 0, 90, 90);
     
            }
     
     
             public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier, GameTime Temps, Rectangle ecran )
            {   //initialiation du générateur de nb aléatoires
              Random aleatoire = new Random((int)Temps.TotalRealTime.TotalMilliseconds);
     
              posMonstre.X = (posMonstre.X - aleatoire.Next(1,4 )) ;//vitesse du monstre
              posMonstre.Y = ecran.Height- 400;
              changeImage++;
              posMonstre1.X = (posMonstre1.X - aleatoire.Next(1, 4));//vitesse du monstre
              posMonstre1.Y = ecran.Height - 200;
              changeImage++;
     
     
             }
     
            public void Draw(SpriteBatch monSpriteBatch)
            { if (changeImage < 13)
                    {//si on a exécuté 8 boucles : on affiche la première image
                        monSpriteBatch.Draw(textureMonstre1, posMonstre, Color.White);
                        monSpriteBatch.Draw(textureMonstre3, posMonstre1, Color.White);
     
                    }
                    else
                    {//si on a exécuté plus de 8 boucles : on affiche la deuxième image
                        monSpriteBatch.Draw(textureMonstre2, posMonstre, Color.White);
                        monSpriteBatch.Draw(textureMonstre4, posMonstre1, Color.White);
                        if (changeImage > 60)
                        {
                            changeImage = 0;
                        }
     
                    }
             }
     
        }
    }

  7. #7
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    il suffit dans ton Update de faire un test pour vérifier quand ton monstre à fini son passage, et tu réinitialise sa position à droite..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(posMonstre.X == 0)
    posMonstre.X = ecran.Width
    c'est de l'algorithmique tout ça.. je suis surpris que tu sache coder apparemment proprement mais n'arrive pas à trouver ce genre de choses tout seul
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci encore cela marche bien, oui disons que je suis un tp actuellement pour créer ce jeu sur xna mais je ne suis debutant sur ce logiciel donc un peu de mal a le mettre en main.
    merci encore.

    je voudrais aussi savoir comment a ton avis je doit m y prendre pour inserer un menu dans le jeu au debut et sur l ecran du je lui meme pour indiquer le temps et le nombre de vie.

    je viens de restester et de m apercevoir que les sprites ne passe que deux ou trois fois et disparaiasent voici le code modifier il me semble que cela vient de le nombre de fois quand il change l image:
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
    namespace MonsterWorld
    {
        class monstre
        {
            int changeImage;
            //propiétés statiques : tous les monstres utilisent les mêmes textures
            static private Texture2D textureMonstre4;
            static private Texture2D textureMonstre3;
            static private Texture2D textureMonstre2;
            static private Texture2D textureMonstre1;
            //chaque monstre a les propriétés suivantes :
            private Rectangle posMonstre;     //position du monstre 1
            private Rectangle posMonstre1;
     
     
     
                 public Rectangle PosMonstre1
            { get
                 {  return posMonstre1;}
     
     
            }
     
     
            public Rectangle PosMonstre
            { get
                 {  return posMonstre;}
     
     
            }
                      //utilisée pour changer les images toutes les 8 exécutions de boucle
     
            static public void LoadGraphicsContent(ContentManager monContent) 
            {
                //charge les textures
               textureMonstre4 = monContent.Load<Texture2D>("images/monstre/Pieuvre2") as Texture2D;
               textureMonstre3 = monContent.Load<Texture2D>("images/monstre/Pieuvre1")as Texture2D;
               textureMonstre1 = monContent.Load<Texture2D>("images/monstre/Requin1") as Texture2D;
               textureMonstre2 = monContent.Load<Texture2D>("images/monstre/Requin2") as Texture2D;
     
            }
            public monstre()        //constructeur par défaut
            {
             changeImage = 0;
             posMonstre = new Rectangle(100,0,80,80);
             posMonstre1 = new Rectangle(500, 0, 90, 90);
     
            }
     
     
             public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier, GameTime Temps, Rectangle ecran )
            {   //initialiation du générateur de nb aléatoires
              Random aleatoire = new Random((int)Temps.TotalRealTime.TotalMilliseconds);
     
                  posMonstre.X = (posMonstre.X - aleatoire.Next(1, 4));//vitesse du monstre
                  posMonstre.Y = ecran.Height - 400;
                  changeImage++;
                  posMonstre1.X = (posMonstre1.X - aleatoire.Next(1, 4));//vitesse du monstre
                  posMonstre1.Y = ecran.Height - 200;
                  changeImage++;
     
                  if (posMonstre.X == 0)
                  {
                      posMonstre.X = ecran.Width;
                  }
                  if (posMonstre1.X == 0)
                  {
                      posMonstre1.X = ecran.Width;
                  }
     
     
     
             }
     
            public void Draw(SpriteBatch monSpriteBatch)
            { if (changeImage < 15)
                    {//si on a exécuté 8 boucles : on affiche la première image
                        monSpriteBatch.Draw(textureMonstre1, posMonstre, Color.White);
                        monSpriteBatch.Draw(textureMonstre3, posMonstre1, Color.White);
     
                    }
                    else
                    {//si on a exécuté plus de 8 boucles : on affiche la deuxième image
                        monSpriteBatch.Draw(textureMonstre2, posMonstre, Color.White);
                        monSpriteBatch.Draw(textureMonstre4, posMonstre1, Color.White);
                        if (changeImage > 20)
                        {
                            changeImage = 0;
                        }
     
                    }
             }
     
        }
    }

  9. #9
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    plutot que
    met
    comme si tu avance par plus d'une case à la fois, ça marche qd meme...

    sinon les menus je sais pas du tout, je connais absolument pas XNA...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci encore maintenant tout fonctionne.mais j aimerai savoir comment t y prendrai pour que mon personnage puissent tirer sur ses ennemies juste pour te montrer voici le code pour le 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
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
     
    namespace MonsterWorld
    {
        class homme
        {   //propiétés statiques : tous les hommes utilisent les mêmes textures
            static private Texture2D textureHomme1;
            static private Texture2D textureHommeKO;
            //chaque homme dispose des propriétés suivantes
            private Rectangle posHomme; 
                  //utilisée pour changer les images toutes les 8 exécutions de boucle de jeu
            public Rectangle PosHomme
            {
                get
                { return posHomme; }
     
            }
     
            public homme()
            {//constructeur par défaut
     
                //taille du rectangle de l homme
                posHomme = new Rectangle(200,0,98,58);
            }
            static public void LoadGraphicsContent(ContentManager monContent)
            {
                //charge les textures
                textureHomme1 = monContent.Load<Texture2D>("images/homme/ManRight1") as Texture2D;
                textureHommeKO = monContent.Load<Texture2D>("images/homme/ManKilled") as Texture2D;
     
            }
     
            public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier,  Rectangle ecran)
            {//teste l'état du clavier      
                if (posHomme.X == 0)//des que la position du monstre disparait de l'ecran alors on le repositionne a droite
                {
                    posHomme.X = ecran.Width;
                }
                    if (Keyboard.GetState().IsKeyDown(Keys.Space) && PosHomme.X > 20)
                    {//si on appuyé sur espace, le personnage fait un bond
                        posHomme.X = (posHomme.X + 10) % ecran.Width;
                        posHomme.Y = (ecran.Height - 150);
     
                    }
     
     
     
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Right))
                     {
                         posHomme.X++; 
     
                     }
                     if (Keyboard.GetState().IsKeyDown(Keys.Left))
                     {
                         posHomme.X--;
                     }
                //controle fleche haut
                     if (Keyboard.GetState().IsKeyDown(Keys.Down))
                     {
                         posHomme.Y++;
     
                     }
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Up))
                     {
                         posHomme.Y--;
     
                     }
     
     
             }
            public void Draw(SpriteBatch monSpriteBatch, etatsJeu etat)
            {
                if (etat == etatsJeu.encours)
                {
     
     
                        monSpriteBatch.Draw(textureHomme1, PosHomme, Color.White);
     
                }
                    else
                    {
                        if (etat == etatsJeu.perdu)
                        {
                            monSpriteBatch.Draw(textureHommeKO, PosHomme, Color.White);
                        }
                    }
                }
     
     
           public  bool collision(monstre lemonstre)
            {// détecte une collision entre l'objet homme en cours et lemonstre passé en paramètre
             return posHomme.Intersects(lemonstre.PosMonstre);
           }
        }
    }

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Pour les menu tu peux soit utiliser des textures contenant le texte et les afficher, soit utiliser la méthode DrawSprite avec un SpriteFont.

    Pour que le perso puisse tirer c'est simple tu choisie une touche pour déclencher le tir et quand le joueur appuie dessus tu ajoute par exemple un nouveau Vector2 contenant la position x et y du missile dans une liste. Ensuite pour l'affichage tu fais une boucle sur la liste.

    Vraiment plein de manières de faire, c'est des bases de programmation.

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    rebonjour
    merci de votre attention je fait ce que tu m a conseiller pour le personnage qui tire mais je suis encore un peu perdu dans xna je voulais ce que tu pense de ce que j ai ecrit pour que le personnage tire alors j ai rajouter la texture missile dans la class homme:

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
     
    namespace MonsterWorld
    {
        class homme
        {   //propiétés statiques : tous les hommes utilisent les mêmes textures
            static private Texture2D textureHomme1;
            static private Texture2D textureHommeKO;
            static private Texture2D texturemissile;
            //chaque homme dispose des propriétés suivantes
            private Rectangle posHomme; 
                  //utilisée pour changer les images toutes les 8 exécutions de boucle de jeu
            public Rectangle PosHomme
            {
                get
                { return posHomme; }
     
            }
     
            public homme()
            {//constructeur par défaut
     
                //taille du rectangle de l homme
                posHomme = new Rectangle(200,0,98,58);
            }
            static public void LoadGraphicsContent(ContentManager monContent)
            {
                //charge les textures
                textureHomme1 = monContent.Load<Texture2D>("images/homme/ManRight1") as Texture2D;
                textureHommeKO = monContent.Load<Texture2D>("images/homme/ManKilled") as Texture2D;
                texturemissile = monContent.Load<Texture2D>("images/objects/tire") as Texture2D;
     
            }
     
            public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier,  Rectangle ecran)
            {//teste l'état du clavier      
                if (posHomme.X <= 0)//des que la position de l'homme disparait de l'ecran alors on le repositionne a droite
                {
                    posHomme.X = ecran.Width;
     
                }
     
     
     
                    if (Keyboard.GetState().IsKeyDown(Keys.Space) && PosHomme.X > 20)
                    {//si on appuyé sur espace, le personnage fait un bond
     
     
                    }
     
     
     
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Right))
                     {
                         posHomme.X++; 
     
                     }
                     if (Keyboard.GetState().IsKeyDown(Keys.Left))
                     {
                         posHomme.X--;
                     }
                //controle fleche haut
                     if (Keyboard.GetState().IsKeyDown(Keys.Down))
                     {
                         posHomme.Y++;
     
                     }
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Up))
                     {
                         posHomme.Y--;
     
                     }
     
     
             }
            public void Draw(SpriteBatch monSpriteBatch, etatsJeu etat)
            {
                if (etat == etatsJeu.encours)
                {
     
     
                        monSpriteBatch.Draw(textureHomme1, PosHomme, Color.White);
     
                }
                    else
                    {
                        if (etat == etatsJeu.perdu)
                        {
                            monSpriteBatch.Draw(textureHommeKO, PosHomme, Color.White);
                        }
                    }
                }
     
     
           public  bool collision(monstre lemonstre)
            {// détecte une collision entre l'objet homme en cours et lemonstre passé en paramètre
             return posHomme.Intersects(lemonstre.PosMonstre);
           }
        }
    }
    mais je ne sais pas quoi ecrire pour qu il met la ction quand il appuie sur espace et voici la classe plateau qui y rattacher:
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.Audio;
     
    namespace MonsterWorld
    {
        class plateau
     
        { //texture
            private Texture2D texturePaysage;
            //police
            private SpriteFont policeMessage;
     
            // pour positionner le paysage   
            private Rectangle rectPaysage;
            // etat du jeu
            private etatsJeu etatCourant;
            //temps total depuis le début du jeu
            private double tempsParties = 0;
     
            //personnages du plateau
            private homme unhomme;
            private monstre unmonstre;
     
     
            //indique si le son a été joué
           // private bool sonjoué;
     
            //constructeur
            public plateau(int largeur, int hauteur)
            {
                InitJeu();
                rectPaysage = new Rectangle(0, 0, largeur, hauteur);
     
            }
            //intialise les données du jeu
            private void InitJeu()
            {
                rectPaysage.X = 0;      //position du paysage
               // sonjoué = false;
                unhomme = new homme();      //instancie un homme
                unmonstre = new monstre();    //instancie un monstre
     
                etatCourant = etatsJeu.encours;
            }
     
            public void LoadGraphicsContent(ContentManager monContent)
            {  //charge les textures    
                texturePaysage = monContent.Load<Texture2D>("images/paysage") as Texture2D;
                homme.LoadGraphicsContent(monContent);
                monstre.LoadGraphicsContent(monContent);
                policeMessage = monContent.Load<SpriteFont>("maPolice") as SpriteFont;
            }
     
            public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier, GameTime Temps)
            {
                if (etatCourant == etatsJeu.encours)
                {
                    if (Temps.TotalGameTime.TotalMinutes - tempsParties < 10)
                    {//positionnement du paysage
                        rectPaysage.X--;
                        if ( rectPaysage.X<=-rectPaysage.Width)
                        {
                            rectPaysage.X=0;
                        }
                        unhomme.Update(GamePad.GetState(PlayerIndex.One), Keyboard.GetState(), rectPaysage);
                        unmonstre.Update(GamePad.GetState(PlayerIndex.One), Keyboard.GetState(), Temps, rectPaysage);
                        //détection de collision
                       if (unhomme.collision(unmonstre))
                            etatCourant = etatsJeu.perdu;
     
                    }
                    else etatCourant = etatsJeu.gagne;
                }
                else
                {//si l'état courant est perdu ou gagné
     
                    if (EtatClavier.IsKeyDown(Keys.Enter))
                    {// si le joueur a appuyé sur entrer
                        etatCourant = etatsJeu.encours;
                        tempsParties = Temps.TotalGameTime.TotalMinutes;
                        this.InitJeu();
                    }
     
                }
                //Sound.Update();
            }
     
            public void Draw(SpriteBatch monSpriteBatch, GameTime temps)
            { //le rectangle définit la position de l'affichage de l'image, mais aussi sa taille
                //dessine 2 fois le paysage pour donner un effet de défilement
                monSpriteBatch.Draw(texturePaysage, rectPaysage, Color.White);
                Rectangle rectPaysage2 = new Rectangle(rectPaysage.X + rectPaysage.Width, 0, rectPaysage.Width, rectPaysage.Height);
                monSpriteBatch.Draw(texturePaysage, rectPaysage2, Color.White);
     
                //dessine les personnages
                unhomme.Draw(monSpriteBatch, etatCourant);
                unmonstre.Draw(monSpriteBatch);
                if (etatCourant == etatsJeu.encours)
                {
                    monSpriteBatch.DrawString(policeMessage, "Times: " + ((int)(temps.TotalGameTime.TotalMinutes - tempsParties)).ToString(), new Vector2(10, rectPaysage.Height / 40), Color.Red);
     
                }
                else
                {
                    if (etatCourant == etatsJeu.perdu)
                    {
                        monSpriteBatch.DrawString(policeMessage, "Perdu!!", new Vector2(rectPaysage.Width / 2, rectPaysage.Height / 2), Color.Red);
     
     
                    }
                    else
                        monSpriteBatch.DrawString(policeMessage, "Gagne!!", new Vector2(rectPaysage.Width / 2, rectPaysage.Height / 2), Color.Red);
     
     
     
                }
     
            }
        }
    }
    j espere vite avoir des nouvelles merci

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Tu vérifie l'état du clavier au début de la méthode update,... tout simplement !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (IsKeyPressed(key.A))
    {
        // fait quelque chose
    }
    ça déclenche "fait quelque chose" lorsque la touche "A" est pressée

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Mieux encore
    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
     
    private List<keys> m_KeysPressedLastFrame = new List<Keys>();
     
    public override void Update(GameTime gameTime)
    {
        Keys key = key.A;
     
        if(IsKeyPressed(key) && !m_KeysPressedLastFrame.Contains(key))
        {
            // fait quelque chose
        }
     
        m_KeysPressedLastFrame = new List<Keys>(m_KeyboardLastState.GetPressedKeys());
     
    }

  15. #15
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci d avoir repondu voila j ai bien compris qu il faut que quand on appuie sur une touche elle doit lancer le misssile mais voila a part la partie avec la touche je ne sais pas quoi changer dans mon code si tu regarde la classe que j ai mit j ai mit dans la class homme une declaration de missile mais apres je ne sais pas quoi faire exactement peut tu regarder le code de mes classes et me dire exactemeent comment je doit m y prendre merci encore je suis tres impatiente de connaitre ta reponse.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Pour les missiles tu peux faire :

    -Déclarer une liste de vecteur2 en haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Vector2> listPosMissile= new List<Vector2>();
    -Quand le joueur appuie sur espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listPosMissile.Add(new Vector2(tonperso.X, tonPerso.Y));
    -A chaque Update tu met à jour la position des missiles comme avec le monstre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0; i<listPosMissile.Count; i++)
    {
          if(listPosMissile[i].Y <0) listPosMissile.RemoveAt(i);
          listPosMissile[i].Y -= 1;
    }
    -Dans le Draw tu met la même boucle pour dessiner les missiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i=0; i< listPosMissile.Count; i++)
          spriteBatch.Draw(textureMissile, listPosMissile[i], Color.White);

  17. #17
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    Merci encore Surem voila j ai fait ce que tu m a dit est un erreur apparait:

    Impossible de modifier la valeur de retour de 'System.Collections.Generic.List<Microsoft.Xna.Framework.Vector2>.this[int]', car il ne s'agit pas d'une variable

    et voici le script de l homme refait par des precieux indication:
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
     
    namespace MonsterWorld
    {
        class homme
        {   //propiétés statiques : tous les hommes utilisent les mêmes textures
            static private Texture2D textureHomme1;
            static private Texture2D textureHommeKO;
            static private Texture2D textureMissile;
            List<Vector2> listPosMissile = new List<Vector2>();
            //chaque homme dispose des propriétés suivantes
            private Rectangle posHomme; 
                  //utilisée pour changer les images toutes les 8 exécutions de boucle de jeu
            public Rectangle PosHomme
            {
                get
                { return posHomme; }
     
            }
     
            public homme()
            {//constructeur par défaut
     
                //taille du rectangle de l homme
                posHomme = new Rectangle(200,0,98,58);
            }
            static public void LoadGraphicsContent(ContentManager monContent)
            {
                //charge les textures
                textureHomme1 = monContent.Load<Texture2D>("images/homme/ManRight1") as Texture2D;
                textureHommeKO = monContent.Load<Texture2D>("images/homme/ManKilled") as Texture2D;
                textureMissile = monContent.Load<Texture2D>("images/objects/tire") as Texture2D;
     
            }
     
            public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier,  Rectangle ecran)
            {//teste l'état du clavier      
                if (posHomme.X <= 0)//des que la position de l'homme disparait de l'ecran alors on le repositionne a droite
                {
                    posHomme.X = ecran.Width;
     
                }
                for (int i = 0; i < listPosMissile.Count; i++)
                {
                    if (listPosMissile[i].Y < 0) listPosMissile.RemoveAt(i);
                    listPosMissile[i].Y -= 1;
                }
     
     
     
                    if (Keyboard.GetState().IsKeyDown(Keys.Space) && PosHomme.X > 20)
                    {//si on appuyé sur espace, le personnage fait un bond
                        listPosMissile.Add(new Vector2(posHomme.X, posHomme.Y));
     
                    }
     
     
     
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Right))
                     {
                         posHomme.X++; 
     
                     }
                     if (Keyboard.GetState().IsKeyDown(Keys.Left))
                     {
                         posHomme.X--;
                     }
                //controle fleche haut
                     if (Keyboard.GetState().IsKeyDown(Keys.Down))
                     {
                         posHomme.Y++;
     
                     }
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Up))
                     {
                         posHomme.Y--;
     
                     }
     
     
             }
            public void Draw(SpriteBatch monSpriteBatch, etatsJeu etat)
            {
                if (etat == etatsJeu.encours)
                {
     
     
                        monSpriteBatch.Draw(textureHomme1, PosHomme, Color.White);
                        for (int i = 0; i < listPosMissile.Count; i++)
                           monSpriteBatch.Draw(textureMissile, listPosMissile[i], Color.White);
     
                }
                    else
                    {
                        if (etat == etatsJeu.perdu)
                        {
                            monSpriteBatch.Draw(textureHommeKO, PosHomme, Color.White);
                        }
                    }
                }
     
     
           public  bool collision(monstre lemonstre)
            {// détecte une collision entre l'objet homme en cours et lemonstre passé en paramètre
             return posHomme.Intersects(lemonstre.PosMonstre);
           }
        }
    }
    merci beaucoup de ton aide j avais peur que personne n es le temps de repondre. a ton avis qu est ce qui ne vas pas?

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

Discussions similaires

  1. Aide pour protéger un logiciel creer par delphi
    Par osma_1978 dans le forum Delphi
    Réponses: 2
    Dernier message: 02/09/2006, 22h50
  2. Réponses: 7
    Dernier message: 24/07/2006, 15h11
  3. [GD] pb affichage d'une image créée par GD depuis ma base MySQL
    Par freddy92110 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/12/2005, 15h50
  4. Affichage d'un XML chargé par SOAP
    Par glanumf dans le forum ASP
    Réponses: 3
    Dernier message: 12/04/2005, 11h27

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