Donc, je poste la réponse du code de Dobro ici pour les histoires de performances (fluidité/stabilité du multitâche)
J'attends des commentaires éventuels. Merci beaucoup.
Code : Tout sélectionner
Structure sprite
X.l
Y.l
Vitesse.l
EndStructure
nbr_sprite=1000
Dim sprite.sprite(nbr_sprite)
; Test
EcranX = GetSystemMetrics_(#SM_CXSCREEN)
EcranY = GetSystemMetrics_(#SM_CYSCREEN)
InitSprite(): InitKeyboard()
;hwnd=OpenWindow(1,0,0,EcranX,EcranY,"test", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget )
OpenWindow(0, 0, 0, EcranX, EcranY, "", $80000000)
OpenWindowedScreen(WindowID(0), 0, 0, EcranX, EcranY, 0, 0, 0)
;OpenScreen (EcranX,EcranY,32,"Test")
; *********** prepare les parametres de chaque sprite *****************
;For t=0 To nbr_sprite
; sprite(t)\x = Random(EcranX)+1
; sprite(t)\y= Random(EcranY)+1
; sprite(t)\vitesse=Random(4)+1
; CreateSprite(t, 4 * sprite(t)\vitesse, sprite(t)\vitesse)
; ; dessine le sprite
;StartDrawing(SpriteOutput(t))
; Box(3 * sprite(t)\vitesse,0, sprite(t)\vitesse, sprite(t)\vitesse,RGB(Random(100)+100,Random(100)+100,Random(100)+100))
;StopDrawing()
;Next t
; ***************************************************************
CreateSprite(0, 2 * EcranX, EcranY)
StartDrawing(SpriteOutput(0) )
For i = 0 To 999
Box(Random(2 * EcranX - 1), Random(EcranY - 1), 4, 4, RGB(Random(255), Random(255), Random(255) ) )
Next i
StopDrawing()
Global Dim x_.F(15)
Global Dim V_.F(15)
Nb_ = 3
For I = 0 To Nb_
V_(I) = 4.0 / Pow(2, I)
Next I
Repeat
go= ElapsedMilliseconds()
;For t= 0 To nbr_sprite
; DisplaySprite(t,sprite(t)\x,sprite(t)\y)
;
; sprite(t)\x=sprite(t)\x+sprite(t)\vitesse
; If sprite(t)\x>EcranX
; sprite(t)\x=0
; EndIf
;
;Next t
For I = Nb_ To 0 Step -1
If I = Nb_
DisplaySprite(0, x_(I), 0)
DisplaySprite(0, x_(I) - 2.0 * EcranX, 0)
Else
DisplayTransparentSprite(0, x_(I), 0)
DisplayTransparentSprite(0, x_(I) - 2.0 * EcranX, 0)
EndIf
x_(I) + V_(I)
If x_(I) > EcranX
x_(I) = 0 - EcranX
EndIf
Next I
temps=ElapsedMilliseconds()-go
StartDrawing(ScreenOutput())
DrawText(10,10,"Temps: "+Str(temps))
StopDrawing()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
WindowEvent()
FlipBuffers()
;ClearScreen(0)
Clic.I + 1
Clic & 3
If Clic = 0: Delay(1): EndIf
ForEver