Re: Aide pour un programme en C
Posted: 26 Mar 2011, 15:24
Comment affiches-tu le double ?
News, programmes, tutoriaux, forum sur les calculatrices TI !
https://tiplanet.org/forum/
SetAMSPlane(LIGHT_PLANE);
BitmapPut(x, y, ImageDeFond_CLAIR, A_REPLACE);
SetAMSPlane(DARK_PLANE);
BitmapPut(x, y, ImageDeFond_FONCE, A_REPLACE);
short Loop = TRUE;
short key;
while (Loop)
{
Sprite8(x, y, Curseur, SPRT_XOR);
key = ngetchx();
Sprite8(x, y, Curseur, SPRT_XOR);
if (key == KEY_DOWN) {};
if (key == ...) {};
....
if ((key == KEY_ENTER) or (key == KEY_ESC))
Loop = FALSE;
}
Folco wrote:Je ne crois pas que ça vienne de ngetchx().
Folco wrote:Par contre, tu dessines directement à LCD_MEM, c'est à dire à l'adresse 0x4C00.
Sur VTI, donc sur HW1, LCD_MEM est bien utilisé dans le double buffering.
Sur HW3/4, pas sûr. Faudrait que je regarde comment c'est codé dans gray.s, mais si les deux plans sont alloués sur le heap, tu dessines au final sur une partie jamais affichée à l'écran.
Folco wrote:Par contre, pourquoi afficher 2500 fois ton sprite à la même place, surtout en A_REVERSE, qui n'est pas documenté dans Sprite8 ? Tu dois utiliser SPRT_* à la place, dans le mode désiré.
Folco wrote:Autre chose qui me vient : il serait peut-être beaucoup plus simple de faire quelque chose comme ça :
- Code: Select all
SetAMSPlane(LIGHT_PLANE);
BitmapPut(x, y, ImageDeFond_CLAIR, A_REPLACE);
SetAMSPlane(DARK_PLANE);
BitmapPut(x, y, ImageDeFond_FONCE, A_REPLACE);
short Loop = TRUE;
short key;
while (Loop)
{
Sprite8(x, y, Curseur, SPRT_XOR);
key = ngetchx();
Sprite8(x, y, Curseur, SPRT_XOR);
if (key == KEY_DOWN) {};
if (key == ...) {};
....
if ((key == KEY_ENTER) or (key == KEY_ESC))
Loop = FALSE;
}
Ce n'est qu'une manière de faire, en pseudo-C, à ne surtout pas recopier bêtement ^^. Tu affiches une fois tout le fond, et tu affiches ton curseur en XOR avant et après le ngetchx (comme ça il est effacé en restaurant le fond pendant le traitement du clavier que tu fais).
= Ca évite de tout redessiner, c'est hyper rapide et simple.
J'espère en tout cas que j'ai bien compris ce que tu veux.
Lionel Debroux wrote:Comment affiches-tu le double ?
Folco wrote:(en affichant deux fois le simple )
Pardon ^^ Tu as regardé la doc de printf ? Y sont décrites toutes les options de formatage de données pour un affichage justement.
Sinon le A_REVERSE marche!
enum Attrs {A_REVERSE, A_NORMAL, A_XOR, A_SHADED, A_REPLACE, A_OR, A_AND, A_THICK1, A_SHADE_V, A_SHADE_H, A_SHADE_NS, A_SHADE_PS};
enum SprtModes {SPRT_XOR, SPRT_OR, SPRT_AND, SPRT_RPLC};