Code : Tout sélectionner
...
UseBuffer(SpriteOutput)
DisplaySprite(...)
RotateSprite(...)
UseBuffer(-1) ;Retour au screen
...
Alors comment dessiner un sprite dans un autre sprite ?
Nous allons utiliser la fonction GrabSprite() qui permet de capturer une zone de l'écran et crée un nouveau Sprite avec son contenu.
https://www.purebasic.com/french/docume ... prite.html
Dans l'exemple qui suit nous allons :
- Afficher un fond pour notre sprite,
- Ajouter une caisse en rotation,
- Créer un sprite résultat,
- Effectuer une rotation de ce resultat.
Code : Tout sélectionner
EnableExplicit
Enumeration Window
#mf
EndEnumeration
Global Event, LogoPB, Background, Box, Result
Global Assets.s = #PB_Compiler_Home + "Examples\3D\Data\"
InitSprite()
InitKeyboard()
OpenWindow(#mf, 0, 0, 1024, 768, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#mf), 0, 0, 1024, 768)
UseJPEGImageDecoder()
UsePNGImageDecoder()
; Chargement des sprites
LogoPB = LoadSprite(#PB_Any, Assets + "PureBasic.bmp")
Background = LoadSprite(#PB_Any, Assets + "Textures\MRAMOR6X6.jpg")
Box = LoadSprite(#PB_Any, Assets + "Textures\Caisse.png")
Repeat ;Evenement du jeu
Repeat;Evenement window
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event=0
; Dessin de la caisse dans le backgroung
; Rotation de la caisse
DisplaySprite(Background, 0, 0) ;Image de fond
DisplaySprite(Box, 416, 316) ;Ajout de la caisse
RotateSprite(Box, 0.5, #PB_Relative)
GrabSprite(Result, 0, 0, SpriteHeight(Background), SpriteWidth(Background)) ;Résultat
; Rendu du jeu
ClearScreen(RGB(87, 109, 131))
DisplaySprite(Result, 212, 84)
RotateSprite(Result, 1, #PB_Relative)
DisplaySprite(LogoPB, 10, 10)
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(20, ScreenHeight() - 40, "Esc : End of game", RGB(255, 255, 255))
StopDrawing()
EndIf
ExamineKeyboard()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)