J'essaie de coder un petit jeu sympa qui utilise _rowread et un écran virtuel.
J'ai voulu faire des graphismes en nvg pour améliorer l'esthétique du jeu, mais je n'y arrive pas :
Je détourne l'auto_int_1, comme c'est décrit dans le tuto de squale, mais ça marche pas.
Si je n'utilise ni l'écran virtuel, ni _rowread, les nvg marchent.
Pouvez-vous m'aider ?
Uther Le 10/01/2002 à 11:59 ha moi je détourne jamais l'AUTO_INT5 et j'ai jamais eu de problèmes!
Et comment faut faire pour gérer les nvg dans des écrans virtuels.
Je fais SetPlane(VEcranClair); ???
et puis, tant que j'y suis, j'ai une autre question :
Comment faire pour limiter la vitesse du jeu à un certain nombre de fps ???
Uther Le 10/01/2002 à 13:55 Le plus précis est d'utiliser les Timer cf tuto de Squale
Sinon la boucle for vide marche aussi mais c'est pas conseillé si tu peux t'en passer
perso, les boucles for vides marchent pas mal (vu toput ce que j'ai déjà mixé avec les timers, c plus pratique)
par contre, les timers, c amplement plus exact comme valeurs !
perso, en général, dans mes jeux, je détourne TOUS les AUTO_INT... une petite boucle for qui me les mémorise ds un tableau au début du prog, et une autre qui les reestore à la fin => bien pratique : je peux ensuite les modifiers sans risque (entre les modifications de l'AU1 pr les calculqs de fps, les modifs de l'AU5 pr certaines animations et autres... c le bordel au bout d'un momen, mais ça marche)
Kelso Le 10/01/2002 à 21:03 les timers c quand même un peu lent pour faire un jeu: la valeure de base c 1/20 de sec.
the car's on fire and there's no driver at the wheel
and the sewers are all muddied with a thousand lonely suicides
and a dark wind blows
GYBE! Dead Flag Blue
Merci pour les boucles de ralentissement.
Par contre, je n'ai pas bien compris comment allier nvg et écrans virtuels...
Comment on utilise les fonctions :
- SetPlane
- GetPlane
- memcpy(LCD_MEM,...,2000)
Merci
1. Il faut détourner aussi l'auto-int n°5, sinon il y aura des problèmes sur HW2. Mais ce n'est pas la source du problème ici.
2. Il faut détourner les interruptions avant d'appeler GrayOn et les remettre après avoir appelé GrayOff!
Quelle est la source du pb alors ?
Et pour les écrans virtuels, je dois faire quoi, comme manip ?
Zeph Le 11/01/2002 à 20:58 Pkoi il faut détourner l'auto-int5 ?
Enfin est-ce que ça pourrait cause des problèmes à long terme ?

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Donc en résume, pour que les niveaux de gris marchent sur HW2 ET HW1, en utilisant des écrans virtuels, il faut que je détourne quels AUTO_INT ??? (d'ailleurs c'est quoi précisément, ces auto_int ?)
et comment je dois me débrouiller avec mes écrans virtuels. J'en ai un pour chaque plan, et après faut faire quoi ?
Merci
Ok, Kévin, j'ai lu ton mini msg, les nvg marchent. Enfin, il y a une image et puis ça plante.
Pourquoi ?
(Je n'ai pas détourné l'AUTO_INT_2)
Probablement parce que tu n'as pas mis GrayOff, puis remis les sauvegardes des interruptions, à la fin du programme. Et PortRestore si tu as utilisé PortSet.
Et lis la documentation de TIGCC sur ces fonctions, tu saurais peut-être comment les utiliser si tu le faisais!
[edit]Edité par Kevin Kofler le 11-01-2002 à 21:40:12[/edit]
La doc de TIGCC est en Anglais, j'ai essayé de la lire, mais je suis pas très fort en anglais...
En gros, mon code se résume à ça :
void fonction1(void)
{
...
// Désactivation des AUTO_INT 1 et5
GrayOn();
...
fonction2();
}
void fonction2(void)
{
...
do
{
...
// Ces instructions permettent de faire bouger mon perso
fonction3();
...
}while(condition)
...
GrayOff();
// Désactivation des AUTO_INT
}
void fonction3(void)
{
SetPlane(0);ClrScr();
SetPlane(1);ClrScr();
...
// Instructions qui affichent des sprites à l'écran...
}
Qu'est-ce qui va pas ???
[edit]Edité par jackiechan91 le 11-01-2002 à 21:52:15[/edit]
Pour les écrans virtuels, je fais comment ?
J'utilise un écran virtuel comme plan clair, un autre comme plan sombre, mais après, comment je dois faire pour copier le tout dans le LCD_MEM ?
Bon, alors :
TU actives les grays, etc... tu alloue tes écrans, etc...
Ensuite: tu dessine sur le plan dark virtuel :
PortSet(V_dark, ...);
Draw...
Draw...
Draw...
Puis tu dessines sur le plan Virtuel light :
PortSet(V_light, ...)
Draw...
Draw...
Puis, tu copie les deux écrans virtuels vers les deux écrans officiels :
memcpy(GetPlane(LIGHT_PLANE), V_light, LCD_SIZE);
memcpy(GetPlane(DARK_PLANE), V_dark, LCD_SIZE);
puis tu recommences : tu dessines de nouveau sur tes deux plans, comme plus ho, et tu les copie, et ainsi de suite...
Merci Squale, je vais essayer ta technique...
Bon, sinon, pour le plantage, j'ai trouvé en fouillant bien ce qui n'allait pas :
J'utilisais un timer pour ralentir le jeu (le USER_TIMER), et je l'ai désactivé un peu au pif, pour essayer, et Ô miracle ça marche...
>ça marche pas mieux avec le 5
Si, les gens qui disent qu'il faut le détourner (dont moi) savent de quoi ils parlent!!!
L'auto-int 5 de AMS change le masque du clavier (du moins sur HW2)! Donc par exemple, si on appuie sur le curseur vers le haut, le programme pourra croire qu'on a appuyé sur [ESC]. C'est très énervant!
oui, il faut désactiver l'AUTO_INT_5 !!!
(même si c pas mis dans mon tuto, je sais plus)
Kevin> je penses que c'est de là que viennent certain des pb de TxtRider, non ?
Le truc du timer... ben, le USER_TIMER est basé sur l'AUTO_INT_5, je crois...
Qd c archivé ça foire ? bizarre...
C'est bizarre pour l'AUTO_INT_5, puisque dans la version sur ma TI, je ne le détourne pas et ça marche, si j'appuie sur haut ou sur esc, ça fait la différence...
Enfin, par précaution, je vais quand même le détourner...
Et sinon, pour le fait que ça ne marche pas lorsque j'archive le prog, vous n'avez pas d'idée d'où ça pourrait venir ????
J'ai un autre pb : après avoir exécuté le jeu, si je veux aller dans le VAR-LINK, il lui faut plus d'une seconde pour s'afficher...
Et pourtant j'ai détourné l'AI5
bizarre...
Tu as pensé à restaurer, à la fin du programme, les AUTO_INT que tu avais détourné ?