Je m'ennuyais alors j'ai ré-écrit le SpriteDemo de Danilo à ma façon pour PB V4.0.
Les noms des macros et les commentaires sont en anglais, mais le code est plutôt facile à suivre.
Voiçi le code, amusez-vous bien !
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Exemple : Sprite Demo
; Author : Danilo
; Date : 18-04-2003
; Updated by : Guimauve
; Last Update : 29-07-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration >>>>>
Structure Sprite
id.l
PositionX.w
PositionY.w
MoveX.w
MoveY.w
EndStructure
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>
Macro SetSpriteID(ObjectA, P_ID)
ObjectA\id = P_ID
EndMacro
Macro SetSpritePositionX(ObjectA, P_PositionX)
ObjectA\PositionX = P_PositionX
EndMacro
Macro SetSpritePositionY(ObjectA, P_PositionY)
ObjectA\PositionY = P_PositionY
EndMacro
Macro SetSpriteMoveX(ObjectA, P_MoveX)
ObjectA\MoveX = P_MoveX
EndMacro
Macro SetSpriteMoveY(ObjectA, P_MoveY)
ObjectA\MoveY = P_MoveY
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>
Macro GetSpriteID(ObjectA)
ObjectA\id
EndMacro
Macro GetSpritePositionX(ObjectA)
ObjectA\PositionX
EndMacro
Macro GetSpritePositionY(ObjectA)
ObjectA\PositionY
EndMacro
Macro GetSpriteMoveX(ObjectA)
ObjectA\MoveX
EndMacro
Macro GetSpriteMoveY(ObjectA)
ObjectA\MoveY
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 15 ms <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Customs Macro - Uncomment if needed >>>>>
; Macro RandomMinMax(min, max)
;
; (max - Random(max - min))
;
; EndMacro
; Macro RGBColor(Red, Green, Blue)
;
; (((Blue << 8 + Green) << 8) + Red)
;
; EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Constants and variables >>>>>
Screen_W = GetSystemMetrics_(#SM_CXSCREEN)
Screen_H = GetSystemMetrics_(#SM_CYSCREEN)
#Quantity = 500
#SpriteSize = 8
Dim SpriteList.Sprite(#Quantity)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Initialize DirectX >>>>>
If InitKeyboard() = 0 Or InitSprite() = 0
MessageRequester("ERROR","Cant initialize DirectX!",#MB_ICONERROR)
End
EndIf
; <<<<<<<<<<<<<<<<<<<<<<
; <<<<< OpenScreen >>>>>
If OpenScreen(Screen_W, Screen_H, 32, "Sprite Demo") = 0
If OpenScreen(Screen_W, Screen_H, 24, "Sprite Demo") = 0
If OpenScreen(Screen_W, Screen_H, 16, "Sprite Demo") = 0
MessageRequester("ERROR", "Cant open DirectX screen!", #MB_ICONERROR)
End
EndIf
EndIf
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Create 21 differents Sprites >>>>>
For SpriteID = 0 To 20
If CreateSprite(SpriteID, #SpriteSize, #SpriteSize)
StartDrawing(SpriteOutput(SpriteID))
Circle(#SpriteSize >> 1, #SpriteSize >> 1, #SpriteSize >> 1, RGBColor(RandomMinMax($50, $FF), RandomMinMax($50, $FF), RandomMinMax($50, $FF)))
StopDrawing()
Else
CloseScreen()
MessageRequester("ERROR","Cant create Sprite!",#MB_ICONERROR)
End
EndIf
Next
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Animation Setup >>>>>
For Index = 0 To #Quantity
SetSpriteID(SpriteList(Index), Random(20))
SetSpritePositionX(SpriteList(Index), Random(Screen_W >> 1))
SetSpritePositionY(SpriteList(Index), Random(Screen_H >> 1))
SetSpriteMoveX(SpriteList(Index), RandomMinMax(2, 6))
SetSpriteMoveY(SpriteList(Index), RandomMinMax(2, 6))
Next
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Run Sprite Demo >>>>>
Repeat
FlipBuffers()
ExamineKeyboard()
If IsScreenActive()
ClearScreen(0)
For Index = 0 To #Quantity
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; If the sprites are about to fly outside of the screen area
; we reverse the Move direction.
If GetSpritePositionX(SpriteList(Index)) > (Screen_W - #SpriteSize) Or GetSpritePositionX(SpriteList(Index)) < 0
SetSpriteMoveX(SpriteList(Index), -GetSpriteMoveX(SpriteList(Index)))
EndIf
If GetSpritePositionY(SpriteList(Index)) > (Screen_H - #SpriteSize) Or GetSpritePositionY(SpriteList(Index)) < 0
SetSpriteMoveY(SpriteList(Index), -GetSpriteMoveY(SpriteList(Index)))
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; We compute a new positions and we display sprites to
; their new positions.
SetSpritePositionX(SpriteList(Index), GetSpritePositionX(SpriteList(Index)) + GetSpriteMoveX(SpriteList(Index)))
SetSpritePositionY(SpriteList(Index), GetSpritePositionY(SpriteList(Index)) + GetSpriteMoveY(SpriteList(Index)))
DisplayTransparentSprite(GetSpriteID(SpriteList(Index)), GetSpritePositionX(SpriteList(Index)), GetSpritePositionY(SpriteList(Index)))
Next
; If GetTickCount_() => zeit + 1000
; FrameSek = Frames
; Frames = 0
; zeit = GetTickCount_()
; Else
; Frames + 1
; EndIf
; If StartDrawing(ScreenOutput())
; DrawingMode(1)
; DrawText(20,20,"Frames/Sekunde: "+Str(FrameSek), RGBColor($FF,$FF,$00))
; StopDrawing()
; EndIf
Else
Delay(10)
EndIf
Until KeyboardPushed(#PB_Key_Escape)
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<