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

Développement 2D, 3D et Jeux Discussion :

Space Invader : pb plusieurs missiles à l'écran


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut Space Invader : pb plusieurs missiles à l'écran
    Bonjour à tous,

    Je vous expose mon probléme:

    J'ai commencé modestement à faire un space invader vraiment simple. C-a-d que pour le vaisseau j'ai dessiné un triangle en bas de l'écan que je bouge pour le moment uniquement de gauche à droite avec les fléches du clavier.

    Je dessine une ligne pour représenter un missile, un segment qui se dessine lorsque j'appuie sur espace (touche tirer) et que je déplace avec glTranslate.
    Si il y à un seul missile je fais appel à ma fonction DessinerMissile() et donc le missile s'affiche à la pointe du triangle et translate sur Y jusqu'a disparaitre.

    Le probléme et que je bloque si il y plusieurs missiles à l'écran. J'ai donc pensé faire une strucutre contenant la position en x et y d'un missile et lorsque j'appuie sur la touche espace je fais un pushback de ma structure temporaire dans un vector de strutures.

    Ensuite j'appel ma fonction DessinerMissile() dans laquelle je fais une boucle du genre tant que i < à la taille du vector de sturctures il faut translater à la postion x[i] et y[i] le missile puis dessiner le missile (c'est surement pas très clair)

    Je ne sais pas si c'est une bonne idée et si il n'y à pas une voix plus simple.

    Connaissez vous un moyen plus simple ?

    merci d'avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le probléme et que je bloque si il y plusieurs missiles à l'écran. J'ai donc pensé faire une strucutre contenant la position en x et y d'un missile et lorsque j'appuie sur la touche espace je fais un pushback de ma structure temporaire dans un vector de strutures.

    Ensuite j'appel ma fonction DessinerMissile() dans laquelle je fais une boucle du genre tant que i < à la taille du vector de sturctures il faut translater à la postion x[i] et y[i] le missile puis dessiner le missile (c'est surement pas très clair)
    C'est très très clair, et c'est exactement la bonne solution

  3. #3
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    Merci pour ta réponse. Je vais essayer ça ce soir.

    a+

  4. #4
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    Sa marche bien avec cette solution du vector mais je rencontre un problème lorsque j'appuie sur la touche espace.

    Lorsque j'appuie dessus je fais donc un pushback dans le vector et je m'attendais à avoir pour une frappe sur la touche espace avoir une nouvelle structure dans le vector correpondant à un nouveau missile.

    Le problème c'est que pour une frappe (normale comme pour faire un espace) j'ai des dixaines (au moins dix/vingt) de structures qui se créent ce qui rend l'affichage des missiles difficile.

    J'ai cherché un moyen de contourné le probléme mais je n'ai pas trouvé de solutions probentes. J'ai essayé de mettre un sleep avant la création d'une nouvelle structure et sa marche bien (les missile s'affichent correctement) mais sa bloc toute la scéne durant le sleep...

    Avez une solution pour résoudre mon probléme?

    Edit: En fait je pense qu'il faut que j'execute un timer pour cette fonction sans bloquer les autres en utilisant un thread peut être.
    La fonction void glutTimerFunc(unsigned int millis, void (*func)(int value), int value); peut-elle m'aider?

    merci d'avance

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Visiblement tu utilises Glut...

    Pourquoi ne pas lancer un missile lorsque la touche espace se relâche ? Cela permettrait d'éviter ton problème.

    Jc

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    ou tu desactive le key repeat si le problème viens de la.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    Pour détecter que la touche est relachée (ou pour déactiver la répétition) je dois obligatoirement passer par une fonction glut ?

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Bundy*Al Voir le message
    Pour détecter que la touche est relachée (ou pour déactiver la répétition) je dois obligatoirement passer par une fonction glut ?
    Oui mais comment fais-tu en ce moment ? En principe je suppose que tu utilises : glutKeyboardFunc

    Pour regarder une touche qui se relache : glutKeyboardUpFunc.

    Enfin, pour enlever le Key Repeat, il faut utiliser glutSetKeyRepeat ou tu peux essayer glutIgnoreKeyRepeat.

    Jc

  9. #9
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    En fait je n'utilise pas glut mais l'API Windows. J'ai cité la fonction de glut tout à l'heure car je suis tombé dessus en recherchant dans les précédents postes.

    D'ou ma question car peut être que dans ce cas je ferai mieux de tout gérer avec glut?

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Bundy*Al Voir le message
    En fait je n'utilise pas glut mais l'API Windows. J'ai cité la fonction de glut tout à l'heure car je suis tombé dessus en recherchant dans les précédents postes.

    D'ou ma question car peut être que dans ce cas je ferai mieux de tout gérer avec glut?
    Cela dépend de ce que tu sais faire et veux faire. Sinon ce que tu fais c'est quelque chose qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    bool espace_appuye = false, espace_gere = false;
    ...
     
    espace_appuye = chercheEtatEspace();
    if((espace_appuye) && (!espace_gere)) {
       espace_gere = true;
       /* Gestion de l'espace */
    }
     
    if(!espace_appuye) {
      espace_gere = false;
    }
    Cela suffira pour n'exécuter ton code de gestion de l'espace qu'une seule fois lorsque l'utilisateur appuie sur l'espace.

    Il te reste a programmer la fonction chercheEtatEspace() qui retourne vrai si l'utilisateur appuie sur la touche espace. Mais visiblement tu sais faire cela .

    Je te conseille aussi la SDL comme bibliothèque mais comme je l'ai dit, cela dépend de ce que tu veux faire.

    Jc

  11. #11
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    ok merci pour ton aide,

    En fait moi ce qui m'importe c'est d'ajouter une seule et unique structure à mon vecteur lorsque j'appuie sur espace.

    Je vais essayer d'utiliser le code que tu m'as proposé.

    a+

  12. #12
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    Merci pour l'aide, sa marche nikel

    a+

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

Discussions similaires

  1. [SDL/C]Projets Space Invaders
    Par jul681 dans le forum SDL
    Réponses: 12
    Dernier message: 18/07/2008, 06h34
  2. Réponses: 0
    Dernier message: 29/04/2008, 07h56
  3. Réponses: 5
    Dernier message: 29/11/2006, 13h55
  4. plusieurs résolutions d'écran
    Par fulgaro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/01/2006, 14h35

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