Voir la version complète : [PSP][Aide] Mettre l'ecran en cache
Bonjour,
J'ai une question assez simple : Quel est le meilleur moyen pour 'sauvegarder' temporairement l'image à l'ecran, pour la restaurer un peu plus tard.
L'exemple très concret est le suivant :
L'utilisateur est sur son application et appuie sur la touche 'start' pour appeler la fenêtre des paramètres.
Je voudrais donc
1°) sauvegarder dans un espace l'image courante
2°) afficher par dessus un ou plusieurs dessins (l'écran de paramètres)
3°) restaurer l'image précédemment sauvegardée lorsque l'utilisateur a terminé son paramétrage.
ce sont donc les étapes 1 et 3 surtout qui me posent pb.
Puis-je utiliser la fonction 'oslImageCopyTo' pour sauvegarder l'ecran courant ?
Merci d'avance pour vos conseils
Heu oui c'est possible, "suffit" de copier le buffer vers une image (jamais fait, mais ça doit pas être sorcier)
Mais ce que tu veux faire ne nécessite pas cela, si tu veux afficher les paramètres sur l'écran de jeu... bah dessine les paramètres sur l'écran de jeu :p
Pourquoi tu veux te compliquer la vie ?
si tu veux afficher les paramètres sur l'écran de jeu... bah dessine les paramètres sur l'écran de jeu :p
Pourquoi tu veux te compliquer la vie ?
Oui mais je ne veux pas 'ecraser' ce qu'il y a en dessous, car j'ai l'intention de le réafficher. il faut donc bien que je sauvegarde la partie d'écran que je vais 'salir'. le principe des sprites, quoi.
+---------------------------------+
| ---------------------------------|
|---Mon ecran--------------------|
|------avec-----------------------|
|---des choses-------------------|
|------dessus --------------------|
+---------------------------------+
affichage d'une fenêtre :
+---------------------------------+
| ---------------------------------|
|---Mon ecr+********+-------|
|------avec-|.................|--------|
|---des cho |.................|--------|
|------dessu+********+-------|
+---------------------------------+
puis effacement de la fenêtre :
+---------------------------------+
| ---------------------------------|
|---Mon ecran--------------------|
|------avec-----------------------|
|---des choses-------------------|
|------dessus --------------------|
+---------------------------------+
donc dans ce cas la quel et l'interrer de sauvegarder l'ecran principal
tu a qua simlplement afficher ton sprite et le dsupprimer apres ??
ca n'est pas un sprite, c'est une fenêtre temporaire (style 'voulez-vous quitter ? oui/non')
moi perso je l'ai fait dans SUPER MARIO TOY et ca ne me cause pas de probleme je gere ca de la meme facon il faut utiliser des variable , faire des condition et ca passe tout seul
c'est la meme chose que afficher uun sprite et l'enlever ensuite , sauf que tu a pour toi plusieur sprite qui forme une fenetre mais c'est la meme chose
+1, c'est beaucoup plus simple que tu crois.
Par exemple (je vais simplifier un max, avec juste des osldraw, pour bien expliquer comment fonctionne l'affichage), t'as un truc comme ça :
olsDrawImage(fond);
oslDrawImage(pion);
Disons que c'est ton plateau de jeu.
Pour afficher ton menu, tu ajoutera un osldraw un peu comme ça :
olsDrawImage(fond);
oslDrawImage(pion);
if (menu) oslDrawImage(menu);
Comme ça avec un menu == 1, ton menu s'affiche par dessus ton plateau de jeu, et dès qu'il repasse à 0, hop il disparait...
En fait, tu ne salis rien, tout est redessiné à chaque frame.
et en plus, ca permet de laisser les anime en arriere plan ou tout autre effet ^^
hehe voila c'est bien j'aurais du mettre un exemple :)
Merci pour vos conseils : je crois que j'ai compris ce que vous vouliez dire : ça, c'est valable dans le mode 'tout redessiner à chaque fois'.
Mais pour YodaJr qui connait mieux mon pb (exposé qques jours auparavant), je ne suis pas en mode DoubleBuffer, car je ne sais pas pourquoi ça ne marche pas chez moi (c'est ma faute, c'est sûr que je ne fais pas comme il faut), j'ai des scintillements. Et puis imaginez un jeu d'echecs : on ne peut pas redessiner tout l'écran et tous les pions à chaque fois que change de frame ? je pense qu'il y a qque chose qui m'echappe : moi ,j'aurai tendance à 'vider' juste la case d'ou vient mon pion, et redessiner mon pion à son nouvel emplacement ? non ?
euh, ta fenêtre revient a faire une pause, donc vois pas ou est le problème :D
Le pb est que je ne suis pas en mode DoubleBuffer : donc tout est ecrasé au fur et à mesure que je dessine puisque je ne redessine pas tout à chaque fois (je commence à comprendre la philosophie du DoubleBuffer :hmm: )
Et puis imaginez un jeu d'echecs : on ne peut pas redessiner tout l'écran et tous les pions à chaque fois que change de frame ?
Bien sûr que oui ^^
C'est valable pour tout le monde, tout est redessiné 60 fois par seconde ;)
(au passage, t'as stoppé le fil de la discussion sur l'autre topic)
Bien sûr que oui ^^
C'est valable pour tout le monde, tout est redessiné 60 fois par seconde ;)
(au passage, t'as stoppé le fil de la discussion sur l'autre topic)
Bon ,alors j'ai eu le déclic : je suis repassé du côté non-obscur de la force et j'ai opté pour le DoubleBuffering : le fait de tout redessiner à chaque fois m'interpellait, je ne voyais pas comment cela pouvait marcher (rapidement surtout) : je suis de la très vieille école ;) qui a connu les Z80 (4,77 MHz).
Mis à part le DoubleBuffering qui fonctionne à merveille :bravo:, mon pb a été résolu : j'ai une image dans laquelle je dessine l'ensemble des pions qui ne vont plus bouger (grace à SetDrawBuffer).
Du coup, au lieu d'afficher le Fond + les '60' pions qui ne bougent pas + les pions qui bougent, je crée d'abord une image avec mes 60 pions qui ne bougent pas, puis j'affiche à l'ecran mon image de Fond, mon image qui contient les 60 pions par dessus, puis mes quelques pions qui bougent.
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org