En mode fenêtré, je voudrais faire des animations d'objets en fils de fer, qui seraient dessinés avec la bibliothèque 2DDrawing. Toutefois il semble que les objets dessinés ainsi sont directement affichés sur le frontbuffer, ce qui produit un affreux clignotement... Quelqu'un aurait-il une solution pour que j'obtienne un affichage digne de ce nom ? Merci d'avance...
Code : Tout sélectionner
; programme d'animation d'un sprite et d'objets faits avec la bibliothèque 2DDrawing
; PureBasic version 4.02
; initialisation de la fenêtre
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 or later", 0)
End
EndIf
If OpenWindow(0,0,0,640,480,"Test dessin en fil de fer",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
If OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
SetFrameRate(50)
; création du sprite
CreateSprite(0,40,40)
If StartDrawing(SpriteOutput(0))
Box(0,0,40,40, RGB(0,255,0))
StopDrawing()
EndIf
; initialisation des variables
playerX = 1
playerY = 1
; >>> début de la boucle principale
Repeat
; du fait du mode fenêtré, on est dans une boucle événementielle Windows
Event.l = WindowEvent()
If Event = #PB_Event_Gadget
; gestion de l'événement Windows concernant les gadgets genre bouton - mais il n'y en a pas ici
; s'il y avait d'autres événements Windows à gérer, on les mettrait ici
Else
FlipBuffers()
; gestion des déplacements du sprite et des objets en fil de fer
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) And playerY > 0 : playerY -2 : EndIf
If KeyboardPushed(#PB_Key_Down) And playerY < 600 : playerY +2 : EndIf
If KeyboardPushed(#PB_Key_Left) And playerX > 0 : playerX -2 : EndIf
If KeyboardPushed(#PB_Key_Right) And playerX < 440 : playerX +2 : EndIf
ClearScreen(0)
; affichage des objets en fil de fer
If StartDrawing(WindowOutput(0))
Box(playerX+150,playerY+50,40,40, RGB(0,255,0)) ; affichage boîte verte version 2DDrawing
FrontColor(RGB(255,0,0))
For k=0 To 20
LineXY(playerX+10,playerY+10+k*8,200, 0) ; affichage 20 lignes rouges
Next
StopDrawing()
EndIf
; affichage boîte verte version sprite
DisplaySprite(0,playerX+250,playerY+50)
EndIf
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
; >>> fin de la boucle principale
FreeSprite(0)
End