Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » symétrie verticale d'un sprite en C
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

symétrie verticale d'un sprite en C

Posté le 28/08/2013 00:11

Salut tout le monde, savez-vous comment faire le symétrique verticale d'un sprite ayant une taille quelconque en C ?


1, 2 Suivante
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 28/08/2013 00:30 | #


j'ai trouvé ca dans les sources de gravity duck, ca pourrait peut-etre intéresser


static void tileset_horizontal_symmetry(Tileset* tileset)
{
    int byte_width, i, x, y;
    unsigned char* line;
    byte_width = (tileset->width-1)/8+1;
    line = malloc(byte_width);
    if(!line) return;
    for(i=0 ; i<tileset->length ; i++) {
        for(y=0 ; y<tileset->height ; y++) {
            memset(line, 0, byte_width);
            for(x=0 ; x<tileset->width ; x++) {
                if(*(tileset->tile[i]+y*byte_width+x/8) & 128>>(x%8))
                    line[(tileset->width-x-1)/8] |= 128>>((tileset->width-x-1)%8);
            }
            memcpy(tileset->tile[i]+y*byte_width, line, byte_width);
        }
    }
    free(line);
}

static void tileset_vertical_symmetry(Tileset* tileset)
{
    int byte_width, i, y;
    unsigned char* line;
    byte_width = (tileset->width-1)/8+1;
    line = malloc(byte_width);
    if(!line) return;
    for(i=0 ; i<tileset->length ; i++) {
        for(y=0 ; y<tileset->height/2 ; y++) {
            memcpy(line, tileset->tile[i]+y*byte_width, byte_width);
            memcpy(tileset->tile[i]+y*byte_width, tileset->tile[i]+(tileset->height-1-y)*byte_width, byte_width);
            memcpy(tileset->tile[i]+(tileset->height-1-y)*byte_width, line, byte_width);
        }
    }
    free(line);
}

Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/08/2013 00:43 | #


C'était justement ce que j'étais en train de regarder
Mais je n'arrive pas l'appliquer à mon projet, j'aimerais que ça me renvoie juste le sprite inversé, mais là ça renvoie rien et j'ai l'impression que ça modifie celui que je pourrais mettre en arguement.
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 28/08/2013 11:48 | #


Tu peux faire 2 sprites, ça prend 3 secondes d'inverser avec paint et coder avec sprite coder.
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 28/08/2013 12:58 | #


ben le probleme c'est que si tu as beaucoup de sprites, c'est assez long a faire et ca prend 2* plus de place que de faire une fonction qui inverse le sprite
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/08/2013 13:03 | #


Oui surtout que en plus j'ai un masque pour chaque sprite, c'est juste embêtant. Mais si personne n'a de solutions, alors je vais faire comme ça :/
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 28/08/2013 16:46 | #


j'avais fait une formule pour des sprites de 2*2 a maximum 8*8 (écrite sur du papier durant un moment ou je me fessais chier), si tu veux je peux te la passer (a vrai dire, j'avais fait des formules de rotation et de symétrie ce jour là, mais je n'avais pas prévu pour plus large qu'un char).
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/08/2013 16:59 | #


Merci mais mes sprites sont trop grands du coup :/
Pas grave j'ai fait des images symétriques à la main
Al3x Hors ligne Membre Points: 77 Défis: 3 Message

Citer : Posté le 28/08/2013 18:30 | #


Adapte celle-ci, tirée de Orton :


void horizontal_symmetry(unsigned char* destination, unsigned char* source, [purple]int[/purple] width, [purple]int[/purple] height)
{
    [purple]int[/purple] x, y, byte_width = ((width-1)>>3)+1;
    [b][blue]for[/blue][/b](y=[maroon]0[/maroon] ; y<height ; y++) {
        [b][blue]for[/blue][/b](x=[maroon]0[/maroon] ; x<byte_width ; x++) destination[y*byte_width+x] = [maroon]0[/maroon];
        [b][blue]for[/blue][/b](x=[maroon]0[/maroon] ; x<width ; x++) {
            [b][blue]if[/blue][/b](source[y*byte_width+(x>>3)] & (128>>(x&7)))
                destination[y*byte_width+((width-x-1)>>3)] |= [maroon]128[/maroon]>>((width-x-1)&7);
        }
    }
}

Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 28/08/2013 21:01 | #


