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 :

Probleme pour tirer avec un tank


Sujet :

XNA/Monogame

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Par défaut Probleme pour tirer avec un tank
    Bonjour,

    Je suis débutant C#, et je réalise un jeu de bataille de tank avec XNA. Alors, J'essaye de tirer avec mon tank, je réussi donc, à envoyer le missile lorsque j'appuie sur la touche choisi pour tirer. Mais le problème, c'est que lors de l'appui sur ce même bouton, il reprend de nouveau le même missile pour tirer, alors qu'il devrai envoyer de nouveau missile..

    J'ai essayé donc de faire une liste de missile, puis de me servir du premier élément de la liste pour faire déplacer le missile (lors de l'appui pour tire, j’insère un missile au premier élément de cette même liste, et lorsque je relache le bouton, je déplace le missile avec cet élément ListHitboxMissile[0].X += 5
    Voici, l'erreur qu il me mets: Impossible de modifier la valeur de retour de 'System.Collections.Generic.List<Microsoft.Xna.Framework.Rectangle>.this[int]', car il ne s'agit pas d'une variable

    Merci de m'avoir lu

  2. #2
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    Salut Airmania.

    Tu as oublié de mettre le code entier de ta class concerné, et pour nous, c'est assez difficile de comprendre, malgré tes explications.

    Je vais mettre ici quelques codes pour que tu comprennes comment fonctionne un shooter 2D.
    Pour ça, il te faut une class Bullet et tu créais le rectangle a l'intérieur.

    Class Bullet:
    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
     
    public class Bullet {
     
            public Rectangle hitbox;
     
            public Bullet(int X, int Y) {
                this.hitbox = new Rectangle(X, Y, 10, 10);
            }
     
            //UPDATE
            public void Update() {
     
            }
     
            //DRAW
            public void Draw(SpriteBatch spriteBatch) {
                spriteBatch.Draw(Ressource.pixel, hitbox, Color.Red);
            }
     
        }
    Une class ressource pour les déclarations des images
    Class Ressource:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Ressource {
     
            public static Texture2D pixel;
     
            public static void LoadContent(ContentManager content) {
                pixel = content.Load<Texture2D>("img/Pixel-blanc");
            }
        }
    la class Game1 par défaut de XNA ou Monogame
    Class Game1:
    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
     
    public class Game1 : Game {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
     
            //résolution de l'écran de la fenêtre du jeu
            int windowWidth = 600;
            int windowHeight = 600;
     
            List<Bullet> listBullet;
            public int timer = 0, frameTimer = 10, speed = 5;
     
            public Game1() {
                graphics = new GraphicsDeviceManager(this);
                graphics.PreferredBackBufferWidth = windowWidth;
                graphics.PreferredBackBufferHeight = windowHeight;
                IsMouseVisible = true;
                Content.RootDirectory = "Content";
            }
     
     
            protected override void Initialize() {
                // TODO: Add your initialization logic here
     
                listBullet = new List<Bullet>();
                listBullet.Add(new Bullet(windowWidth / 2, windowHeight));
     
                base.Initialize();
            }
     
            protected override void LoadContent() {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
     
                // TODO: use this.Content to load your game content here
     
                Ressource.LoadContent(Content);
            }
     
            protected override void UnloadContent() {
                // TODO: Unload any non ContentManager content here
            }
     
            protected override void Update(GameTime gameTime) {
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                    Exit();
     
                // TODO: Add your update logic here
     
                if(Mouse.GetState().LeftButton == ButtonState.Pressed) {
                    if (timer == frameTimer) {
                        listBullet.Add(new Bullet(windowWidth / 2, windowHeight));
                        timer = 0;
                    } else {
                        timer++;
                    }
                }
     
                for (int i = 0; i < listBullet.Count; i++) {
                    listBullet[i].hitbox.Y -= speed;
                    if (listBullet[i].hitbox.Y < 0) {
                        listBullet.RemoveAt(i);
                    }
                }
     
                Console.WriteLine("Nombre listBullet restant : " + listBullet.Count);
     
                base.Update(gameTime);
            }
     
     
            protected override void Draw(GameTime gameTime) {
                GraphicsDevice.Clear(Color.CornflowerBlue);
     
                // TODO: Add your drawing code here
     
                spriteBatch.Begin();
     
                foreach (Bullet item in listBullet) {
                    item.Draw(spriteBatch);
                }
     
                spriteBatch.End();
     
                base.Draw(gameTime);
            }
        }
    Voilà un gif de ce que tu devrais voir si tu restes appuyer sur le clique gauche de la souris, et par la même occasion, le nombre de Bullet présente dans le jeu
    https://gyazo.com/6c0f4f45d0626950a80e3839ea7f8f7a

    J'espère t'avoir aidé Airmania.
    Loockys

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Par défaut Problème résolu Loockys
    bonsoir Loockys,

    Je n'ai pas mis mon code, je pensais que cela aurait été inutile, puis j'avais peur d'avoir un peu trop d'aide pour ensuite faire du copier coller... Mais tu m'as quand meme débloqué mon problème sinon je risquais de m'éterniser la dessus. Et ayant un niveau intermédiaire, je pense que cela était finalement utile. Je te remercie d'avoir consacré du temps pour moi, j'avoue être un peu choqué, j'ai jamais communiqué sur un forum, et je pensais pas du tout avoir une réponse.

    Voici mon code dans la classe Tank, c'est un peu sale
    tank.txt

    Je vais te déranger une dernière fois Loockys, j’espère. Lorsque je tire avec mon tank, j'ai trois niveau, normal, moyen et le canon au niveau haut, ce qui m'intéresserai, est l'équation du tire au niveau haut et moyen, qui seraient la même à part je pense, la modification d'une variable. JE pense qu' elle est assez simple cette équation, qui doit former une trajectoire de tire assez arrondi. Voila si tu as une idée, sinon ce n'est pas trop grave, je te remercie encore en tout cas.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    Re salut Airmania.

    Ce que tu cherches à faire ça s'appelle un mouvement parabolique.
    Pour être franc avec toi, je n'ai jamais encore étudié ce problème d'une équation de trajectoire parabolique dans une réalisation 2D, mais je me suis un peu penché et j'ai trouvé ceci.

    une simulation d'un tir parabolique : http://physiquecollege.free.fr/physi...S/tirsTraj.htm

    Mouvement parabolique : ce qu’il faut retenir : http://lewebpedagogique.com/physique...-faut-retenir/

    Je te souhaite bien du courage pour ton projet.
    Et oui comme tu as remarqué sur le forum (XNA / Monogame), il n'y a plus de grandes fréquentations, surement à cause d'Unity ou Unreal Engine, car moi-même, je vois de plus en plus de personne rejoindre, ces communautés.

    Bonne chance Airmania, tu as tout mon soutien.
    Loockys

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2016
    Messages : 6
    Par défaut Remerciement
    Merci et désolé pour cette réponse tardive

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

Discussions similaires

  1. probleme pour compiler avec netbeans en c++
    Par naskaa87 dans le forum NetBeans Platform
    Réponses: 1
    Dernier message: 31/08/2009, 10h58
  2. Probleme pour debuguer avec GDB un projet Qt
    Par phraides dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 07/07/2009, 11h09
  3. probleme pour compiler avec javac
    Par alexlevenere dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 19/05/2009, 12h20
  4. Problème pour debuter avec glut
    Par ismael14 dans le forum GLUT
    Réponses: 2
    Dernier message: 26/07/2004, 11h37

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