|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
Bonjour à tous,
je me permet de requérir à votre aide. Je viens de dessiner dans un axe Oxy mon signal provenant d'une classe extérieure. Je voudrai maintenant y ajouter des boutons afin de changer les échelles,.. Mais avant de créer un bouton je voudrai juste gérer les évènements. Je commence par le plus simple: appuyer sur 'echap' et cela ferme le programme. Pour le moment lorsque j'appuie sur 'echap' mon programme arrête de dessiner et lorsque je relâche il continue de dessiner. J'ai mis ci-dessous, les grandes lignes de mon programme. J'ai beau le retourner dans tous les sens, je n'arrive pas à gérer cet évènement, et du coup je n'arrive pas à gérer les autres. Merci par avance. Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() |
As mon avis tu px jetter ton code a la poubelle (ou du moins le recommencer en grosse partie).Tu as bien lu http://loka.developpez.com/tutoriel/sdl/ ? La gestion des events, ne doit certainement pas se faire dans tes boucles for (remplace certainement par surement). Decouple bien l'affichage et la gestion des evenement pour les mettre "au meme niveau" et ne pas imbriquer la gestion des event dans la boucle qui te sert a "dessiner". |
|
|
10
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
ok, merci du conseil.
je vais relire le tuto, et refaire mon code. |
|
|
00
|
|
|
#4 | ||||
|
Membre éclairé
![]() Développeur informatique Inscription : mai 2011 Messages : 206 ![]() |
En général, les tâches se decomposent comme suit:
Code :
Code :
|
||||
|
|
10
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
merci pour cette vue globale d'un projet !!
Et pour ma part je me tournerai plus facilement vers SDL_PollEvent, puisque je vais dessiner des données en temps réel et que le programme dessine et n'attend pas un/des évènement(s) de la part de l'utilisateur. Encore merci pour cette info ! |
|
|
00
|
|
|
#6 | |||
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
bonjour, j'ai utilisé le plan fourni par edgarjacobs. en effet cela fonctionne(lorsque j'appuie sur echap le programme se ferme). Mais je n'arrive plus a voir mon signal défiler.
Mon signal est contenu dans un tableau. une fois que la première partie du signal a atteint l'extrémité droite de la fenêtre de dessin, je redessine cette fenêtre et je fais apparaître le deuxième partie du signal,. etc.. jusqu'à la fin de mon signal. je fais donc: -initialisation -affichage de ma fenêtre de dessin et de mon signal(entier) -tant que l'utilisateur ne demande pas l'arrêt -libération mémoire -fermeture sdl je comprends bien qu'une fois que mon signal a été affiché en entier je ne pourrai plus agir sur lui. pour afficher mon signal(qui contient 64 000 points) dans une fenêtre de dessin de 640pixels je fais: Code :
Citation:
je ne sais pas si c'est assez clair, et je m'en excuse par avance. |
|||
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() Développeur informatique Inscription : mai 2011 Messages : 206 ![]() |
Je ne connais pas ton programme, mais je verrais bien une structure comme celle-ci
Code :
|
||
|
|
10
|
|
|
#8 | ||||
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
Bonjour,
J'ai simplifié mon problème. j'ai un tableau de 2000points que je remplis. je voudrai afficher les 600premiers points en continu, c'est-à-dire que tant que l'on ne fait rien le programme affiche les 600premiers points. Lorsque l'on appuie sur la touche 'a', il va par exemple afficher du point 500 au point 1100. Et si l'on ne touche a rien il va continuer a afficher les points de 500 à 1100, et va attendre une autre touche qui va afficher un autre intervalle etc... Pour cela j'ai utilisé vos méthodes AfficheSignal() et Traitement() Code :
Code :
Je suis désolé mais j'ai vraiment du mal avec ces events. |
||||
|
|
00
|
|
|
#9 |
![]() ![]() |
Et a quel endroit crash-t-il exactement ?
|
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
j'ai résolu mon problème d'execution.
donc maintenant il m'ouvre ma fenetre vierge, mais je ne vois aucun dessin apparaitre. par hasard j'ai appuyé sur ma touche 'a', au cas où, mais toujours pas de dessin. |
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() Développeur informatique Inscription : mai 2011 Messages : 206 ![]() |
C'est parce que, lorsque tu sors de ton while(SDL_PollEvent(&event)), tu redessines et affiches une fenêtre noire.
De plus, dans ta fonction AfficheSignal, je ne vois pas de SDL_UpdateRect() ou de SDL_Flip(). Donc, même si ton image est bien fabriquée en mémoire, elle n'est jamais envoyée à l'écran (sauf si la fonction ligne() le fait). |
|
|
10
|
|
|
#12 | ||
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
Bonjour, alors j'ai corrigé avec ce que vous m'avez dit. En effet je n'avais pas de mise à jour d'écran dans ma fonction AfficheSignal (ni dans ma fonction ligne() ).
Du coup mon programme affiche bien mes premiers points, mais lorsque j'appuie sur la touche 'a', il ne se passe rien. (par contre lorsque j'appuie sur 'Echap', le programme se termine bien.) Du coup je me permet de remettre mes deux fonctions corrigées. Code :
|
||
|
|
00
|
|
|
#13 | ||
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
c'est en postant mon dernier message que j'ai trouvé la solution,
j'ai par hasard tapé sur la lettre 'q' a la place de 'a' et cela a marché, je ne sais pourquoi. (certainement que SDL est codé sur un clavier QWERTY, non ?) et il y avait une erreur dans mon switch(event.type) Code :
Merci beaucoup !! |
||
|
|
00
|
|
|
#14 |
|
Membre éclairé
![]() Développeur informatique Inscription : mai 2011 Messages : 206 ![]() |
J'ai exactement le même problème, et je ne sais pas pourquoi*.
Je l'ai contourné dans un de mes programmes, en ajoutant l'instruction et en testant Mais attention: a=97, A=65, ctrl+(shift+)a=1, b=98, B=66, ctrl+(shift+)b=2 etc..., et ce genre de test Code :
if(event.key.keysym.unicode=='a' && event.key.keysym.mod&KMOD_CTRL) EDIT: *après avoir fait quelques tests, il s'agit simplement de la disposition du clavier QWERTY... |
|
|
10
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() quentin rauschÉtudiant Inscription : juin 2012 Messages : 22 ![]() |
j'ai contourné ce problème en choisissant des touches qui étaient communes a qwerty et azerty, puisque le choix des touches ne m'importe que très peu, mais merci du conseil !
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com