Ninestar, si tu veux, je peux faire une version pour des Short (16 pixels) ou même des Int (32 pixels)
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/08/2013 21:40 | #


Merci Al3x.
Oui je veux bien une pour les shorts Limachi
Attention c'est pour la symétrie horizontale celle là

Ajouté le 28/08/2013 à 21:43 :
Enfin, non en fait puisque j'ai que des unsigned char. c'est juste que si la largeur c'est 8 alors il suffit d'inverser, mais si c'est 16 alors il faut inverser et inter changer deux char consécutifs en plus
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 28/08/2013 23:14 | #


tu en as besoins quand?
et pour les char que tu transforme en short, il suffit de faire cela:
short_sprite[0]=char_sprite[1]|char_sprite[0]<<8; //non, je n'ai pas interverti les cases
et a la fin
sprite[1]=(unsigned char) short_sprite[0];
sprite[0]=(unsigned char)(short_sprite[0]>>8);

Ajouté le 28/08/2013 à 23:15 :
l'avantage d'utiliser un short est qu'il y a moins de manipulations a faire que si on doit passer par deux char (et la formule est plus propre 8) )
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/08/2013 23:52 | #


J'en ai besoin juste pour l'affichage, pas besoin de le garder.

En gros j'ai mis une condition :
si direction == 1
ML_bmp_or(sprite_d_poissons[1], ...);
si direction == -1
ML_bmp_or(sprite_g_poissons[1], ...);

Il faudrait que ça fasse :
si direction == 1
ML_bmp_or(sprite_poissons[1], ...);
si direction == -1
ML_bmp_or(symetrie_verticale(sprite_poissons[1], largeur, hauteur), ...);

avec largeur = 4 ou 8 et hauteur ce qu'on veut.

sprite_poissons est un tableau de char

Après comment est faite la fonction c'est toi qui vois, moi tant que ça fonctionne c'est bon
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 29/08/2013 00:01 | #


ok, je te ferais cette fonction, je pense que je te la donnerais demain, (ou aujourd'hui, vu qu'on est minuit) cette nuit je ne vais pas coder.
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 29/08/2013 00:20 | #


Ok c'est parfait, merci beaucoup !
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 29/08/2013 00:33 | #


poste la aussi sur ce topic, au cas ou quelqu'un en aurait besoin
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 29/08/2013 22:43 | #


J'ai etrouvé ma formule, voici ce que ça donne en pseudo C-Mathématique:

A=0   i=0
S[A] = Σ|   ((T[A]&(1<<(M-i)))>>(2*(M/2-i)))
A→M   i→M


et donc en c, je le traduis en:

void symetrie_verticale(unsigned [purple]char[/purple] *sprite, [purple]int[/purple] width, [purple]int[/purple] height)
{
   [purple]unsigned int[/purple] tmpIn,tmpOut;
   [purple]int[/purple] x,y,i;

   [b][blue]for[/blue][/b](y=[maroon]0[/maroon];y<height;++y)
   {
[green]//ces 4 [b][blue]if[/blue][/b] peuvent être optimisés, mais j'ai eut la flemme de le faire[/green]
      [b][blue]if[/blue][/b](width<=[maroon]8[/maroon]) tmpIn=sprite[y];
      [b][blue]if[/blue][/b](width<=[maroon]16[/maroon]&&width>8) tmpIn=sprite[2*y]<<8|sprite[2*y+1];
      [b][blue]if[/blue][/b](width<=[maroon]24[/maroon]&&width>16) tmpIn=sprite[3*y]<<16|sprite[3*y+1]<<8|sprite[3*y+2];
      [b][blue]if[/blue][/b](width>24) tmpIn=sprite[4*y]<<24|sprite[4*y+1]<<16|sprite[4*y+2]<<8|sprite[4*y+3];

      tmpOut=[maroon]0[/maroon];

      [b][blue]for[/blue][/b](x=[maroon]0[/maroon];x<width;++x)
      {
         tmpOut|=(tmpIn&(1<<(width-x)))>>(2*(width/2-i)));
      }

[green]//de même ici les If aurraient pu être simplifiés[/green]
      [b][blue]if[/blue][/b](width<=[maroon]8[/maroon]) sprite[y]=tmpOut;
      [b][blue]if[/blue][/b](width<=[maroon]16[/maroon]&&width>8) {sprite[y*2]=tmpOut>>8;sprite[y*2+1]=(unsigned char)tmpOut};
      [b][blue]if[/blue][/b](width<=[maroon]24[/maroon]&&width>16) {sprite[y*3]=tmpOut>>16;sprite[y*3+1]=(unsigne char)tmpOut>>8;sprite[y*3+2]=(unsigned char)tmpOut};
      [b][blue]if[/blue][/b](width>24) {sprite[y*4]=tmpOut>>24;(unsigne char)sprite[y*4+1]=tmpOut>>16;sprite[y*4+2]=(unsigne char)tmpOut>>8;sprite[y*4+3]=(unsigned char)tmpOut};

   }
}


