Petite modif du bout de code précédent.
J'ai viré le SpriteCollision(), le gros sprite rouge se déplace avec les touches fléchées, la balle se déplace toute seule, comme une grande.
Code : Tout sélectionner
#Window = 0
#Width = 300
#Height = 300
Enumeration
#Spr_Fix
#Spr_Mob
EndEnumeration
Global SprFix_X,SprFix_Y,SprMob_X,SprMob_Y
dep = 1
Procedure Affichage()
; Cette procedure affiche les coordonnées des sprites
PosMobX$ = LSet(Str(SprMob_X),3,"_")+" x "
PosMobY$ = LSet(Str(SprMob_Y),3,"_")
PosFixX$ = LSet(Str(SprFix_X),3," ")+" x "
PosFixY$ = LSet(Str(SprFix_Y),3," ")
StartDrawing(ScreenOutput())
DrawingMode(1) : FrontColor($C0,$C0,$C0)
Locate(10,10)
DrawText("Mobile = "+PosMobX$+PosMobY$+" ["+LSet(Str(SprMob_X+24),3,"_")+" - "+Str(SprMob_Y+24)+"]")
Locate(10,30)
DrawText("Fixe = "+PosFixX$+PosFixY$+" ["+Str(SprFix_X+12)+" - "+Str(SprFix_Y+12)+"]")
StopDrawing()
EndProcedure
Procedure Sprites()
; Procedure de création des sprites
If CreateSprite(#Spr_Fix,128,24,0) ; Sprite Fixe
StartDrawing(SpriteOutput(#Spr_Fix))
Box(0,0,128,24,RGB($FF,$0,$0))
StopDrawing()
EndIf
If CreateSprite(#Spr_Mob,24,24,0) ; Sprite Mobile
StartDrawing(SpriteOutput(#Spr_Mob))
Box(0,0,24,24,RGB($0,$0,$FF))
StopDrawing()
EndIf
EndProcedure
Procedure Between(Value.l,Mini.l,Maxi.l)
; Cette procédure vérifie que la valeur "Value" se situe entre
; "Mini" et "Maxi"
If Value >= Mini And Value <= Maxi
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
;- Initialisation de DirectX
If InitSprite() = 0 Or InitKeyboard() = 0
End
EndIf
;- Ouverture de la fenêtre et de l'écran
hwnd = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "")
OpenWindowedScreen(hwnd, 0, 0, #Width, #Height, 0, 0, 0)
Sprites()
;- Initialisation des sprites
SprFix_X = 86 : SprFix_Y = 138
SprMob_X = 0 : SprMob_Y = 0
SensX = 1 : SensY = 1
;- Boucle des évènements
Repeat
ClearScreen(0, 0, 0) : ExamineKeyboard()
; Affichage des sprites
DisplayTransparentSprite(#Spr_Fix, SprFix_X, SprFix_Y)
DisplayTransparentSprite(#Spr_Mob, SprMob_X, SprMob_Y)
; Dessin des lignes du sprite mobile
StartDrawing(ScreenOutput())
Line(SprMob_X,0,0,300,RGB($C0,$C0,$C0))
Line(SprMob_X+24,0,0,300,RGB($C0,$C0,$C0))
Line(0,SprMob_Y,300,0,RGB($C0,$C0,$C0))
Line(0,SprMob_Y+24,300,0,RGB($C0,$C0,$C0))
StopDrawing()
Affichage()
FlipBuffers()
SprMob_X + SensX : SprMob_Y + SensY
; Collision à gauche
If SprMob_X + SpriteWidth(#Spr_Mob) = SprFix_X
If Between(SprMob_Y,SprFix_Y - SpriteWidth(#Spr_Mob), SprFix_Y + SpriteWidth(#Spr_Mob))
SetWindowTitle(#Window,"Collision à gauche")
SensX = -SensX
EndIf
; Collision à droite
ElseIf SprMob_X = SprFix_X + 128
If Between(SprMob_Y,SprFix_Y - SpriteWidth(#Spr_Mob),SprFix_Y + SpriteWidth(#Spr_Mob))
SetWindowTitle(#Window,"Collision à droite")
SensX = -SensX
EndIf
; Collision en haut
ElseIf SprMob_Y + SpriteHeight(#Spr_Mob) = SprFix_Y
If Between(SprMob_X,SprFix_X - SpriteWidth(#Spr_Mob) ,SprFix_X + SpriteWidth(#Spr_Fix))
SetWindowTitle(#Window,"Collision en haut")
SensY = -SensY
EndIf
; Collision en bas
ElseIf SprMob_Y = SprFix_Y + SpriteHeight(#Spr_Mob)
If Between(SprMob_X,SprFix_X - SpriteWidth(#Spr_Mob),SprFix_X +SpriteWidth(#Spr_Fix))
SetWindowTitle(#Window,"Collision en bas")
SensY = -SensY
EndIf
EndIf
Delay(2)
If KeyboardPushed(#PB_Key_Escape) : quit = 1 : EndIf
If KeyboardPushed(#PB_Key_Left) : SprFix_X - dep : EndIf
If KeyboardPushed(#PB_Key_Right) : SprFix_X + dep : EndIf
If KeyboardPushed(#PB_Key_Up) : SprFix_Y - dep : EndIf
If KeyboardPushed(#PB_Key_Down) : SprFix_Y + dep : EndIf
If SprMob_X <=0 : SensX= -SensX : EndIf
If SprMob_Y <=0 : SensY= -SensY : EndIf
If SprMob_X >=276 : SensX= -SensX : EndIf
If SprMob_Y >=276 : SensY= -SensY : EndIf
While WindowEvent() : Wend
Until quit = 1