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

SDL Discussion :

Probleme gestion multitouche dans shoot'em up C++


Sujet :

SDL

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut Probleme gestion multitouche dans shoot'em up C++
    Bonjour à tous

    Je suis en train de créer un shoot'em up (nom : nemesis). J'ai déjà pas mal avancé, j'ai un vaisseau qui se déplace dans les quatre directions + diagonales et qui tire un obus à chaque fois qu'on appuie sur espace.

    Mon problème : on peut tirer dans toutes les directions sauf dans la diagonale haut-gauche : le programme ne capte la touche espace si haut et gauche sont déjà enfoncés. J'ai revu mes algorithmes mais je vois pas ce qui cloche :

    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
     
    void ship::move()
    {
    	bool up = false;
    	bool down = false;
    	bool left = false;
    	bool right = false;
     
    	if (keys [SDLK_LEFT])
    	{
    		left = true;
    		if (GetX()-speed >= - 30 )
    			SetX( GetX()-speed);
    	}
     
    	if (keys [SDLK_RIGHT])
    	{
    		right = true;
    		if (GetX()+speed <= RES_X - 70 )
    			SetX( GetX()+speed);
    	}
     
    	if (keys [SDLK_UP])
    	{
    		up = true;
    		if (GetY()-speed >= 0)
    			SetY( GetY()-speed);
    	}
     
    	if (keys [SDLK_DOWN])
    	{
    		down = true;
    		if (GetY()+speed <= RES_Y - 30)
    			SetY( GetY()+speed);
    	}
     
    	if (up)
    		currstate = d_up;
     
    	if (down)
    		currstate = d_down;
     
    	if (left)
    		currstate = d_left;
     
    	if (right)
    		currstate = d_right;
     
    	if (up && left)
    		currstate = d_up_left;
     
    	if (up && right)
    		currstate = d_up_right;
     
    	if (down && left)
    		currstate = d_down_left;
     
    	if (down && right)
    		currstate = d_down_right;
     
    	if (!up && !down && !left && !right)
    		currstate = d_straight;
    }
     
    void ship::weapon_management(SDL_Surface *bmp)
    {
     
    	if (keys[SDLK_SPACE] && canshoot)
    	{
    		shoot();
    		canshoot = false;
    	}
     
    	if (!keys[SDLK_SPACE]) canshoot = true;
     
     
    	if ( ! ship_bullets.empty())
    	{
    		move_bullets();
    		remove_bullet();
    		draw_bullets(bmp);
    	}
    }

    je me sers de "currstate" pour afficher un sprite différent en fonction de la direction du vaisseau.

    J'ai également pensé à un bug de la SDL mais ce serait vraiment étonnant.

    pour ceux qui voudraient compiler mon programme, je joint le projet dans son état actuel.

    J'attend vos lumières.
    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut Oh no!
    Le problème ne viens pas de mon programme.

    j'ai fait un nouveau projet SDL qui affiche une image tant que la touche espace est enfoncée et qui ne teste donc pas les touches de direction.
    et là : grand malheur le problème persiste : la touche espace reste inopérante si haut et gauche sont enfoncés.

    Le problème vient donc très probablement de mon matériel .

  3. #3
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    C'est un problème que l'on croise dans diverses situations, genre dans un émulateur quand on va en diagonale en maintenant un bouton et que l'on veut appuyer sur un autre bouton. Ce qui oblige parfois à des choix de touches compliqués

    Ca doit être lié au clavier et à la façon dont il communique avec le PC. Je ne sais pas si les combinaisons possibles ou pas dépendent du modèle mais c'est la poisse.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut
    Merci pour la réponse.
    N' y a t'il pas moyen de resoudre le probleme?
    En attendant, je l'ai contourné en utilisant une touche CTRL.
    c'est dommage, la touche SPACE est parfaite pour le bourrinage !

Discussions similaires

  1. Probleme gestion d'une combobox dans un datagridview
    Par cana13 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/01/2011, 17h05
  2. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10
  3. Probleme d'éffacement dans le cookie
    Par Geulderack dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/04/2003, 14h17
  4. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

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