Procedures utiles

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Ouaf-Ouaf
Messages : 212
Inscription : dim. 11/juil./2004 9:07

Procedures utiles

Message par Ouaf-Ouaf »

Lut,

Je sais pas vous, mais moi j'aime faire mes propres outils. Pendant longtemps, j'utilisais les gosubs, mais syntaxiquement parlant, c'est pas super beau, et surtout, à force, ça deviens flou a gerer.

Au delà de cet aspect, tout construire, c'est long, et on a pas forcement envie de passer sur tout soit même.
Une fois que l'on a ses outils, la programmation deviens une affaire de créativité. De l'Art Appliqué. C'est en tout cas ma façon de le concevoir.
Une table de tapisserie revolutionnaire.

Donc içi, je compte mettre à disposition des procedures de mon cru, des outils, commentés et souples si possible.

Je commence par un truc vraiment con, mais utile pour avoir des interfaces rapides malgré la lenteur des drawtext( ) :



Dessiner_Liste( )

  • Le truc à capter là, pour le debutant, c'est qu'il faut eviter de generer des calculs complexes avant chaque flipbuffers(). Et les Drawtexts sont particulièrement gourmands.

    Ca peut valoir aussi pour les tiles de l'ecran : Inutile de tout recalculer et de faire des calculs à chaque tours de la boucle : Il est largement preferable de tout imprimer sur un sprite dès lors qu'il y a un changement.

    Je repasserais dessus quand j'aurais besoin de listes opaques (Sprite3D)
    Pour l'instant je l'utilise tel quel.

    Là j'ajoute une option pour tirer le texte d'un Array Global à la place du Data.

Code : Tout sélectionner

;Dessiner_Liste permet de generer des listes sur un sprite déjà existant, ou d'en creer un nouveau. 
;Il necessite qu'on lui ai attribué un label de Data avant l'appel.
;Une option 3D peut être interessante. 

Procedure Dessiner_Liste( Mode, Police.b , Sprite.l , XY.b , Width.w , Height.w , Occurences.b , Front.l , Fond.l, X=0, Y=0  )

  ; 0 = Redessiner tout le sprite, 1 = Dessiner sur un sprite, 2 et 3 pourraient utiliser/creer une texture 3D..
    If Mode = 0 : CreateSprite( Sprite, Width, Height ) : EndIf : UseBuffer( Sprite ) 
    
  ; Si Supp à -1, determine la coul de fond du sprite. Fond doit être exprimé en Hexa.  
    If Fond > -1 : ClearScreen( Fond ) : EndIf : UseBuffer( #PB_Default ) 

    ; Taille de chaque occurence, pour calibrer le texte.
    Partie_W = Width  / Occurences  ; Manque une option centrer, aligner g/d
    Partie_H = Height / Occurences                            

          If  StartDrawing( SpriteOutput(Sprite) ) : DrawingFont(FontID(Police)) : FrontColor( $ffffff ) : DrawingMode(1); On commence à dessiner sur la surface choisie.
            
                For A = 1 To Occurences    
                
                   ; Içi j'ai utilisé une methode Data, on "Restore" avant utilisation.  
                    Read Texte$ 
                    ;Centrage du texte quand la liste est horizontale
                    If XY = 0 : Var_X = (A-1)*Partie_W + ( Partie_W-TextWidth(Texte$) ) / 2 : Else : Var_X = 0 : EndIf
                    If XY = 1 : Var_Y = (A-1)*Partie_H                                      : Else : Var_Y = 0 : EndIf 
                    
                    
                    DrawText( Var_X+X , Var_Y+Y, Texte$) 
                        
                Next A
            
            StopDrawing()
            
        Else : Debug "echec" : EndIf 

EndProcedure


Sur ce je retourne bosser, j'ai plein d'autres proc que je serais ravis de partager et d'ameliorer, n'hesitez pas à reagir... Comme il vous semble juste. héhé.

La prochaine que j'aimerais poster c'est ce que j'utilise pour un scrooling fluide malgré des Sprites transparents, c'est exactement le même principe..

J'ai fait un tas de truc pour les sprites, visant à diversifier facilement les ecrans, tout en gardants des ressources legeres..
J'ai des idées pour l'ameliorer.. C'est vrai que les Sprite3D() peuvent d'ailleur être trés utiles pour ça.. héhé

++