Executer des opérations juste avant la fonctions pointée par glutKeyboardFunc ?

Résolu
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012 - 12 juil. 2005 à 23:25
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 - 15 juil. 2005 à 10:20
Est-il possible d'executer des opérations juste avant la fonctions pointée par glutKeyboardFunc ?


En gros ma fonction met une variable à -0.5 en fonction de la touche
appuyée et je voudrais que toutes les variables sooient inits à 0 juste
avant que le clavier soit détecté, à chaque boucle du prog. C'est
pour créer un effet d'allé venue sur la variable en question. Elle est
à -0.5 uniquement quand la touche en question est à l'état bas, sinon
elle est à 0.

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">

18 réponses

mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
15 juil. 2005 à 09:57
Je crois que g trouvé l'astuce pour les touches : Ce n'est ptet pas
pour rien qu'y a une fonction glutKeyboardUpFunc qui repère quand on
lache une touche ! C'est exactement ce qu'il me fallait !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
3
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
13 juil. 2005 à 09:01
Peut etre avec glutIdleFunc ?

glutIdleFunc
La fonction glutIdleFunc établit la fonction de rappel au repos (il n'y a pas d'autres activités).


<OL start=0>
<OL start=0>
<OL start=0>
<OL start=0>
<OL start=0>
<OL>
<LI>Usage</LI></OL></OL></OL></OL></OL>
void glutIdleFunc ( void (*func) ( void ));


func ,

Identifie la nouvelle fonction de rappel pour le repos.


<LI value=0>Description</LI></OL>
La fonction glutIdleFunc établit la fonction de rappel au repos de telle sorte que GLUT peut effectuer des tâches de traitement en arrière-plan ou effectuer une animation continue lorsque aucun événement n'est reçu. La fonction de rappel n'a aucun paramètre. Cette fonction est continuellement appelé lorsque aucun événement n'est reçu. La fenêtre courante et le menu courant ne sont pas changés avant l'appel à la fonction de rappel. Les applications utilisant plusieurs fenêtres ou menus doivent explicitement établir fenêtre courante et le menu courant, et ne pas se fier à l'état courant.


On doit éviter les calculs dans une fonction de rappel pour le repos afin de minimiser les effets sur le temps de réponse interactif.
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
13 juil. 2005 à 09:37
G deja essayé tel kel, mais ca ne marche pas. Alors, une question : les
fonctions de gestion du clavier et de la souris sont-elles paramétrées
pour fonctionner en interruptions ou en scrutation ?

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
13 juil. 2005 à 18:09
Salut j'ai pas tout saisi....

Tu veux executer une fontion avant le tout premier appel a la fonction de keyboard ? :
-> place ton code avant de faire l'appel a glutKeyboardFunc(...) dans le main.

Tu veux executer une fontion a chaque appel de la fonction de keyboard ? :
->place ton code a l'entree de la fonction keyboard(..)

Si aucun de ces cas, explique plus en detail...

KeniiyK
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
13 juil. 2005 à 18:29
Si tu veux, je veux en fait placer ma fonction dans la boucle principal
du prog, mais juste avant l'appel éventuel de la fonction keyboard, de
manière a ce que la fonction s'execute meme quand keyboard ne s'execute
pas, mais kelle s'execute chronologiquement juste avant keyboard quand
celle-ci doit s'effectuer. En gros g un tableau de valeurs. Chaque case
doit etre mise à -0.5 quand on frappe la touche en question (genre case
0 pour 'A', case 1 pour 'B' ....), mais chaque case ne doit rester à
-0.5 que le temps ou la touche est pressée !



G pensé à foutre ma reinit du tableau dans l'idle, avec une condition
sur une variable que je fout à 1 au début du keyb et à 0 à la fin, mais
je voudrais savoir si ya pas plus simple ? Pour ca il faut surtout que
la fonction keyboard soit appelée par scrutation et non ninterruption.

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
13 juil. 2005 à 22:46
Je sais pas si j'ai tou saisi (desole g du mal ce soir....) mais sinon appelles ta func dans l'idleFunc et au debut de keyboardFunc.... c pa ca ? bon.... explique chronologiquement les appels de function que tu voudrais avoir...

KeniiyK
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 11:30
OK. Voila mon problème, avec du code ca passera peut etre mieux.



Cette fonction est celle pointée par glutkeyboardfunc :



void Touches(unsigned char key, int x, int y)