j'ai écrit cette fonction en direct, je ne l'ai pas testée, dis moi si il y a des problèmes.
(de toute façon, je vais faire des formules de rotation et de symétrie dans ma Lib graphique, je vais sans doute refaire une nouvelle version de cette formule)
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 29/08/2013 23:06 | #


Merci, cependant la code ne fait rien :/
Il faudrait qu'il me renvoie un unsigned char*
J'ai corrigé les diverses erreurs de syntaxes qui trainaient (unsigne au lieu de unsigned ...)
void symetrie_verticale(unsigned [purple]char[/purple] *sprite, [purple]int[/purple] width, [purple]int[/purple] height)
{
   [purple]unsigned int[/purple] tmpIn,tmpOut;
   [purple]int[/purple] x,y,i;

   [b][blue]for[/blue][/b](y=[maroon]0[/maroon];y<height;++y)
   {
[green]//ces 4 [b][blue]if[/blue][/b] peuvent être optimisés, mais j'ai eut la flemme de le faire[/green]
      [b][blue]if[/blue][/b](width<=[maroon]8[/maroon]) tmpIn=sprite[y];
      [b][blue]if[/blue][/b](width<=[maroon]16[/maroon]&&width>8) tmpIn=sprite[2*y]<<8|sprite[2*y+1];
      [b][blue]if[/blue][/b](width<=[maroon]24[/maroon]&&width>16) tmpIn=sprite[3*y]<<16|sprite[3*y+1]<<8|sprite[3*y+2];
      [b][blue]if[/blue][/b](width>24) tmpIn=sprite[4*y]<<24|sprite[4*y+1]<<16|sprite[4*y+2]<<8|sprite[4*y+3];

      tmpOut=[maroon]0[/maroon];

      [b][blue]for[/blue][/b](x=[maroon]0[/maroon];x<width;++x)
      {
         tmpOut|=(tmpIn&(1<<(width-x)))>>(2*(width/2-i));
      }

[green]//de même ici les If aurraient pu être simplifiés[/green]
      [b][blue]if[/blue][/b](width<=[maroon]8[/maroon]) sprite[y]=tmpOut;
      [b][blue]if[/blue][/b](width<=[maroon]16[/maroon]&&width>8) {sprite[y*2]=tmpOut>>8;sprite[y*2+1]=(unsigned char)tmpOut;}
      [b][blue]if[/blue][/b](width<=[maroon]24[/maroon]&&width>16) {sprite[y*3]=tmpOut>>16;sprite[y*3+1]=(unsigned char)tmpOut>>8; sprite[y*3+2]=(unsigned char)tmpOut;}
      [b][blue]if[/blue][/b](width>24) {sprite[y*4]=tmpOut>>24;(unsigned char)sprite[y*4+1]=tmpOut>>16;sprite[y*4+2]=(unsigned char)tmpOut>>8;sprite[y*4+3]=(unsigned char)tmpOut;}

   }
}


