drfloyd a écrit :disons que moi c'est surtout pour les graphismes de fond, pas pour les sprites.

et alors ?
qu'est ce qui t'empeche de dessiner avec un sprite sur une image qui servira de fond ?
ps : tu sais , je ne pratique pas Purebasic depuis hier , si je te donne cette voie c'est pas tout a fait par hasard ....
dans le code ci dessous , que ce passe t'il si tu commente la ligne 115
"ClearScreen(RGB(0,0,0))" ????
; Dobro
; codé avec mon NC10 ;O)
Structure sprite
x.l
y.l
Pas_x.l
Pas_y.l
im.l ; image sprite
EndStructure
nbr_sprite=100
Dim sprite.sprite(nbr_sprite)
If initsprite () = 0 Or initkeyboard () = 0
messagerequester ( "Erreur" , "Le système de Sprite ne peut pas être initialisé" , 0)
End
EndIf
;Global largeur_ecran=GetSystemMetrics_(#SM_CXSCREEN); si purebasic demo mettre ici la taille X de votre resolution
;Global hauteur_ecran=GetSystemMetrics_(#SM_CYSCREEN); si purebasic demo mettre ici la taille Y de votre resolution
examinedesktops ()
Global largeur_ecran= desktopwidth (0)
Global hauteur_ecran= desktopheight (0)
For i=0 To nbr_sprite-1
sprite(i)\Pas_x=2 ; cette variable indiquera le sens de deplacement x
sprite(i)\ Pas_y= 3 ; cette variable indiquera le sens de deplacement y
sprite(i)\x= random (largeur_ecran-32)+10
sprite(i)\y= random (hauteur_ecran-32)+10
sprite(i)\im= random (1)
Next i
If openscreen (largeur_ecran, hauteur_ecran, 32, "Visualisation" )
; *********** creation et dessin d'un sprite *******************
createsprite (0,32,32)
startdrawing ( spriteoutput (0))
circle (16,16,16, rgb (255,255,15)) ; la tete
circle ( 10,10,5, rgb (0,250,255)) ; oeil gauche
circle ( 10,10,2, rgb (0,0,0)) ; pupille gauche
circle ( 22,10,5, rgb (0,250,255)) ;oeil droit
circle ( 22,10,2, rgb (0,0,0)) ; pupille droite
box (10,22,10,5, rgb (0,0,0)) ;bouche
box (7,20,4,4, rgb (0,0,0)) ;coin bouche gauche
box (20,20,4,4, rgb (0,0,0)) ;coin bouche droit
stopdrawing ()
; ********************************************************
; *********** creation et dessin d'un sprite *******************
createsprite (1,32,32)
startdrawing ( spriteoutput (1))
circle (16,16,16, rgb (255,0,15)) ; la tete
circle ( 10,10,5, rgb (0,250,255)) ; oeil gauche
circle ( 10,10,2, rgb (0,0,0)) ; pupille gauche
circle ( 22,10,5, rgb (0,250,255)) ;oeil droit
circle ( 22,10,2, rgb (0,0,0)) ; pupille droite
box (10,22,10,5, rgb (0,0,0)) ;bouche
box (7,20,4,4, rgb (0,0,0)) ;coin bouche gauche
box (20,20,4,4, rgb (0,0,0)) ;coin bouche droit
stopdrawing ()
; ********************************************************
Repeat
; On dessine nos Sprites
For i=0 To nbr_sprite-1
; *** fait avancer notre sprite ***
sprite(i)\x=sprite(i)\x+sprite(i)\Pas_x
sprite(i)\y=sprite(i)\y+sprite(i)\Pas_y
; ****************************
; *** les tests pour surveiller les sorties d'ecran ***
If sprite(i)\x>(largeur_ecran -(32)) ; le sprite va sortir par la droite de l'ecran (on retire 32 car c'est la largeur du sprite)
sprite(i)\Pas_x=- (sprite(i)\Pas_x+des) ; on inverse le sens du deplacement X en mettant une valeur inverse
EndIf
If sprite(i)\x<(1) ; le sprite va sortir par la gauche de l'ecran
sprite(i)\Pas_x=- (sprite(i)\Pas_x+des) ; on inverse le sens du deplacement X en mettant une valeur inverse
EndIf
; ** pour les Y
If sprite(i)\y>(hauteur_ecran-(32) ) ; le sprite va sortir par le Bas de l'ecran (on retire 32 car c'est la hauteur du sprite)
sprite(i)\Pas_y=-(sprite(i)\Pas_y+des) ; on inverse le sens du deplacement Y en mettant une valeur inverse
EndIf
If sprite(i)\y<(1) ; me sprite va sortir par le Haut de l'ecran
sprite(i)\Pas_y=-(sprite(i)\Pas_y+des) ; on inverse le sens du deplacement Y en mettant une valeur inverse
EndIf
displaytransparentsprite (sprite(i)\im, sprite(i)\x, sprite(i)\y)
Next i
; *********************************************
startdrawing ( screenoutput ())
drawtext (10, 580, "Touche Esc pour quitter." , rgb (242, 249, 85), rgb (0, 0, 0))
stopdrawing ()
flipbuffers ()
clearscreen ( rgb (0,0,0))
examinekeyboard ()
Until keyboardpushed ( #PB_Key_Escape )
Else
messagerequester ( "Erreur" , "Impossible d'ouvrir un écran en 800 * 600 - 32 bits!" , 0)
EndIf
End
de plus regarde bien la fonction
" StartDrawing(
ScreenOutput())"
elle te permet d'ecrire ton dessin sur ce que tu veux !!
et ici j'utilise un BOX au lieu d'un sprite pour dessiner :
note que j'aurai pu utiliser un Sprite dans lequel j'ai dessiné un box ...
(c'est d'ailleurs ce que j'ai fais pour simuler un curseur)
initmouse ()
initkeyboard ()
initjoystick ()
Enumeration
#fenetre
#Police
#curseur
#image
EndEnumeration
Structure raster
x.l
y.l
sensx.l
sensy.l
EndStructure
Dim raster.raster(100)
; ***********************************
Resultat = initsprite ()
fontid = loadfont ( #Police , "arial" , 18, #PB_Font_Bold )
;EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
;EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
examinedesktops ()
EcranX= desktopwidth (0)
EcranY= desktopheight (0)
windowid = openwindow ( #fenetre , 0, 0,1024,768, "hello" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
Result = openwindowedscreen ( windowid ( #fenetre ) ,0,0, 1027, 768, 1, 0,0)
createsprite ( #curseur ,8,8 )
startdrawing ( spriteoutput ( #curseur ))
box (0,0,8,8, rgb (255,255,255))
stopdrawing ()
createimage ( #image ,1024,768,32)
Repeat
examinemouse ()
windowevent ()
delay (2)
xm= mousex ()
ym= mousey ()
If mousebutton (2)
End
EndIf
If mousebutton (1)
; dessin
startdrawing ( imageoutput ( #image ))
box (xm,ym,8,8, rgb (255,255,255))
stopdrawing ()
EndIf
startdrawing ( screenoutput ())
drawimage ( imageid ( #image ), 0, 0)
stopdrawing ()
displaysprite ( #curseur ,xm,ym)
flipbuffers (): ; affiche l'ecran
clearscreen ( rgb (0, 0, 0)) : ;efface l'ecran
Until Event= #PB_Event_CloseWindow
ps : ne t'occupe pas du tableau Raster , ces codes sont des codes Caméleon , ils me servent
pour faire plusieurs type d'exemples, alors forcement il reste des trucs qui trainent mais qui ne servent pas forcement dans le cas qui nous préoccupe
