|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Sophie COLLINÉtudiant Inscription : juin 2012 Messages : 1 ![]() |
Salut
J'ai à peu près suivi ce que vous avez indiqué dans cette discussion, mais j'ai toujours un problème au niveau du déplacement avec les flèches de mon clavier. Je suis entrain de faire un Space Invaders, et je dois faire bouger un petit vaisseau avec les flèches. Quand j'appuie sur la flèche de gauche, il va bien à gauche, et quand j'appuie sur celle de droite il va bien à droite mais le problème c'est qu'il "fuse"… Lorsque j'appuie sur la flèche de gauche par exemple, il se déplace jusqu'à l'extrémité gauche de mon cadre de jeu au lieu de se déplacer que de quelques pixels… J'ai l'impression que le registre garde en mémoire la touche que j'ai appuyé… Je sais pas trop si vous me suivez… Voici un bout de mon code : Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 330 ![]() |
Bonjour,
plusieurs petites choses: - le port 60h ne devrait pas être lu directement car il déclenche une interruption (INT9) et donc on ne peu pas être sur du code renvoyé... mais dans la pratique ça marche quand-même - à la fin de tes routines droite et gauche, tu devrais remettre al=0 pour effacer la direction - il faudrait mettre une temporisation car même en étant très rapide, ton vaisseau va faire tout le trajet d'un coup a+ |
|
|
10
|
|
|
#3 |
|
Membre chevronné
![]() être humain Inscription : décembre 2007 Messages : 471 ![]() |
la lecture du port 60h ne declenche pas d'interruption. son contenu est mis à jour à chaque evenement materiel du clavier, l'interruption est declenchée pour signifier un changement à traiter dans l'immediat. la lecture donnera donc le dernier etat du clavier.
pour ce qui est du deplacement du curseur, la temporisation est une solution, mais la meilleure est d'utiliser un peu de maths, du genre dx=Speed*dt (delta x=speed* delta t), et ajouter ce delta X à la position du curseur. ça permetra d'avoir la meme vitesse apparente quel que soit la vitesse de la machine. un clavier emet une interruption à l'appui d'une touche, mais aussi au relachement. ce qui permet de tenir un bitmap du clavier, ce qui permet de ne plus utiliser le port 60h, mais juste lire dans le bitmap, pour connaitre l'etat de n'importe quelle touche en temps reel. et aussi prendre en compte les appuis de plusieurs touches en meme temps. |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 330 ![]() |
Oui, je m'a mal exprimé pour l'int
![]() En fait, comme tu dis, il faut refaire le code de l'int 9 pour placer tous ces petits codes dans un beau tableau. (au relâchement de la touche le code = code de touche + 128) Ca permet de gérer plusieurs touches en même temps de manière simple. Pour la vitesse de défilement, j'ai souvent utilisé la synchro de l'écran, mais je ne pense pas que ça fonctionne avec un émulateur si ? (ça fait trop longtemps que je n'ai pas programmé, faut que je m'y remette a+ François |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com