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 :

Problème de tir


Sujet :

XNA/Monogame

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut Problème de tir
    Bonjour,

    Je m'en remet à la communauté car j'ai un étrange problème avec mon petit jeu. C'est un jeu très simple et je n'en suis qu'au début. Un vaisseau spatial qui bouge dans tout les sens et qui tire des missiles vers le haut.

    L'étrange phénomène ce déroule quand le vaisseau vas vers la diagonal haut/gauche, lorsque je pèse sur le space bar pour tirer, rien. Dans tout les autres sens le vaisseau tir sans problème, à l'exception de cette diagonal. Pourtant le code est identique pour la gestion du clavier. Quelqu'un aurais une idée de ce qui cause ce problème? J'utilise XNA 4.0.

    PS, je ne met pas le code, il est disons un peu long et très amateur.

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Sans code on ne peut pas apporter de réponse....
    tu peux pas déboguer pas-à pas et mettre des points d'arrêts ?

  3. #3
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Ce problème n'apparait vraiment que dans ce cas la, ou il apparait aussi quand le vaisseau vas en diagonale haut/droite ( par exemple ) ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    J'arrive pas avec les points d'arrêt, enfin, si je la met tout suite après ma condition si le Space Bar est enfoncé. Ce problème est uniquement pour la diagonal haut/gauche, tout les autres diagonals fonctionne bien.

    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
    KeyboardState keyboardState = Keyboard.GetState();
                playerSpeed = Vector2.Zero;
                if (keyboardState.IsKeyDown(Keys.Up))
                {
                    playerSpeed.Y--;
                    direction.Y--;
                }
                if (keyboardState.IsKeyDown(Keys.Down))
                {
                    playerSpeed.Y++;
                    direction.Y++;
                }
                if (keyboardState.IsKeyDown(Keys.Left))
                {
                    playerSpeed.X--;
                    direction.X--;
                }
                if (keyboardState.IsKeyDown(Keys.Right))
                {
                    playerSpeed.X++;
                    direction.X++;
                }
                if (playerSpeed.Length() > 0f)
                {
                    playerSpeed.Normalize();
                }
                if (playerSpeed.X != 0)
                {
                    directionTemp.X = playerSpeed.X;
                }
                if (playerSpeed.Y != 0)
                {
                    directionTemp.Y = playerSpeed.Y;
                }
                direction.Y = MathHelper.Clamp(direction.Y, -PLAYER_SPEED_MAX, PLAYER_SPEED_MAX);
                direction.X = MathHelper.Clamp(direction.X, -PLAYER_SPEED_MAX, PLAYER_SPEED_MAX);
                position.X += direction.X * Math.Abs(directionTemp.X);
                position.Y += direction.Y * Math.Abs(directionTemp.Y);
                position.X = MathHelper.Clamp(position.X, 0, ScreenWidth - texturePlayer.Width);
                position.Y = MathHelper.Clamp(position.Y, ScreenHeight / 2, ScreenHeight - texturePlayer.Height);
     
                if (keyboardState.IsKeyUp(Keys.Up) && direction.Y < 0)
                {
                    direction.Y += 0.1f;
                    if (direction.Y > 0)
                        direction.Y = 0;
                }
                if (keyboardState.IsKeyUp(Keys.Down) && direction.Y > 0)
                {
                    direction.Y -= 0.1f;
                    if (direction.Y < 0)
                        direction.Y = 0;
                }
                if (keyboardState.IsKeyUp(Keys.Left) && direction.X < 0)
                {
                    direction.X += 0.1f;
                    if (direction.X > 0)
                        direction.X = 0;
                }
                if (keyboardState.IsKeyUp(Keys.Right) && direction.X > 0)
                {
                    direction.X -= 0.1f;
                    if (direction.X < 0)
                        direction.X = 0;
                }
                joueur.Position = position;
     
                currentBulletTime += (float)gameTime.ElapsedGameTime.TotalSeconds;
                if (keyboardState.IsKeyDown(Keys.Space))
                {
                    if (currentBulletTime >= TIME_FOR_NEXT_BULLET)
                    {
                        currentBulletTime = 0f;
                        ballesJoueur.Add(new BulletPlayer(textureBulletPlayer, new Vector2(joueur.Position.X + texturePlayer.Width / 2 - textureBulletPlayer.Width / 2, joueur.Position.Y - textureBulletPlayer.Height)));
                    }
                }
    Ce n'est que la parti de code ou je gère le User Input, il est dans le Update de Game1.

    Sérieux c'est bizarre. J'ai peut-être un court circuit dans mon clavier?

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Sérieux c'est bizarre. J'ai peut-être un court circuit dans mon clavier?
    Bah en fait, presque . Ce n'est pas une panne mais un problème de la fabrication des claviers. Cela n'arrive pas qu'avec votre clavier, mais aussi avec beaucoup d'autres ...

    Essayez de jouer à frets on fire ou un autre jeu de ce genre, vous rencontrerez facilement les problèmes.

    Le problème n'arrive qu'avec certaines combinaisons de touches ... souvent au bout de trois ça devient assez problématique.
    Le truc c'est que pour connaitre les touches appuyer, on utilise un système électronique assez vieux, qui est un assemblage de ligne et de colonne de fil.

    Lorsque une touche est appuyé, on voit que la ligne x est en contact et que la colonne y est en contact.
    Votre cas arrive, que deux touches sont sur la même ligne / ou même colonne, et la première cache donc le code de la deuxième ...

    ( Si j'ai faux, n'hésitez pas à me contredire ).

    En tout cas, si vous arrivez à choper une manette XBox vous n'aurez plus de problème
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre aide.

    LittleWhite ton raisonnement me semble tout à fait logique et répondrais exactement à mon problème. Ça m'enlève une grosse interrogation qui me suis depuis la début de mon petit jeu. Bon, je vais essayer de finir ce ptit jeu si simple mais qui pour moi commence à devenir du code éparpiller ici et là.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Si vous voulez vraiment être sur, changer les touches attribuées aux actions ( je ne sais plus si on peut, mais on doit pouvoir ) comme ça, avec d'autre touches, vous verrez que votre code marche
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Bonne idée, à vrai dire j'avais pensé le faire et changer les touches de direction par W,A,S,D comme d'autres jeux utilisent. Mais pour le moment, j'avoue que mon code spaghetti commence à me mélanger un peu, j'essaie de finir ce petit jeu et après je ferais les petits test nécessaire pour voir que tout marche bien. Je sais pas si un jour je vais dépasser le stade d'amateur en programmation, je le souhaite

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    C'est en programmant que l'on devient programmeur ... donc si vous continuer, vous deviendrez pro
    ( et puis après, y a le forum et les cours, pour aider, ( le forum sert à vous apprendre à mieux coder / arranger votre code ) )
    Je n'espère pas que vous avez mis tout dans un fichier
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Je prend ce conseil à la lettre et j'essayerais de toujours avoir un ptit truc à programmer

    Me reste qu'à trouver des idées qui ne seront pas trop facile ni trop difficile à programmer.

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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