eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 mai 2022
-
25 févr. 2004 à 00:52
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 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 !?
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 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 !!!
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 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.
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 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.
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 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.
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 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é ...
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 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 ?
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.