[Résolu] Programme SDL
Forum Programmation : [Résolu] Programme SDL
Lire la meilleure réponse, apportée par CRicky.
Bonjour
Voila je fais un projet de mini paint c'est tiré du site du zero.
Meme si tout marche bien j'ai un problème sur l'affichage des moutons, il m'affiche une autre image de mon programme
voila le code si quelqu'un peut m'aider
Code :
|
Merci d'avance
- teste le retour de SDL_WaitEvent()
- utilise un nouvel objet event, ne le réutilise pas, ça peut éviter de futurs problèmes (si tu veux réutiliser l'ancien event).
Je dis ça pour te débloquer, mais c'est pas comme ça qu'on gère les évènements. Normalement dans ton code, tu ne devrais avoir qu'une seule gestion d'évènement mais tu dois la rendre contextuelle. Exemple: dans SelectionDuTampon, tu teste si tu es dans un mode normal (tu fais ton switch principal), ou si tu es dans un mode de sélection de mouton (tu fais un autre switch). En gros, tu ne dois récupérer les évènements qu'à un seul endroit, sinon, tu vas vite te perdre dans ton code.
- si l'évènement n'est pas SDL_KEYDOWN, ça ne fait rien. Il te faudrait peut-être faire une boucle.
- teste le retour de SDL_WaitEvent()
- utilise un nouvel objet event, ne le réutilise pas, ça peut éviter de futurs problèmes (si tu veux réutiliser l'ancien event).
Je dis ça pour te débloquer, mais c'est pas comme ça qu'on gère les évènements. Normalement dans ton code, tu ne devrais avoir qu'une seule gestion d'évènement mais tu dois la rendre contextuelle. Exemple: dans SelectionDuTampon, tu teste si tu es dans un mode normal (tu fais ton switch principal), ou si tu es dans un mode de sélection de mouton (tu fais un autre switch). En gros, tu ne dois récupérer les évènements qu'à un seul endroit, sinon, tu vas vite te perdre dans ton code.
Message édité par CRicky le 03-06-2009 à 20:33:39
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Merci pour les pistes de recherche
J'ai bien compris le principe du "mode" contextuelle mais je vois mal comment la mettre en pratique.
si j'appui sur la touche 4 pour entré dans la catégorie des moutons il faut bien que j'ai un autre event pour choisir lequel je veux.
autre truc bizarre si je reste appuyer mon mouton apparait et je peux alors l'utiliser comme je veux mais dès que je relâche il part ????
J'ai fait quelques bidouillage et j'ai adapté un peu comme tu me la dis.
j'ai rajouté une variable "contextuelle" qui me permet de me placer dans le bon switch en gardant un seul
Code :
|
Ha oui et c'est un
Code :
|
qui me balance dans cette fonction.
Code :
|
mais ça ne donne pas grand chose malheureusement.
J'ai pas essayer les autres soluce pour débloqué, est ce que tu pense que sa vaut le coup.
C'est bien sauf que lorsque tu repasse dans la fonction, tu prends une nouvelle variable que tu remet à 0 à la ligne "long contextuelle= 0;". Il faut que cette variable reste quand tu sors de la fonction, donc je vois 3 possibilités:
1. Tu déclares ta variable en globale et pas en locale.
2. Tu fais passer la valeur en paramètre, et c'est l'appelant qui gère le contexte.
3. Tu déclares ta variable locale en static qui fait qu'au prochain appel, "contextuelle" gardera son ancienne valeur.
Je te suggère la première méthode, c'est pas la plus élégante, mais c'est la plus simple et ça reste clair.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Merci pour toute tes informations.
J'ai essayer avec la valeur globale et sa fonctionne super par contre pour se qui est du paramètre sa bug un peu .
Code :
|
merci pour tout tes conseils, continue comme ça
désoler pour le temps de réponse mais j'avais des partiels de médecines
a plus
Dans ton case SDLK_4, il te manque un * avant ton second "contextuelle", mais ce n'est que de l'affichage, le reste doit fonctionner.
Après ça dépend comment tu utilises ta variable à l'appel de selectionDuTampon(), parce que le problème est le même: si tu as déclaré ta variable dans une fonction, la variable n'est valable que dans cette fonction.
Autre chose: généralement on teste la validité des paramètres pour limiter le nombre de bug, donc au début de ta fonction, j'ajouterais ceci:
Code :
|
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Bonjour
J'
Bonjour
J'ai déclaré la fonction dans le main
Code :
|
puis j'appelle ma fonction
Code :
|
J'ai insérer la vérification et apparament le pointeur est bon.
Mais sa m'étonne que
Code :
|
ne marche pas vu que j'ai déjà cette méthode dans un programme et il fonctionne parfaitement.
Ah oui, j'avais pas vu ça, ++ est prioritaire sur *, donc *contextuelle++ est équivalent à *(contextuelle++) (tu décale le pointeur avant de lire le contenu.
Donc, tu dois mettre les parenthèses pour éviter les priorités:
Code :
|
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
UN GRAND MERCI
Voila tout fonctionne au poil, grâce à toi CRicky.
Juste une petite question encore
j'ai pas utiliser
Code :
|
dans mon autre programme
mais ça
Code :
|
tu pourrais me dire comment l'ordi l'interprète ( en terme de priorité )?
ainsi que ça
Code :
|
Encore merci.
Et voici le code au final si ça peut aider d'autre qui serai dans le même cas.
Code :
|
un grand merci a CRicky
Un lien sur les précédences:
http://cppreference.com/wiki/operator_precedence
Dans un même groupe la priorité est de gauche à droite dans le code C++.
Plus le groupe est petit, plus il est prioritaire.
Attention, car il y a 2 opérateurs *, 2 opérateurs ++, pour les cas pointeurs et cas calculs.
Pour simplifier, les pointeurs sont prioritaire sur tout ce qui est "calcul". Le ++ et -- pouvant être à la fois les 2, c'est là que l'on se fait piéger.
Tes 2 codes correspondent certainement à ce que tu attend *quelquechose équivalent à (*quelquechose)
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Merci
ce tableau est à mettre dans ses favoris.
La j'ai plus de question peut être une autre fois.
Je pense que l'on peut considérer le sujet comme RESOLU.
Il y a 2474 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
