Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [C]Rassembler un grand nombre de sprites
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

[C]Rassembler un grand nombre de sprites

Posté le 24/04/2015 19:21

Salut à tous je recherche une méthode si elle existe pour créer un grand tableau (en C ) qui comprendrait mes 352 sprites de persos (quand je dis beaucoup, c'est VRAIMENT beaucoup ) en local autrement qu'en modifiant 1 à 1 toutes les "cases" d'un grand tableau. Si quelqu'un pouvait me donner un coup de main afin de les transférer dans un tableau en 2 dimensions (je sais pas si en C on peux appeler ça une matrice ) du genre personnage[352][je_sais_pas_quoi_mettre_ici]={perso1_1, perso1_2............}; je lui en serais reconnaissant
Merci de votre aide


-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 24/04/2015 19:32 | #


avec Sprite Coder tu peux le faire

tu as le code des images d'un coté et dans un autre tableau juste le nom des images
In Arch, I trust ! And you ?
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 24/04/2015 19:33 | #


Déjà est-ce que tes sprites font la même taille ? si oui, tu peux utiliser une structure ce qui te simplifierait grandement la tache !
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 24/04/2015 19:44 | #


Oui ils font la meme taille et non sprite coder ne fais pas ce que je veux j'ai vérifié il te sort un truc qui marche qu'en global
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 24/04/2015 21:58 | #


Si ils font tous la même taille il te faut le tableau suivant :
const unsigned char sprites[nb_sprites][taille_sprite] = {
{ ... },
{ ... },
...
};

Le nombre de sprites est optionnel mais pas la taille individuelle.

Si tu as un bon éditeur de texte tu mets tous tes sprites en ligne :
const unsigned char sprite1 = { sprite1... };
const unsigned char sprite2 = { sprite2... };
const unsigned char sprite3 = { sprite3... };
...

En un tour de main tu obtiens :
{ sprite1... },
{ sprite2... },
{ sprite3... }

Et c'est fini, il ne te reste plus qu'à mettre une ligne la définition pour ton grand tableau ainsi qu'une accolade fermante à la fin.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 24/04/2015 22:23 | #


A cool merci mais comment puis-je obtenir la taille de mes sprites ? (Je crois quils font 19*18 ) (la méthode detaille si possible car je me trompe peut etre
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 24/04/2015 22:47 | #


Alors ... si ils font 19*18 ... reglechissons ... un char = 1 octets ... donc logiquement ... mais oui ! Peut être que la taille c'est 19*18
1337
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 24/04/2015 23:04 | #


mdr merci (mais dois-je faire 19*18 * les 352 sprites ? il me semble que non mais bon )
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 25/04/2015 10:34 | #


19*18=342 pixels; 8 pixels sont stockés sur 1 octet.
Donc 342/8=42,75. Euh, personnellement je préfère quand le nombre de pixels est un multiple de 8 mais bon.
Ça te fait donc 43 octets par sprite.
Ton tableau aura cette forme:
const unsigned char persos[352][43]={{perso1}, {perso2}, {perso3}, ..., {perso352}};


Et pour accéder au perso n:
persos[n]
Par exemple.

Pareil pour afficher un perso avec ML:
ML_bmp_or(persos[n], x, y,19,18);
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 25/04/2015 10:45 | #


Au temps pour moi.
1337
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 25/04/2015 11:38 | #


mais utilisez les pointeurs

ML_bmp_or(*(perso+n), x, y,19,18);


ça ne change pas grand chose
In Arch, I trust ! And you ?
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 25/04/2015 11:52 | #


@alpha merci mais si un octet contient 8 pixels pourquoi fais tu 352/4 ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 25/04/2015 12:32 | #


Sinon tu fais un grand tableau en accolant tous les sprites (équivalent image verticale) et tu y accèdes comme ça :
ML_bmp(sprites+id*taille_sprite);
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 25/04/2015 13:05 | #


Erreur de frappe, c'est bien 342/8=42,75 , autant pour moi
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 25/04/2015 15:54 | #


@Lephe ca marche vraiment ca ? et tu me rassures vraiment alpha je croyais que j'avais rien compris du tout
Du coup je ne sais pas trop quelle méthode faire, vu que j'ai deja découpé 264 sprites je vais sans doute faire la méthode l'alpha mais dans le cas contraire existe-t-il une méthode simple pour faire une image verticale de sprites découpés au préalable ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 25/04/2015 16:48 | #


Ben, tu fais pareil mais au lieu d'avoir un tableau de sprites ( T tab[][n] = { {...}, {...}, ... }; ), tu as un seul tableau (un grand sprite) ( T tab[] = { ... }; ) dans lequel tu mets les données bout à bout, et après tu décales le pointeur.

Évidemment que ça marche ! Je ne vois même pas pourquoi tu en doutes.
Dark storm En ligne Labélisateur Points: 11542 Défis: 176 Message

Citer : Posté le 25/04/2015 17:42 | #


D'ailleurs, c'est comme ça que j'ai fait dans Arcuz pour le tilemap
Et en plus, ça ne me fait qu'une seule image très haute, donc gain de lisibilité dans le code. Bon après je l'ai mise en BMP, mais c'est une autre histoire.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 25/04/2015 17:42 | #


Alala si le grand lephe l'a dit comment ais je pu en douter
ok donc merci de vos deux réponses je vais voir

Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 25/04/2015 19:27 | #


Dark storm a écrit :
Et en plus, ça ne me fait qu'une seule image très haute, donc gain de lisibilité dans le code. Bon après je l'ai mise en BMP, mais c'est une autre histoire.

Et pour le stade suivant t'as l'intégration des fichiers ressources, le moment à partir duquel les ressources sont déjà chargées au début de l'exécution !

Ceci n'était pas de la pub.
Dark storm En ligne Labélisateur Points: 11542 Défis: 176 Message

Citer : Posté le 26/04/2015 09:45 | #


Sauf que là, le passage par GCC est obligatoire
Bon, c'est pas forcément une mauvaise chose, mais voilà
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 26/04/2015 10:57 | #


Ben, pas vraiment, non. Si t'as le fichier objet tu dois pouvoir le linker même avec le compilateur du SDK (par contre bonjour le bordel pour modifier le script de compilation qui se re-génère à chaque fois).

Bref, arrêtons ce HS.

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 68 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