bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Utiliser key_up_code et key_down_code en mode direct Sam 3 Déc 2011 - 9:47 | |
| Bonjour amis panoramiciens, Au sujet de key_up_code et key_down_code, dans le prog ci-après (fourni par jimx78), on utilise le mode évènementiel avec les instructions on key_up_code et on_key_down_code. Ceci est très interressant car cela nous permet d'utiliser 2 touches à la fois pour obtenir une trajectoire différente pour le cube. - Code:
-
' Utilisez les touches fléchés full_space 0 label prog , touche_enfoncer , touche_lacher dim touche_gauche , touche_haut , touche_droit , touche_bas : ' déclaration de tes touches dim vitesse vitesse=0.03 scene3D 1 : full_space 1 : color 1,0,0,255 3d_cube 1,1 : 3d_rotate 1,0,45,0 timer 2 : timer_interval 2,1 : on_timer 2,prog on_key_down 0,touche_enfoncer : ' evenement si on enfonce une touche on_key_up 0,touche_lacher : ' evenement si on lache une touche end
prog: if key_down_code=27 : ' quitter timer_off_all terminate end_if
if touche_haut=1 : ' si touche haut alors... c'est ici !!! 3d_move 1,vitesse end_if if touche_bas=1 3d_move 1,0-vitesse end_if if touche_gauche=1 3d_y_rotate 1,o3d_y_rotate(1)+2 end_if if touche_droit=1 3d_y_rotate 1,o3d_y_rotate(1)-2 end_if return
' ci-dessous permet de verrifier si la touche a été enfoncer, ' la variable prend alors 1 comme valeur si elle est enfoncer touche_enfoncer: if key_down_code = 37 then touche_gauche=1 if key_down_code = 38 then touche_haut=1 if key_down_code = 39 then touche_droit=1 if key_down_code = 40 then touche_bas=1 return
' ci-dessous permet de verrifier si la touche a été lacher, ' la variable prend alors 0 comme valeur touche_lacher: if key_up_code = 37 then touche_gauche=0 if key_up_code = 38 then touche_haut=0 if key_up_code = 39 then touche_droit=0 if key_up_code = 40 then touche_bas=0 return Mais certains programmes comme celui du labyrinthe (que vous trouverez sur ce forum rubrique vos sources, vos utilitaires à partager) ne nécessite qu'un seul déplacement sur une seule trajectoire, et pour cela l'instruction scancode convient parfaitement. On pourrait tout aussi bien utiliser le code ci-dessus. Alors, je me suis posé la question si je ne pouvais pas utiliser les instructions key_up_code et key_down_code en mode direct comme scancode sans passer par le mode évènementiel. - Code:
-
REM Utilisez les touches fléchés full_space 0 label prog,fin dim touche dim vitesse:vitesse=0.03 scene3D 1 : full_space 1 : color 1,0,0,255:3d_cube 1,1 : 3d_rotate 1,0,45,0 timer 2 : timer_interval 2,10 : on_timer 2,prog end
prog: if key_down_code=27 then goto fin
' if key_down_code <> 0 then touche=1 ' if key_up_code = key_down_code then touche=0
' if touche=1 if key_down_code = 38 3d_move 1,vitesse end_if
if key_down_code = 40 3d_move 1,0-vitesse end_if
if key_down_code = 37 3d_y_rotate 1,o3d_y_rotate(1)+2 end_if
if key_down_code = 39 3d_y_rotate 1,o3d_y_rotate(1)-2 end_if ' end_if return
fin: timer_off_all terminate
Dès que vous appuyez sur une touche flèchée votre cube se déplace, et continue la même trajectoire si vous relachez la touche, jusqu'à ce que vous appuyez sur une autre touche flèchée pour le faire changer de direction. C'est normal puisque key_down_code contient toujours la même valeur. Maintenant, si vous activez les lignes de rem en enlevant les apostrophes, dès que vous relachez la touche, le cube s'arrête. Mais le problème est que si vous voulez rappuyer sur la même touche, le cube n'avance pas ou ne tourne pas. il vous faut appuyer sur une autre touche. Pensez-vous qu'il soit possible de trouver une solution satisfaisante à ce problème. Merci à tous de votre attention. | |
|