null Le 18/10/2003 à 09:46 Est-ce possible de convertir un tableau de sprite 32*32 (unsigned long) en une matrice (unsigned char) de 32*32 ?
Enfin ça doit bien être possible mais tout ce que j'ai tenté n'a pas marché.
C'est pour faire une routine qui zoom un sprite : il y a autre moyen que de se servir d'une matrice de unsigned char 32*32 pour zoomer un sprite de 32*32 ? (parce-que ce que je fais là c'est du pixel par pixel).
www.wikio.fr/user1921&info=comments
Tu veux prendre chaque bit de ton sprite 32x32 et le mettre dans unn tab de 32x32 octets ?
C'est évidemment possible, il faut que tu parcoures tous les bits de ton sprite et que tu les mettes au fur et à mesure dans ton tablau d'octet.
Pour zoomer, tu peux directement utiliser ton sprite 32x32, ou bien la matrice d'octets... Comme tu veux.

« 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
. »
Quelle est la différence entre aficher un sprite dans la mem vidéo et tester les bits de la mem video (à l'emplacement où tu as mis le sprite), ou tester directement les bits du sprite ?

« 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
. »
null Le 18/10/2003 à 11:48 Bah, je ne sais pas... c'est pareil mais pour moi c'est plus simple parce-que le sprite au départ c'est pas une matrice.
www.wikio.fr/user1921&info=comments
Ben entre un sprite affiché et un sprite non affiché, je ne vois pas la différence.
Et un sprite est un tableau

« 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
. »
null Le 18/10/2003 à 11:58 Bon voilà comment je fais :
short i=0,j=0,w=0;
for(i=0;i<32*32;i++)
{
w++;
if(w>32)
{
w=0;
j++;
}
if((unsigned char)sprite1[i])
{
picture_1[j][w]=1;
}
if((unsigned char)sprite2[i])
{
picture_1[j][w]=2;
}
if((unsigned char)sprite1[i]&&((unsigned char)sprite2[i]))
{
picture_1[j][w]=2;
picture_1[j][w]=1;
}
}
sprite1 et sprite2 c'est les deux plans pour les niveaux de gris.
Il est où le problème là-dedans ?
www.wikio.fr/user1921&info=comments
null Le 18/10/2003 à 12:24 Sinon quelqu'un d'autre aurait une idée ?
www.wikio.fr/user1921&info=comments
Es-tu sûr de savoir comment est représenté un sprite en mémoire ?
Il faut tester chaque bit de chaque ligne du sprite.

« 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
. »
Zeph Le 18/10/2003 à 14:20 Non... Là tu utilise le & j n'importe comment.
Raisonne en binaire, le & fait un ET binaire entre deux nombres. Imaginons que 8 pixels de ton sprite sont codés sur un octet comme ça : 0b01001110, en faisant un & 0b10000000 (= 128) tu vas isoler le 1er bit, avec & 0b01000000 (= 64) tu isole le deuxième, etc... Je te laisse trouver un moyen d'utiliser ça, et évite tant que possible les "voilà ma source corrigez là", c'est pas comme ça que tu avancera.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Il y a aussi peek_bit qui est interessant, regarde dans la doc de TIGCC.
Et ma routine en assembleur a de fortes chances d'être à la fois plus petite et plus rapide que sa routine en C.
null Le 18/10/2003 à 17:47 J'y suis presque arrivé ! Ca marche mais j'ai qd même un souci :
J'ai rien trouvé d'autre que de faire ça pour le ET binaire que je réalise avec k :
for(j=0;j<32;j++)
{
k=1;
for(w=0;w<j;w++)
{
k=k*2;
}
...
}
Ca me donne très bien 2,4,8,16,32,64,128,256... sauf la dernière valeur qui est la taille max d'un long et puis le 1 aussi.
Au début je faisais : k = 1>>j (enfin je sais plus dans quel sens c'est)... et ça me donnais que la moitié des valeur. Quand j était supérieur à 14 k était égal à 0.
Vous auriez pas une solution correcte à me proposer ?
www.wikio.fr/user1921&info=comments
1ul<<j
Et pourquoi pas utiliser ma routine en assembleur?
null Le 18/10/2003 à 17:54 Bah parce-que comme dit Ximoon, je vais essayer de comprendre. J'ai tjrs fait comme ça : je code ma routine en c et qd elle marche j'utilise des routines asm. Ce c'est pas que je n'ai pas envie de l'utiliser mais je veux savoir me débrouiller tout seul.
En puis la c'est bien plus pour comprendre comment manipuler les bits que je fais ça parce-que ce que je fais là je ne vais sûrement pas le laisser dans mon programme : ça ralenti trop.
Sinon merci bien pour le 1ul je vais essayer.
www.wikio.fr/user1921&info=comments
null Le 18/10/2003 à 18:05 Par contre je ne comprend pas pourquoi pourquoi je n'obtiens jamais la taille maximale d'un unsigned long ?
www.wikio.fr/user1921&info=comments
Il faut aller de 31 à 0, pas de 1 à 32. Tu n'obtiens pas la taille maximale parce qu'elle n'est pas une puissance de 2, mais une puissance de 2 moins un (232-1). Et il faut commencer par le bit le plus significatif, pas par le bit le moins significatif.
Raphaël, si tu as besoin de vitesse, utilise plutôt la routine de Kevin une fois que tu auras pigé comment ça marche, parce qu'elle a vraiment beaucoup de chances d'être bien plus rapide.

« 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
. »
null Le 18/10/2003 à 20:34 Non là je n'ai pas du tout besoin de vitesse.
www.wikio.fr/user1921&info=comments