en fait c'est pour un programme ou il y a du scrolling mais avec des niveaux de gris.
Je voudrais savoir comment redessiner les sprites dans 2 écrans virtuels.(1 correspondant à LIGHT_PLANE & 1 à DARK_PLANE)
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
Tu veux les dessiner avec quoi tes sprites ?
Que cache le pays des Dieux ? -
Forum Ghibli -
Forum LittéraireLa fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
for(x;...;x++){
for(y;...;y++){
GrayClipSprite16_OR_R(X,Y, 16, sprite<LIGHT>, sprite<DARK>,GetPlane(0),GetPlane(1)); // une fonction de extgraph
}
}
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
Ben, tu remplaces GetPlane(0) et GetPlane(1) par tes écrans virtuels (qui doivent avoir la même taille que l'écran).
Au passage, le nom GetPlane est deprecated, tu es censé utiliser GrayGetPlane, et passer 0 et 1 à GrayGetPlane est très moche, les constantes LIGHT_PLANE et DARK_PLANE sont là pour ça.
GrayClipSprite16_OR_R(X,Y, 16, sprite<LIGHT>, sprite<DARK>,virtual_LIGHT,virtual_DARK);
puis après je fais un memcpy de virtual_LIGHT>>GrayGetPlane(LIGHT_PLANE)
et pareille pour la DARK.
c'est bien ca?
et entre -temps il faut que je fasse un clrscr() ou nan?
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
ok
est-ce que utiliser FastCopyScreen de extgraph est bien???
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
C'est un peu plus rapide que memcpy, mais prend aussi nettement plus de place.
ok bon ca arche bien avec les écran virtuels mais un gros pb:"Protected memory violation" apparait rapidement après quelques scroll.
short mod16(short x)
{
return (x-(x%16))/16;
}
void DRAWMAP(short x, short y)
{
short i=0,j=0;
void *virtualL = malloc (LCD_SIZE);
void *virtualD = malloc (LCD_SIZE);
for( i = mod16(x); i < (mod16(x)+11); i++)
for( j = mod16(y); j < (mod16(y)+7); j++)
if (i>=0 && i<=xmax && j>=0 && j<=ymax)
GrayClipSprite16_OR_R((16*i)-x,(16*j)-y, 16, sprites[(map[j][i])][0], sprites[(map[j][i])][1],virtualL,virtualD);
memcpy(GrayGetPlane(LIGHT_PLANE),virtualL,LCD_SIZE);
memcpy(GrayGetPlane(DARK_PLANE),virtualD,LCD_SIZE);
virtualL=malloc(0);
virtualD=malloc(0);
}
donc il faut que je supprime virtualL et virtualD à chaque fois??
et comment puis-je le faire??
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
Ce doit être parce que tu ne vérifies pas tes allocations, que tu ne les libères pas après utilisation et que tu réalloues 7ko à chaque frame...
malloc(0) ne sert à rien, pour libérer un bloc de mémoire, il faut utiliser la fonction free.
Et c'est un peu idiot de réallouer un écran virtuel (enfin, 2) à chaque image. Je te conseille de les allouer à l'initialisation une fois pour toute (et de les libérer à la fin du programme).
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
donc le programme se présenterai comme ca:
void drawmap(short x,short y){
... //codes
void virtualL=malloc(LCD_SIZE);
void virtualD=malloc(LCD_SIZE);
... //codes
free(virtualL);
free(virtualD);
}//fin de la fonction
mais en fait, c'est que je déclarent ces écrans dans une fonction.
donc faudrait que je le fasse dans le main???
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
ok merci j'essaie ce soir
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)
Que veux-tu faire exactement ?
Si tu copies un écran vers un autre, tu écrases forcément l'ancien contenu !
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
Wai just comme ça pour savoir, est-ce qu'il y a une commande pour additionner les deux contenus ou faut-il la faire nous-même ?
Il y a les fonctions SpriteX8 de ExtGraph.
Mouai je retiendrai. Nan en fait c'était juste comme ça pour savoir, s'il un avait une fonction directe pour faire un OR. mais c'est vrai que c'est pas compliqué.
++