C'est assez proche de ce que je pensais faire, mais je voudrais une procédure assez générale, c'est à dire que je puisse réutiliser pour toutes les touches du clavier

.
Voici un exemple entier.
pour une seule touche, ça marche, mais dès qu'on utilise keyboardpressed() sur plusieurs touches, ça bugue (logique, les variables sont shared, mais si elle ne sont pas partagées, ça ne marche plus non plus :p)
le code :
Code : Tout sélectionner
;{ ************************enumeration ***********************
#window = 0
Enumeration
#player
EndEnumeration
#ScreenW = 800
#ScreenH = 600
;}
;{ ************************ variables ************************
Global vitesse = 0
Global inscreen = 1
Global mouseClic = 0
Global alarm = 0
ShowCursor_(1)
;}
;{ ************************ declare ***************************
Declare gestion_souris()
Declare keyboardPressed(idkey)
Declare mousePressed(idmousebuton)
;}
;{ ************************ inititialisation *****************
InitKeyboard ()
InitSprite()
InitMouse()
;}
;{ ************************ open window *********************
OpenWindow(#window, 0, 0,#ScreenW, #ScreenH, "Collision" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
OpenWindowedScreen( WindowID (#window),0,0, 800,600, 1, 0,0)
;}
;{ ************************ boucle principale ***************
Repeat
Event= WindowEvent ()
ExamineKeyboard ()
ExamineMouse()
gestion_souris()
; If KeyboardPressed(#PB_Key_0) =1
; vitesse +1
; EndIf
;
If KeyboardPressed(#PB_Key_Space) =1
vitesse +1
EndIf
If mousePressed(#PB_MouseButton_Left)=1
vitesse + 1
EndIf
StartDrawing(ScreenOutput())
DrawText(50,50, "vitesse : "+Str(vitesse))
DrawText(50,150, "keyone :"+ Str(keyone))
StopDrawing()
FlipBuffers ()
ClearScreen (RGB (125,125,125))
Until Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape )
;}
Procedure gestion_souris()
mx = WindowMouseX(#window):my = WindowMouseY(#window)
If inscreen = 1
If mx> #ScreenW-2 Or my> #ScreenH-2 Or mx<1 Or my<1
inscreen = 0
ReleaseMouse(1)
EndIf
ElseIf mx <#ScreenW-1 And my < #ScreenH-1 And mx > 0 And my > 0
ReleaseMouse(0)
MouseLocate(mx,my)
inscreen = 1
EndIf
EndProcedure
Procedure mousePressed(idmousebuton)
Shared mouseone, time2
If mouseone = 0
If MouseButton(idmousebuton) =1
time2 = 0
mouseone = 1
EndIf
EndIf
If time2 <= -1
mouseone = 2
EndIf
If MouseButton(idmousebuton) =1
time2 -1
EndIf
If MouseButton(idmousebuton) = 0
mouseone = 0
EndIf
ProcedureReturn mouseone
EndProcedure
Procedure keyboardPressed(idkey)
Shared keyone, time
If KeyboardPushed(idkey) And keyone = 0
time = 0
keyone = 1
EndIf
;EndIf
If time <= -1
keyone = 2
EndIf
If KeyboardPushed(idkey)
time -1
EndIf
If KeyboardPushed(idkey) = 0
keyone = 0
EndIf
ProcedureReturn keyone
EndProcedure
oki, j'ai regardé sur ton sujet et effectivement, il y avait la solution, très simple et très rapide

!
Merci à toi et à G-rom
la solution :
Code : Tout sélectionner
Global NewMap KeyFlag.b()
Procedure.b KeyboardPushedEX(Const.i)
If KeyboardPushed(Const) And KeyFlag(Str(Const)) = 0
KeyFlag(Str(Const)) = 1
ProcedureReturn #True
EndIf
If KeyboardPushed(Const)=0 And KeyFlag(Str(Const)) = 1
KeyFlag(Str(Const)) = 0
EndIf
ProcedureReturn #False
EndProcedure