Fréquence clavier !!!

eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022 - 25 févr. 2004 à 00:52
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 23 juin 2004 à 18:24
Bonjour a tous !

Je code actuellement en java un bomberMan et j'ai quelques soucis de fluidité dans mon scrolling de la carte. Certes, si je scroll pixel par pixel, ça n'avance pas car la fréquence de repetition du clavier est trop petite, et si je scroll par dizaines de pixels, ça sacade et ce n'est pas très beau !!!

Etant donné que je n'ai rien trouvé sur le net de satisfaisant, je m'adresse à vous, programmeurs en assembleur, pour vous demander de l'aide !!!

Existe il un code assembleur capable de modifier le fréquences de répétition du clavier !?

Merci d'avance !

Eddy.

-----------------------------
Membre de la blindprod :
http://www.blindprod.fr.st

12 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
26 févr. 2004 à 16:23
salut,

rien trouvé là dessus alors:
- y'a rien entre 1 et 10 ?
- une boucle qui avance de 1 pixel mais 10 fois par touche ?

@++
0
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
26 févr. 2004 à 19:54
Salut !

Un boucle qui avance de 1 pixels mais n fois par touche est une super idée, par contre, il faut que je connaisse la fréquence de répétition pour que je puisse diviser par n le tps de répétition, de plus, il faut que j'insere un wait de (frequence/n) seconde dans ma boucle ... c une bonne idée, seulement le probleme, c'est que
cela va varier selon la fréquence de répétition cofigurée sous windows ... c pas trop top, ya pas un code pour pouvoir intervenir sur la fréquence de windows ???

Merci pour ton intervention, ça me débloquera si je ne toruve pas d'autres solutions !!!

Eddy ++

-----------------------------
Membre de la blindprod :
http://www.blindprod.fr.st
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
27 févr. 2004 à 12:54
salut,

en fait, c peut etre la methode qu'il faut changer.

plutot que de réagir sur les évenements clavier, essai:

boucle infini
* interroge le statut clavier afin de définir quelles touches sont enfoncées relachées.
* le mouvement du sprite sera fait en conséquence.

ca te permettra de definir toi meme a quelle periode sera executée la boucle et donc tu pourra modifier la fréquence déplacement pixels/sec.

@++
0
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
27 févr. 2004 à 13:51
Salut !

Oui, j'ai essayé de faire ça :

Des qu'une touche est pressée, mettre la touche pressé ds Var.

Je crée un thread qui boucle indéfiniement, ds cette boucle 4 test :

Si Var = toucheHaut : {...}
Si Var = toucheBas : {...}
Si Var = toucheGauche : {...}
Si Var = toucheDroite : {...}

fin boucle

Voila, mais c qd meme tres long, je me demande si ce n'est pas l'affichage qui le rend long, il prendrait toute l'UC et attendrait qu'il soit terminer pour décaler une nouvelle fois et ainsi de suite.

-----------------------------
Membre de la blindprod :
http://www.blindprod.fr.st
0

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

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
27 févr. 2004 à 16:03
re,

test ta frequence d'affichage sans utilisation clavier voir si ca passe déjà tout seul.

si oui, as-tu essayé de mettre un sleep dans ta boucle afin que les autres threads puissent avoir + de temps ? le clavier ne demande pas une fréquence énorme.

@++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 févr. 2004 à 20:16
win32: SystemParametersInfo avec:
SPI_GETKEYBOARDDELAY
ET SPI_GETKEYBOARDSPEED

ciao...
BruNews, Admin CS, MVP Visual C++
0
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
22 juin 2004 à 10:32
Salut,

Je repassé par la, et je me suis dis que je devais qd même vous faire part de ce que j'ai trouvé !

En fait, j'utilise bien un thread pour le clavier qui test a chaque itération de sa boucle si la touche a changé d'état, si ce n'est pas le cas, il continue a faire son traitmeent (avancer, recolter ...) sinon il test la touche et regarde le traitement associé.

Seul petit probléme, on ne pe pas faire 2 chose a la fois genre poser une bombe et marcher en meme temps, il faurdait pour ça faire des mini interruptions pour des touches spéciales et retrouver l'état précédent une fois le traitement effectué ...

-----------------------------
Membre de la blindprod :
http://www.blindprod.fr.st
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 juin 2004 à 12:48
salut,

si tu test la touche de pose de bombe avant la touche de mouvement, ne pourrait-tu pas faire les 2 en meme temps ?

@++
0
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
22 juin 2004 à 16:24
Bonjour,

Ben en fait, quand tu appuies sur une touche, son code est sauvé dans une variable. Tant que sa valeur n'est pas modifier, le traitmeent a effectué ne change pas (avancer, recolter ...), des qu'elle est modifier, on change le traitement. Or si on appuie sur la touche BOMBE, il va voir que la touche est appuyée, il va poser la bombe, ensuite nous, on relache la touche, et lui arréte de poser des bombes et ne fait plsu rien car la touche de direction est toujours appuyé durant le traitment et il n'y a plus d'écouteur appelé comme qd on presse une touche ... tu vois le truc ?

-----------------------------
Membre de la blindprod :
http://www.blindprod.fr.st
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
23 juin 2004 à 12:11
salut,

pourquoi tu sauvegarde la touche ?
un code dans ce style ne serait pas possible ?
( donc pas français ??? )

.WHILE 1
invoke GetAsynKeyState,VK_UP
test eax,?
jne do_UP

...

invoke GetAsynKeyState,VK_B
test eax,?
jne do_BOMBE

invoke GetAsynKeyState,VK_Q
test eax,?
jne do_QUIT

.ENDW

@++
0
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
23 juin 2004 à 15:21
Explique le code je comprend rien a l'assembleur !

-----------------------------
Membre de la blindprod :
http://www.blindprod.fr.st
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
23 juin 2004 à 18:24
salut,

traduction C

while(true)
{
if( GetAsyncKeyState(VK_UP) & 0x8000 )
{
// traitement pour monter
}

// ...

if( GetAsyncKeyState(VK_B) & 0x8000 )
{
// traitement pour poser bombe
}
}

mais là, on sort du theme de ce forum

pour la fonction GetAsyncKeyState(), le texte d'aide pour la valeur de retour est:

if the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. The return value is zero if a window in another thread or process currently has the keyboard focus.

donc je pense que le masque a appliquer est 0x8000 mais c à toi de verifier que je raconte pas de betises.

@++
0
Rejoignez-nous