{if(key==27)exit(0);

if(key>='a' && key<='z')

positions_y[key-'a']=-0.5;

if(key==' ')

positions_y[26]=-0.5;

old_key=key;

}



Comme tu le vois, a chaque fois qu'on frappe une lettre ou espace, une
variable (qui était à 0) s'affecte à -0.5 . Mois je
voudrais que cette affectation ne dure que pendant le temps ou la
touche en question est enfoncée.

CAD : tu appuie sur 'A', ca affecte poisitions_y[0] à -0.5, et
l'affectation dure, c'est à dire la variable n'as pas de nouvelle
affectation. Quand tu relache la touche donc ici 'A' (quand je dis 'A',
c 'a' en fait mais pas d'importance) la variable est réaffectée à 0.



Pour ce faire j'aurais voulue si tu veux un schéma de ce type là :



position_y[old_key-'a']=0; //Réalloue automatiquement l'ancienne touche à 0

=>appel éventuel de la fonction touche (cad si elle doit etre appelée car une touche a été frappée)
=>A pour effet de mettre la bonne variable à -0.5



Mais je ne ais pas ou placer l'instruction qui est censée venir se loger juste avant Touche()



J'espère que cette fois j'ai expliqué correctement mon problème. LOL et merci pour ta patience !
<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
14 juil. 2005 à 12:06
Ok je vois now... c'était rude !!!!, le probleme c'est que GLUT n'est pas multi-threadé donc tant que tu appuies sur une touche GLUT sera dans la keyboardFunc et pas dans une autre.... donc meme si tu arrive a resoudre tes affectations, quand tu sera dans une autre func cela voudra dire que tu as relache la touche et donc 0 dans ta variable....
Il vaudrai mieux que tu fasses position_y[key-'a']=-(position_y[key-'a']+0.5); ainsi chaque appui d'une touche change l'affectation sans rester appuyé...

KeniiyK
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 13:38
Par contre, comment se fait-il que la fonction keyboard semble avoir un
raté au départ ? Je m'explique : elle prend bien le premier appui, puis
si tu laise appuyé elle pause un peu genre 1/4 de seconde avant de
repartir et la elle enchaine sans interruption. Pkoi la pause ?

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
14 juil. 2005 à 13:46
Je croi que c'est fait expres.... ouvre un document texte et reste appuyé sur une touche tu aura le meme effet. Car au sinon le temps que tu lache la touche en pensant n'y appuyer qu'une seule fois l'ordi aurai le temps d'en enregistrer 10000....

KeniiyK
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 17:18
mais dans un jeu video genre doomlike, quand tu avancen c fluide tout le tps !

et je n'ai jamais eu ce problème quand je faisait du basic (LOL)

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
14 juil. 2005 à 17:52
Ben voui mais c'est GLUT..... c'est de base... apres si tu veux faire un truc qui envoie un minimum tu fais pas avec GLUT...., tu prends Qt par exemple.. (c tro bien)...

KeniiiyK

PS : sui sur que Doom a pas ete code avec GLUT ....
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 18:28
Je ne pense pas que GLUT existait deja du tps de DOOM 1 de toute manière!

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 18:28
Mais t'aurais pas plutot une solution avec GLUT LOL ?

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
14 juil. 2005 à 18:39
Ben euh non... qd je commence un nouveau prg avec OpenGL maintenant, j'utilise Qt...

Desole

KeniiyK
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 20:01
et Qt n'a pas ce pb ? Paske sous TurboC (LOL je sais c vieux), sous DOS
et sans OpenGL, je l'avais deja ce probleme ! donc je me demande s'il
ne vien pas a la base du langage C...

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
14 juil. 2005 à 23:00
bon, en tout cas pour le 1° pb c a dire le sujet du message, g trouvé
la solution. Le seul pb restant étant que j'utilise un compteur. Je
n'aime pas ca car le compteur dépend de la fréquence du PC. Donc, sous
GLUT n'y aurait-il pas par hasard une manière d'obtenir la fréquence,
ou alors simplement le nombre d'opérations par seconde ou par
milliseconde ? Je sais que de telles infos sont directement dispo sous
DOS, mais sos GLUT ?

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
15 juil. 2005 à 10:20
Content que ca marche, pour Qt, surement qu'il y une tempo aussi pour l'appui repeter mais bon je l'utilise surtout pour l'IHM et par ce qu'elle integre "directment" OpenGL.

KeniiyK
0
Rejoignez-nous