Page 1 sur 1
Touches simultanées ?
Publié : mer. 04/nov./2009 13:43
par foossile
Bonjour à tous,
dans mon programme, je ne veux pas qu'on puisse appuyer deux touches de direction en même temps.
Voilà donc ma procédure :
Code : Tout sélectionner
Procedure ControlInput()
ToucheApp=0
If KeyboardPushed ( #PB_Key_Left ) And ToucheApp=0
ToucheApp=1
ScrollX-20
ScrollY-10
EndIf
If KeyboardPushed ( #PB_Key_Right ) And ToucheApp=0
ToucheApp=1
ScrollX+20
scrollY+10
EndIf
If KeyboardPushed ( #PB_Key_Down ) And ToucheApp=0
ToucheApp=1
ScrollX-20
ScrollY+10
EndIf
If KeyboardPushed ( #PB_Key_Up ) And ToucheApp=0
ToucheApp=1
ScrollX+20
ScrollY-10
EndIf
If KeyboardReleased(#PB_Key_All)
ToucheApp=0
EndIf
EndProcedure
Ca fonctionne, mais y'a-t-il une méthode plus simple ?
Re: Touches simultanées ?
Publié : mer. 04/nov./2009 17:02
par Le psychopathe
Comme ça ?
c'est juste une piste, ce code n'est pas complet
Code : Tout sélectionner
repeat
up = 0
down = 0
left = 0
right = 0
If KeyboardPushed(#PB_Key_Up) : up=1 : EndIf
If KeyboardPushed(#PB_Key_Down) :down=1 : EndIf
If KeyboardPushed(#PB_Key_Left) : left=1 : EndIf
If KeyboardPushed(#PB_Key_Right) : right=1 : EndIf
if up = 1
move up + 1
if left =1
move gauche +1
endif
if right = 1
move droite +1
endif
.....
until ce que tu veux ^^
Re: Touches simultanées ?
Publié : mer. 04/nov./2009 19:10
par Cool Dji
Hello Foosile,
Ta méthode marche mais elle priorise une touche quand plusieurs sont appuyées en même temps.
Typiquement, ce sera toujours la left qui passera en premier...
Je te propose de faire un test global qui ne fait rien bouger dès lors que plusieurs touches sont appuyées
Ensuite, la routine du psy marchera bien.
ex :
nombredetouches=0
if testleftpress : nombredetouches+1 : pressleft=1 : endif
if testrightpress : nombredetouches+1 : pressright=1 : endif
if testuppress : nombredetouches+1 : pressup=1 : endif
if testdownpress : nombredetouches+1 : pressdown=1 : endif
if nombredetouches=1 ; si c'est 1 c'est qu'il y a qu'une et une seule touche d'appuyée
C'est là que tu mets les tests de direction
endif
Je ne sais pas si c'est plus simple que ta routine mais ça évite de différencier les touches les unes par rapport aux autres selon leur rang dans le test...
Re: Touches simultanées ?
Publié : mer. 04/nov./2009 19:36
par comtois
ou comme ça
Code : Tout sélectionner
Procedure ControlInput()
If KeyboardPushed ( #PB_Key_Left )
ScrollX-20
ScrollY-10
ElseIf KeyboardPushed ( #PB_Key_Right )
ScrollX+20
scrollY+10
ElseIf KeyboardPushed ( #PB_Key_Down )
ScrollX-20
ScrollY+10
ElseIf KeyboardPushed ( #PB_Key_Up )
ScrollX+20
ScrollY-10
EndIf
EndProcedure
Re: Touches simultanées ?
Publié : mer. 04/nov./2009 21:35
par djes
Tu peux aussi mettre un flag pour attendre que la touche soit relachée avec keyboardreleased()
Re: Touches simultanées ?
Publié : jeu. 05/nov./2009 9:13
par foossile
Merci pour toutes ces réponses

Re: Touches simultanées ?
Publié : jeu. 05/nov./2009 10:15
par Cool Dji
Le code de Comtois est le plus efficace
Mais je te propose une petite variante de ma prop qui peut être utile par la suite pour justement gérer plusieurs touches enfoncées en meme tempsex :
nombredetouches=0
if testleftpress : nombredetouches+1 : pressleft=1 : endif
if testrightpress : nombredetouches+2 : pressright=1 : endif
if testuppress : nombredetouches+4 : pressup=1 : endif
if testdownpress : nombredetouches+8 : pressdown=1 : endif
Dans ce cas :
nombredetouches=1 : left est pressée
nombredetouches=2 : right est pressée
nombredetouches=3 = 1 + 2 : left et right sont pressées
nombredetouches=4 : up est pressée
nombredetouches=5 = 1+5 : up et left sont est pressées
...
nombredetouches=15 = 1+2+4+8 : toutes les touches sont pressées
là tu dois pouvoir gérer le dispatch des routines avec un case...