1

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

2

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.
avatar
« 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. »

3

Tu veux prendre chaque bit de ton sprite 32x32 et le mettre dans unn tab de 32x32 octets ?

Oui c'est ça. smile
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.

oui c'est ce que j'ai essayé de faire mais ça n'a pas marché.
Pour zoomer, tu peux directement utiliser ton sprite 32x32, ou bien la matrice d'octets... Comme tu veux.

Quoiqu'il en soit il faut faire ça bit par bit ?
J'ai déjà ma routine de zoom mais en fait j'affiche un sprite à l'écran et je teste ensuite les pixels dans la mémoire vidéo pour le rentrer dans la matrice. Mais là je veux le faire directement sans passer par l'écran.
www.wikio.fr/user1921&info=comments

4

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 ?
avatar
« 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. »

5

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

6

Ben entre un sprite affiché et un sprite non affiché, je ne vois pas la différence.
Et un sprite est un tableau
avatar
« 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. »

7

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

8

Sinon quelqu'un d'autre aurait une idée ?
www.wikio.fr/user1921&info=comments

9

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.
avatar
« 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. »

10

e tableau
En gros :[b]pour[/b] chaque ligne du sprite :
 [b]pour[/b] chaque bit de la ligne :
  [b]si[/b] le bit est armé :
   Mettre 1 dans le tableau
  [b]sinon[/b] :
   mettre 0 dans l
En gros, ton code doit ressembler à ça (j'en ai trop dit scotch).
avatar
« 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. »

11

Merci ! smile
j'en ai trop dit

Non, non ! grin

Il y a un truc que j'ai pas compris : les bits ça se lit comment ?
Parce-que comme je fait là j'en lit 8, mais avec un ?
www.wikio.fr/user1921&info=comments

12

Avec un & (-> doc TIGCC)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

13

Ah, bah je ne le savais pas. Merci bien smile
www.wikio.fr/user1921&info=comments

14

Et là comme ça ça serait bon ? ... parce-que ça ne marche tjrs pas. sad  for(i=0;i<32;i++)  {                                         for(j=0;j<32;j++)       {                                                           if(sprite1[i]&j)                  {                                                picture_1[j][i]=1;                  }                  if(sprite2[i]&j)                  {                                                picture_1[j][i]=2;                  }                  if(sprite1[i]&j &&sprite2[i]&j)                  {                                                picture_1[j][i]=2;                        picture_1[j][i]=1;                  }            }                    }
www.wikio.fr/user1921&info=comments

15

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.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

16

Ok, c'est compris, merci smile
www.wikio.fr/user1921&info=comments

17

Il y a aussi peek_bit qui est interessant, regarde dans la doc de TIGCC.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

18

void bytes_to_bits(long *sprite32 asm("a0"), char *result asm("a1"));

asm("bytes_to_bits:
move.l %d3,-(%a7)
moveq.l #31,%d0
loop1:
move.l (%a0)+,%d2
moveq.l #31,%d1
loop2:
add.l %d2,%d2
scs.b %d3
neg.b %d3
move.b %d3,(%a1)+
dbra.w %d1,loop2
dbra.w %d0,loop1
move.l (%a7)+,%d3
rts");
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

Kevin> roll c'est déjà bien de savoir le faire en C avant d'utiliser une routine en ASM toute faite... Surtout que s'il sait le faire en C, alors il pourra facilement incorporer sa routine de conversion dans la routine de traitement et faire une routine bien plus rapide.

Raphaël> en plus du commentaire de Vertyos, fais très attention avec la priorité de l'opérateur & : celle du C est un peu bizarre, donc il faut impérativement mettre des parenthèses autour du & : il faut écrire if ((x&y) && (x&z)) et pas if (x&y && x&z). Enfin j'ajouterais que la ligne 21 est inutile puisque la ligne 22 efface son effet... Je présume que tu veux faire un '|=' ? (parce qu'autrement ta matrice ne peut pas valoir 2 et 1 à la fois triso)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

20

Au fait, ma routine ne fait que ce qui était spécifié dans le message de départ, c'est-à-dire en blanc et noir. Voilà une version en gris:
void gray_bytes_to_bits(long *sprite32d asm("a0"), long *sprite32l asm("a1"), char *result asm("a2"));

asm("gray_bytes_to_bits:
movem.l %d3-%d5/%a2,-(%a7)
moveq.l #31,%d0
loop1:
move.l (%a0)+,%d2
move.l (%a1)+,%d3
moveq.l #31,%d1
loop2:
add.l %d2,%d2
scs.b %d4
neg.b %d4
add.b %d4,%d4
add.l %d3,%d3
scs.b %d5
neg.b %d5
add.b %d5,%d4
move.b %d4,(%a2)+
dbra.w %d1,loop2
dbra.w %d0,loop1
movem.l (%a7)+,%d3-%d5/%a2
rts");
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

21

Et ma routine en assembleur a de fortes chances d'être à la fois plus petite et plus rapide que sa routine en C.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

Et il a de très bonnes chances de ne rien apprendre en passant roll
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La 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.

23

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

24

1ul<<j
Et pourquoi pas utiliser ma routine en assembleur?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

25

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

26

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

27

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

28

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.
avatar
« 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. »

29

Non là je n'ai pas du tout besoin de vitesse.
www.wikio.fr/user1921&info=comments