Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » Eciter le scintillement lors d'affichage graphique trop rapide

Passkhaal
Visiteur
Citer Windows XP Firefox 3 - Posté le 16/02/2010 à 19:22
Mon programme dessine en screen 12 un objet en mouvement.
Je dessine en couleur puis je redessine avec la couleur 0 pour effacer, j'effectue le mouvent voulu, et je dessine, etc...
Cela provoque un scintillement désagréable.
Il me semble avoir lu quelque part qu'on pouvait se synchroniser avec le raffraichissement d'écran en testant la valeur d'une adresse mémoire (peek)(mais laquelle et comment interpréter son contenu, etc...) et ainsi afficher au bon moment.
Quelqu'un pourrait-il m'aider dans ce domaine ?
Merci d'avance.
Freem
Modérateur
RemonterCiter Linux Firefox 3 - Posté le 17/02/2010 à 18:14
Sans parler de synchronisation (qui peut aussi être très utile, bien entendu) tu perds du temps si tu redessines avec la couleur 0.
Si tu utilises des sprites (je suppose que c'est le cas) il me semble qu'il est possible de les effacer en appliquant un xor sur put. Ce qui permet de n'effacer que la partie de l'image qui change.

Pour ce qui est de la synchronisation, il me semble qu'il faut utiliser du code en assembleur. Du moins, les infos que j'avait trouvé à l'époque ou je pratique QB utilisaient toujours de l'asm.
Je ne sais pas si tu trouveras de la doc pour un truc en QB la dessus à notre époque...
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 21/02/2010 à 22:44
(héhé Salutations.

Dans de nombreux programmes, il m’a fallu déplacer des dessins habituellement carrés en évitant au mieux les phénomènes de scintillement. Avec le principe d’afficher successivement image colorée, noire, colorée, noire, colorée, noire, etc …/… , je pense qu’il doit obligatoirement y avoir du scintillement sauf si les 20 ou 25 images par seconde sont obtenues (comme au ciné). Je ne vois pas ce qu’une synchronisation pourrait apporter comme solution, mais dans ce dernier cas, si la vitesse de 20 ou 25 est atteinte, le mobile va telle vite qu’il est incontrôlable par le joueur.
Il existe une solution si la zone sur laquelle se déplace le mobile est d’une seule teinte (cela doit être le cas). C’est ce que j’utilise pour des démos ou jeux que tu peux trouver sur le wall : INKJEUX3.BAS, V!!BALLE.BAS, MIAMMIAM\MIAMMIAM.BAS, DAMIER, TOTOS.BAS (Jeu)
Au moment de la mise en table du dessin (GET coordonnées, tableau), incorporer à la surface sauvegardée un cadre/bordure de un pixel (tout autour) de la couleur de la surface où le déplacement se fera. Cette bordure ne sera pas visible lors du PUT (avec PSET), mais en cas de déplacement d’UN pixel, quel que soit son sens, elle effacera tout « résidu » du dessin précédent et il n’y a pas besoin de supprimer l’image précédente. Plus, ou presque pas de scintillement. Et le déplacement est très rapide, au point qu’il faut toujours le ralentir.
Si mes explications ne sont pas assez claires, S.O.S.
Et je pourrai mettre un petit programme de démo sur le Wall.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
Freem
Modérateur
RemonterCiter Linux Opera 9 - Posté le 26/02/2010 à 13:41
Il y à aussi la solution qui consiste à copier ce qui est en dessous dans un sprite avant d'afficher le sprite voulu.
Simple, plus rapide que l'effacement total, et permet de conserver un éventuel fond. (c'est la technique utilisée dans les jeux 2D en fait)
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
Freem
Modérateur
RemonterCiter Linux Opera 9 - Posté le 26/02/2010 à 19:34
Ah, j'ai retrouvé un site (et la partie cachée de ce site qui contient les fichiers) qui devrai contenir des solutions:
http://biskbart.free.fr/nouveau/proge.htm

En fouillant les sources, je pense qu'il doit y avoir quelque part un bout de code pour la synchronisation verticale... (c'est plus tout jeune par contre, certains risquent de se souvenir d'une autre époque des pbs (sourire) )
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 26/02/2010 à 23:25
(héhé Salutations.

Passkhaal nous dit :

Citation Mon programme dessine en screen 12 un objet en mouvement.
Je dessine en couleur puis je redessine avec la couleur 0 pour effacer, j'effectue le mouvent voulu, et je dessine, etc...


Nous pouvons en conclure qu’il n’y a pas de fond d’écran, étant donné que la surface dessinée est « effacée » par du noir.
Il est possible d’obtenir le même résultat avec la méthode que j’indique ci-dessus.
Elle est très simple à écrire, avec un seul PUT, (X, Y), PSET et l’exécution par Billy est très rapide.
Dans le contexte donné, que peut-il y avoir de plus simple ?
C’est amplement suffisant pour la conception de petits jeux sans ambition excessive.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
Freem
Modérateur
RemonterCiter Linux Opera 9 - Posté le 02/03/2010 à 21:24
Ce n'étaient que des compléments d'information (sourire)
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2012 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,031 s - Crédits - Stats
1 connecté