Vous n'êtes pas identifié.
voila mon probleme...
J'ai une fonction toute simple censée remplir tout l'écran par des sprites de 8*8...
void drawscreen(int x,int y) { unsigned char i,j=0,rep; int yspr=(y>>3),xspr=(x>>3),xpos=-(x%8),ypos=-(y%8); clear3(SEG1); for (j=0;j<9;j++,ypos+=8) for (i=0;i<17;i++,xpos+=8) { rep=map[yspr+j][xspr+i]; d8clip_or(xpos,ypos,sprite[0][rep],SEG1); d8clip_or(xpos,ypos,sprite[1][rep],SEG3);}}
le probleme est que cette fonction, au lieu de faire les 153 boucles demandées (9*17) ne m'en fais que 17...soit elle ne prends pas en compte la boucle "for (j=0;j<9;j++,ypos+="...
J'ai essayé plein de truc mais rien n'a réussi...
Hors ligne
essaye de mettre des accloades:
void drawscreen(int x,int y) { unsigned char i,j=0,rep; int yspr=(y>>3),xspr=(x>>3),xpos=-(x%8),ypos=-(y%8); clear3(SEG1); for (j=0;j<9;j++,ypos+=8) { for (i=0;i<17;i++,xpos+=8) { rep=map[yspr+j][xspr+i]; d8clip_or(xpos,ypos,sprite[0][rep],SEG1); d8clip_or(xpos,ypos,sprite[1][rep],SEG3); } } }
Hors ligne
euh ca va pas changer grand chose lol
Moi je pense que c' est des sprites blanc que tu affiche parce que la je voie po !
Hors ligne
non, non...
merci xth, mais je ne suis pas débile, lol :ptdr: mes sprites ne sont pas blancs...
J'ai aussi essayé les accolades auparavant mais ca n'a rien changé
Hors ligne
Non, c au cas ou tu utiliserai des sprites blanc !
Imagine un peu que ton sprite blanc soit le 0, cad d8clip_or(xpos,ypos,sprite[1][0],SEG3); ca affiche du blanc !
Imagine que ton code lise or de la map, dans une zone ou il y a des zero !
Qu' est ce que ca affiche ? rien !
Ca m' est déjà arrivé, dc je te le dit !
Hors ligne
deaj aere ton code ça ira deja mieux !
ensuite, met le entre paranthese et essaie de le refaire d'une autre maniere, ça marechera
Hors ligne
à la qui :?:
:mrgreen:
Hors ligne
ah vi et fais gaffe à ça:
sprite[0][rep]
ça serait pas plutot:
sprite[rep][0]
??
personellement ça me semble logik....!
Hors ligne
non, c'est bien sprite[0][rep]...
( j'avoue que mon code n'est pas aèré...
Mais je suis en train de faire des efforts...pour les accolades a la ligne ca viendra avec le temps...
Hors ligne
swifter, réfléchit a ce que je t' ai dit !
Essaye d' affiche le numéro du sprite pour voir !
A propos, ma téchnique fiat - organisé, cependant, ca prend pê - de mémoire de faire comme ceci :
unsigned char sprite0[][8]=
{
{40,30,20,10,10,20,30,40},
};
unsigned char sprite1[][8]=
{
{10,20,30,40,40,30,20,10},
};
void drawmachin()
{
drawsprite(0,0,sprite0[0],sprite1[0]);
}
Non ? :?
Hors ligne
mais c trop biz ton truc swif!! on dirait ke tu ne vas afficher k'1 ligne de chake sprite!!
montre" nous comment est constitué au moins un sprite pour voir!
Hors ligne
C'est du copier-coller ton code ?
Paske des fois il y a un ';' qui se glisse a la fin du for et ca gene...
Hors ligne
ah !!!
ca y est... j'ai trouvé...
J'ai réécris ma fonction comme superna me l'a dit, et bizarrement ca a marché...ca n'avait rien a voir avec les sprites :
void drawscreen(int x,int y,unsigned char pos) { unsigned char i,j=0,rep; int yspr=(y>>3),xspr=(x>>3),xpos=-(x%8),ypos=-(y%8); for (j=0;j<9;j++) for (i=0;i<17;i++) { rep=map[yspr+j][xspr+i]; d8clip_or(xpos+(i<<3),ypos+(j<<3),sprite[0][rep],SEG1); d8clip_or(xpos+(i<<3),ypos+(j<<3),sprite[1][rep],SEG3);}}
Hors ligne
bin en gros tu faisait :
for (j=0;j<9;j++,ypos+=
for (i=0;i<17;i++,xpos+=
{ rep=map[yspr+j][xspr+i];
d8clip_or(xpos,ypos,sprite[0][rep],SEG1);
d8clip_or(xpos,ypos,sprite[1][rep],SEG3);}}
Explication pr ceux qui n'ont pas capter pk ca marche pas ce code :
Prenons xpos :
il commence a une valeur Xd !
le for commence sa boucle, a la fin on reviens a la1er boucle for, celle du y , et la : mince ! xpos n' est pas réinitialisé !! donc les sprites sont affiché hors de l' écran !
D' ou ce pb des ligne qui ne s' affiche pas en dessous (ou au dessus, ca dépend de comment tu est) de la 1er ligne !
Hors ligne
de rien, de rien...
ça marche toujours !
Hors ligne
lol...
mais ton explication est fausse xth !!!
tout d'abord xpos n'a pô besoin d'être initialisé (vu qu'elle l'est déja au début de la fonction), mais juste incrémenté. Or elle est bien incrémenté à chaque boucle, tout comme ypos :
for ( j=0 ; j<9 ; j++, ypos+=8 )
for ( i=0 ; i<17 ; i++, xpos+=8 )
Hors ligne
for ( j=0 ; j<9 ; j++, ypos+=8 )
for ( i=0 ; i<17 ; i++, xpos+=8 )
{}
Bon on reprend l' explication pas a pas.
j=0;
i=0;
i<17? vi
i++, xpos+=8
et ainsi de suite .
Mais a un moment, on arrive a i qui devient = 17, t d' accord ?
Alors ce qui se passe, c' est qu' on quitte la boucle !
1er boucle FOR : j++;
2eme boucle FOR : et i=0 ! mais si on regarde ton code, xpos reste a la valeur qu' il etait cad on a toujours xpos + 17 * 8 (incrémenté 17 fois par !
Donc dés que on aura i++; on aura aussi xpos++ ! et donc on aura xpos + 18*8 ! et c la qu' etait ton pb !!
Hors ligne
ah ouais...
merde...
j'avais carrément pô capté !!!
( ni vu le problème d'ailleurs)
Hors ligne