Flèches G et D pour avancer/reculer. Flèche H pour sauter. Esc pour sortir
Si ça peut être utile à quelqu'un...
[PS] Vous remarquerez que quand le sprite va à gauche ou à droite, il stoppe immédiatement quand on lache la touche. Par contre, si il saute en avancant, il ne s'arrete d'avancer que quand il a touché le sol
Bah oui! On n'a jamais vu ça, un mec qui saute en courant et qui s'arrete en l'air pour retomber comme une bouse.

Code : Tout sélectionner
Enumeration
#Win_Main
EndEnumeration
#Screen_Width = 1024
#Screen_Height = 768
#Step = 8 ; Vitesse de déplacement
Procedure CreateWinMain()
If OpenWindow(#Win_Main, 0, 0, #Screen_Width, #Screen_Height, "My Window - [Escape pour sortir]", #PB_Window_ScreenCentered )
Ret = #True : Else : Ret = #False
EndIf
ProcedureReturn Ret
EndProcedure
Procedure Init_Screen()
If InitSprite() = 0 Or InitMouse() = 0 Or InitKeyboard() = 0 Or InitSprite3D() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Procedure Create_Sprite(Sprite, x, y, w, h, Couleur)
If CreateSprite(Sprite, w, h, 0)
StartDrawing(SpriteOutput(Sprite))
Box(x, y, w, h, Couleur)
StopDrawing()
EndIf
EndProcedure
If CreateWinMain()
If Init_Screen() = #False : End : EndIf
EndIf
If OpenWindowedScreen(WindowID(#Win_Main), 0, 0, #Screen_Width, #Screen_Height, 0, 0, 0)
Create_Sprite(0, 0, 0, 24, 24, $FFFF00)
x_Spr = 100 : y_Spr = #Screen_Height - 24 : Jump = 15 : limit = -Jump -1
Repeat
FlipBuffers() : ClearScreen(0) : ExamineKeyboard()
; Données à l'écran
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10, 10, "X = " + Str(x_Spr), $FFFFFF)
DrawText(10, 30, "Y = " + Str(y_Spr), $FFFFFF)
DrawText(10, 50, "Jump = " + Str(Jump), $FFFFFF)
StopDrawing()
DisplaySprite(0, x_Spr, y_Spr)
;/ Déplacements et sauts
If x_Spr < 0 : x_Spr = 0 : EndIf
If x_Spr > #Screen_Width -24 : x_Spr = #Screen_Width - 24 : EndIf
; Saute en allant à droite
If flag_Jump = 1 And flag_R = 1
y_Spr - Jump : Jump -1 : x_Spr + #Step
If Jump = limit : Jump = 15 : flag_Jump = 0 : flag_R = 0 : EndIf
; Saute en allant à gauche
ElseIf flag_Jump = 1 And flag_L = 1
y_Spr - Jump : Jump -1 : x_Spr - #Step
If Jump = limit : Jump = 15 : flag_Jump = 0 : flag_L = 0 : EndIf
; Va à Droite
ElseIf flag_Jump = 0 And flag_R = 1
x_Spr + #Step
; Va à gauche
ElseIf flag_Jump = 0 And flag_L = 1
x_Spr - #Step
; Saute sur place comme un con
ElseIf flag_Jump = 1 And (flag_L = 0 And flag_R = 0)
y_Spr - Jump : Jump -1
If Jump = limit : Jump = 15 : flag_Jump = 0 : EndIf
EndIf
;/ Clavier
If KeyboardPushed(#PB_Key_Right)
flag_R = 1
EndIf
If KeyboardReleased(#PB_Key_Right) And flag_Jump = 0
flag_R = 0
EndIf
If KeyboardPushed(#PB_Key_Left)
flag_L = 1
EndIf
If KeyboardReleased(#PB_Key_Left) And flag_Jump = 0
flag_L = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
flag_Jump = 1
EndIf
;/ Gestion des évènements de la fenêtre
Delay(1) : While WindowEvent() : Wend
Until KeyboardPushed(#PB_Key_Escape)
EndIf
End