Buffer...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Buffer...

Message par Crystal Noir »

hello everybody, everybody hello, hello everybody, everybody euh...hello.

lol

Bon question : Comment gérer un buffer avec pure ? c'est à dire prenons un exemple tout c...euh tout bête :

Vous avez un jeu de shoot, écran noir avec des étoiles. Facile ! un clearscreen(0,0,0) on raffiche les sprites et hop.

Seulement quand on a un jeu un peu plus complexe avec décors et cie, comment on le gère ?

Merci d'avance :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Tu dessines ton décor dans un sprite ,et au lieu de faire clearscreen() tu fais displaysprite() .
Comme ça pas besoin de recalculer le décor en permanence, tu ne le changes que quand c'est nécessaire .

Ou alors tu dessines ton décor à l'écran , puis tu fais un premier flipbuffer() et tu le redessines encore une fois pour qu'il soit dans les deux buffers , tu fais ça avant la boucle principale bien sûr.

Et dans ta boucle tu ne fais pas de clearscreen , juste un affichage des sprites de ton jeu , bon c'est théorique , j'ai pas testé :)

ça devrait marcher si ton décor est figé .Sinon la première méthode.
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

c'est la seule méthode ? et si le décor est animé ca marche pareil ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je me doutais bien que ça ne serait pas aussi simple , j'ai lancé ça pour que tu en dises plus :)

Si le décor est animé et que tu ne redessines pas tout , ça peut être intéressant de le faire dans un sprite .

Mais bon , ça serait mieux si tu en disais un peu plus .
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Ben pour l'instant c théorique. Dans la première version ca sera pas animé le décor (quoique en fait je me demande si je vais pas le faire).

Mais par ex, si j'ai un décor composé d'une image fixe et puis par ex des arbres qui bouges ou un truc du genre. et au premier plan j'ai mes sprites du joueur etc...

En fait le but serait de faire un double buffer. C'est à dire qu'on affiche le premier, pendant qu'on écrit sur le second et ensuite "flip" on tourne le buffer.

Car le pb de ton idée de sprite, c que mon décor fait 800 X 600 si je fais ca ca rame à mort ! ;(
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Bon sur un gros pc ca rame pas, mais bon pour un petit jeu comme ca normalement pas besoin de grosse config. mon portable c l'horreur bon d'accord il a une carte graphique de daube

Mon pb c que mon décor est gros et le fait de faire un displaysprite en boucle dessus, ca ralentit tout....

Doit bien y avoir un moyen non ? Peut être un truc avec UseBuffer() ? mais je comprend pas trop cette instruction.

Apparement il suffit de faire un displaysprite du décor mais je me demande si c pas énorme pour un sprite de 800 X 600 lol
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Extrait d'un de mes premiers codes en purebasic

Code : Tout sélectionner

#Map = 1
CreateSprite(#Map,#ScreenWidth,#ScreenHeight)
UseBuffer(#Map) 
For b = 0 To #TailleMapY
         For a = 0 To #TailleMapX
            ChoixTile = ReadWord() ; lecture du fichier Map

               DisplayTransparentSprite(ChoixTile,a*#TailleTileX,b*#TailleTileY)
                
            EndIf
         Next a
      Next b 
UseBuffer(-1) ; Retour au mode normal
A chaque fois que tu veux faire évoluer ton fond d'écran tu passes par les lignes ci-dessus .

Et tu affiches tout ton jeu en une seule fois.
Peut-être que tu peux même avoir plusieurs sprites , qui sauvegardent un contexte du jeu différents , et tu as juste à coller le bon contexte dans le Sprite final #Map avant de l'afficher .

Tu pourrais te faire une banque de contextes du jeu précalculés , qui seraient stockés dans des sprites .Par exemple pour tes arbres animés , tu les fais tous tenir dans un seul sprite, si ton animation des arbres se fait en 10 images , ça te fera 10 sprites à créer , mais tu pourras placer autant d'arbres que tu le souhaites , et ils seront copiés en une fois dans le sprite #SpriteArbres

Enfin ; tout ça dépend du jeu, de ce que tu vas faire ,et ça demande une bonne analyse ,et en plus comme je ne l'ai jamais fait , je ne sais pas ce que ça vaut :)
Répondre