Ajouté le 29/08/2013 à 23:13 :
D'ailleurs il existe une astuce pour remplir un tableau avec des valeurs choisies ?
Par exemple pouvoir faire comme à l'initialisation.
int tab[] = {1,2,3}
Parce que faire plus tard
tab[] = {1,2,3}
ça fonctionne pas :/
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 29/08/2013 23:23 | #


j'ai deja essayé, non (au vu de mes connaissance, donc peut-etre)
mais si tu es en C++, tu peut faire

int tableau[20];

//code inutile

int tableauTemp[20]={1,2,3,4};

for(int a =0;a<20;a++)tableau[a]=tableauTemp[a]

Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 30/08/2013 00:28 | #


a, pardon, il devait te renvoyer un tableau? bon, je te fais la modif qui permet de l'utiliser correctement alors:

unsigned char* symetrie_verticale(unsigned [purple]char[/purple] *sprite, [purple]int[/purple] width, [purple]int[/purple] height)
{
   [purple]unsigned int[/purple] tmpIn,tmpOut;
   [purple]unsigned char[/purple] *out;
   [purple]int[/purple] x,y,i;

   out=(unsigned char*)malloc(height*(width>>8));

   [b][blue]for[/blue][/b](y=[maroon]0[/maroon];y<height;++y)
   {
[green]//ces 4 [b][blue]if[/blue][/b] peuvent être optimisés, mais j'ai eut la flemme de le faire[/green]
      [b][blue]if[/blue][/b](width<=[maroon]8[/maroon]) tmpIn=sprite[y];
      [b][blue]if[/blue][/b](width<=[maroon]16[/maroon]&&width>8) tmpIn=sprite[2*y]<<8|sprite[2*y+1];
      [b][blue]if[/blue][/b](width<=[maroon]24[/maroon]&&width>16) tmpIn=sprite[3*y]<<16|sprite[3*y+1]<<8|sprite[3*y+2];
      [b][blue]if[/blue][/b](width>24) tmpIn=sprite[4*y]<<24|sprite[4*y+1]<<16|sprite[4*y+2]<<8|sprite[4*y+3];

      tmpOut=[maroon]0[/maroon];

      [b][blue]for[/blue][/b](x=[maroon]0[/maroon];x<width;++x)
      {
         tmpOut|=(tmpIn&(1<<(width-x)))>>(2*(width/2-i));
      }

[green]//de même ici les If aurraient pu être simplifiés[/green]
      [b][blue]if[/blue][/b](width<=[maroon]8[/maroon]) out[y]=tmpOut;
      [b][blue]if[/blue][/b](width<=[maroon]16[/maroon]&&width>8) {out[y*2]=tmpOut>>8;out[y*2+1]=(unsigned char)tmpOut;}
      [b][blue]if[/blue][/b](width<=[maroon]24[/maroon]&&width>16) {out[y*3]=tmpOut>>16;out[y*3+1]=(unsigned char)tmpOut>>8; out[y*3+2]=(unsigned char)tmpOut;}
      [b][blue]if[/blue][/b](width>24) {out[y*4]=tmpOut>>24;(unsigned char)out[y*4+1]=tmpOut>>16;out[y*4+2]=(unsigned char)tmpOut>>8;out[y*4+3]=(unsigned char)tmpOut;}

   }

   [b][blue]return[/blue][/b] out;
}

la version précédente modifiait directement le sprite, celle-ci crée un nouveau sprite inversé horizontalement du sprite entré en param.

Et oui, il est possible de modifier de manière brute le contenu d'un tableau avec des memcpy() (fonction de je ne sais plus quelle lib, une des disponibles dans le SDK de casio) qui permet de copier rapidement des zones de mémoire. Si tu as besoins d'un exemple, je t'en trouverais un.
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 30/08/2013 00:48 | #


memcpy est dans "string.h"

je l'utilise pour les fond d'écrans :

unsigned char fond[] = {0x42, ...};
memcpy(ML_vram_adress(), fond, 1024);
ML_display_vram();

ce qui est bien plus rapide que ML_bmp_or(fond, 0, 0, 128, 64)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 44 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd