249Close251
philip-lynxOn the 2012-12-27 at 11:33pm
vince (./249) :
oulah, la lynx a beau avoir une "architecture fixe", elle a 8 timers indépendants à disposition du développeur, à titre de comparaison, sur un processeur x86 il faut souvent se contenter de l'INT8... L'utilisation de vsync peut se révéler être un piège, vu qu'on peut changer la fréquence d'affichage, ça impactera directement le rythme des vsync d'une part et d'autre part, si tu as dépassé le temps d'une frame alors vsync attendra la fin de la frame suivante, à manier avec précaution donc.
Justement, j'ai testé mon pac man sur la console, et il y a un soucis qui est lié à l'utilisation du tableau de x sprites de 11 octets. Il y a de larges bandes noires, ou blanches, horizontales qui clignotent rapidement, donc un problème de rafraichissement.

code du tableau de 112 sprites de 11 octets (que fadest m'avait conseillé dans le post "un nouveau glouton" pour l'affichage des nombreuses pastilles) :
extern char SCB[112][11] at (0xfff8-16320-112*11); // spr0 est le "modèle" de sprite de 11 octet pour initialiser une occurence de SCB2[] extern char spr0[11]; // init_scb est le premier sprite à afficher, en fait, il pointe sur un sprite vide // j'aurais aussi pu le faire pointer vers le background // l'important dans le _init_scb, c'est dc.w _SCB2 // qui fait pointer le sprite suivant vers le premier du tableau SCB extern char init_scb[23]; #asm ; init_scb est utilisé pour initialiser les registres du SpriteEngine ; avec les paramètres adéquats (palette...) ; Using this trick, the 8*11 spr[]-SCBs only need 11 Bytes each! _init_scb: dc.b $c1, $10, $20 dc.w _SCB ; PTR_NEXT pointe vers le 1° sprite visible (SCB[0]) dc.w dummy ; PTR_DATA pointe vers un sprite "inexistant" dc.w 200, 200 ; x,y -> on affiche en dehors de l'écran dc.w $100, $100 ; pas de zoom dc.b $01, $23, $45, $67, $89, $ab, $cd, $ef dummy: dc.b 0,0,0 ; le sprite "inexistant" ; spr0 sert de modèle au sprites du tableau SCB _spr0: dc.b $c4, $08, $02 ; CTL0, CTL1 = réutilise la palette, COLL dc.w 0, 0 dc.w 0, 0 #endasm
J'ai eu l'idée de remplacer le vsync() par le VSYNC de Matthias Domin (sprdemo4), mais le problème est toujours là.