Gros pixels :)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Gros pixels :)

Message par drfloyd »

Hello !

Pour mon premier jeu en basic je voudrais faire du pixel art à gros pixels :mrgreen: totu en restant en 800x600 fullscreen :mrgreen:

Est ce possible de tracer une ligne à gros pixels avec drawline ??? Je veux faire le slignes en biais avec effet escalier :lol:
Est ce possible d'afficher d'enormes caracteres a effet escalier avec drawtext ???

:mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Gros pixels :)

Message par Backup »

oui ! il suffit d'utiliser les sprites !!

va faire un tour dans nos tutos avant de commencer, je t'assure ,
que c'est la meilleure methode !! ;)
voir ici :
http://www.purebasic.fr/french/viewtopi ... =21&t=6664

notamment le tuto sur les sprites , devrai t'apporter pas mal d'infos :)
http://www.purebasic.fr/french/viewtopic.php?t=6648
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Gros pixels :)

Message par drfloyd »

disons que moi c'est surtout pour les graphismes de fond, pas pour les sprites. :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Gros pixels :)

Message par Backup »

drfloyd a écrit :disons que moi c'est surtout pour les graphismes de fond, pas pour les sprites. :wink:
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 .... :roll:

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 ;)
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Gros pixels :)

Message par drfloyd »

j'ai encore beaucoup de mal avec le systeme graphique de pure baisc, dessiner dans, etc...
Je sort d'un langage beaucoup plus simple (j'ai pas dit meilleur attention ;) )

Je vais etudier tout ça. Merci
Répondre