:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Développement Amateur :: > Aide au développement

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 26/09/2006, 17h00   #1
zeb
 
Messages: n/a
Par défaut probleme de sprite

Bonjour, étant nouveau je vais commencer par me présenter
Donc moi c zeb, je commence dans le developpement DS : je me suis pour l'instant contenté de faire un pong (et oui faut bien commencer par le plus simple lol), pas de PAlib, je me suis inscrit ici car cette communauté a l'air d'etre active et voila je crois que c'est tout.

Mon probleme est le suivant :

Quand je veux mettre juste 1 sprite depuis un .pcx (64x64, 256 couleurs) ca marche tres bien
voila le code utilisé :

-------------------------------
SpriteEntry sprite[128];

sImage img;
loadPCX((u8*)img_pcx, &img);
imageTileData(&img);

int i;
for(i = 0; i < 32*64; i++)
SPRITE_GFX_SUB[i] = img.data16[i];
for(i = 0; i < 256; i++)
SPRITE_PALETTE_SUB[i] = img.palette[i];

sprite[0].attribute[0] = ATTR0_COLOR_256 | ATTR0_SQUARE | 0;
sprite[0].attribute[1] = ATTR1_SIZE_64 | 0;
sprite[0].attribute[2] = 0;
sprite[0].attribute[3] = 0;
-------------------------------

Par contre pour en mettre un deuxieme j'ai un souci. Plus précisément au niveau de la palette.
Pour SPRITE_GFX_SUB il suffit lors de la boucle for d'écrire SPRITE_GFX_SUB[i+32*64] = ...
et de donner comme valeur : sprite[1].attribute[2] = 128;
(et évidemment de ne pas superposer les 2 donc changer la valeur de x ou y)
Ca, ca marche.

ca nous donne donc comme code :

-------------------------------
sImage img1;
loadPCX((u8*)img1_pcx, &img1);
imageTileData(&img1);

int i;
for(i = 0; i < 32*64; i++)
SPRITE_GFX_SUB[i+32*64] = img1.data16[i];
for(i = 0; i < 256; i++)
SPRITE_PALETTE_SUB[i] = img1.palette[i];

sprite[0].attribute[0] = ATTR0_COLOR_256 | ATTR0_SQUARE | 100; //changement de valeur pour y
sprite[0].attribute[1] = ATTR1_SIZE_64 | 0;
sprite[0].attribute[2] = 128;
sprite[0].attribute[3] = 0;
-------------------------------


J'ai donc essayer de calquer ce que je faisais avec SPRITE_GFX_SUB pour SPRITE_PALETTE_SUB mais ca ne marche pas, ca met bien une image de la bonne taille au bon endroit mais pour les couleurs c'est n'importe quoi.

Donc si qqun a une réponse a mon probleme, j'en serais tres heureux

Dernière modification par M@cZér0 ; 26/09/2007 à 18h06.
  Réponse avec citation

Publicité

Vieux 26/09/2006, 18h27   #2
Pitt
Membre confirmé
 
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
Par défaut

Salut ! Tiens un codeur qui n'utilise pas PAlib ! Ca devient rare !
Je pense que ton problème vient du fait que tu écrases ta 1ère palette avec la 2ème ; donne-nous le code complet pour qu'on y voit plus clair.

EDIT : dans le code qui est au dessus, tu as utilisé des "sprite [0]" !? Il faut utiliser un autre sprite sinon ça va pas fonctionner ...
__________________
Utiliser la libnds ?
What's it ?

Dernière modification par Pitt ; 26/09/2006 à 18h30.
Pitt est déconnecté   Réponse avec citation
Vieux 26/09/2006, 19h07   #3
zeb
 
Messages: n/a
Par défaut

Citation:
Envoyé par Pitt
Je pense que ton problème vient du fait que tu écrases ta 1ère palette avec la 2ème ; donne-nous le code complet pour qu'on y voit plus clair.
oui je pense aussi que ca l'ecrase c'est pour ca que j'avais essayer d'ecrire :

for(i = 0; i < 256; i++)
SPRITE_PALETTE_SUB[i+256] = img1.palette[i];

En faisant ca, ca n'ecrasais pas la palette de la premiere image (sprite[0]) qui s'affichait donc correctement mais je ne sais pas comment "dire" a la 2e image (sprite[1]) qu'il faut utiliser la palette allant de SPRITE_PALETTE_SUB[256] a SPRITE_PALETTE_SUB[256*2].
(a moins qu'il faille faire autrement)

Citation:
Envoyé par Pitt
dans le code qui est au dessus, tu as utilisé des "sprite [0]" !? Il faut utiliser un autre sprite sinon ça va pas fonctionner ...
Non jme suis trompé, pour aller plus vite j'ai fait un copier/coller a partir du 1er exemple et puis j'ai oublié de changer le nom du sprite. Donc en fait pour "img1" il faut mettre sprite[1] a la place de sprite[0].

Bref ca donne sans erreur (pour y voir plus clair) :

-------------------------------
SpriteEntry sprite[128];

sImage img;
loadPCX((u8*)img_pcx, &img);
imageTileData(&img);

int i;
for(i = 0; i < 32*64; i++)
SPRITE_GFX_SUB[i] = img.data16[i];
for(i = 0; i < 256; i++)
SPRITE_PALETTE_SUB[i] = img.palette[i];

sprite[0].attribute[0] = ATTR0_COLOR_256 | ATTR0_SQUARE | 0;
sprite[0].attribute[1] = ATTR1_SIZE_64 | 0;
sprite[0].attribute[2] = 0;
sprite[0].attribute[3] = 0;

sImage img1;
loadPCX((u8*)img1_pcx, &img1);
imageTileData(&img1);

int i;
for(i = 0; i < 32*64; i++)
SPRITE_GFX_SUB[i+32*64] = img1.data16[i];
for(i = 0; i < 256; i++)
SPRITE_PALETTE_SUB[i] = img1.palette[i]; // -> avec ca:c'est la 1ere image qui foire
/* ou bien SPRITE_PALETTE_SUB[i+256] = ... -> avec ca:c'est la 2e*/

sprite[1].attribute[0] = ATTR0_COLOR_256 | ATTR0_SQUARE | 100; //changement de valeur pour y
sprite[1].attribute[1] = ATTR1_SIZE_64 | 0;
sprite[1].attribute[2] = 128;
sprite[1].attribute[3] = 0;
-------------------------------
  Réponse avec citation
Vieux 26/09/2006, 19h11   #4
Mollusk
Membre confirmé
 
Date d'inscription: 10/11/2005
Messages: 1 037
Par défaut

Par défaut, tu n'as qu'une palette pour tous les sprites d'un écran donné... Donc il faut que tes sprites utilisent la meme palette, ce qui implique (il me semble) un pré-formattage/pré-conversion avant d'inclure dans ta rom...

Si tu veux convertir du format PCX à un format DS-friendly (pour ainsi dire), il faudra te rabattre sur gfx2gba (qui ne fait pas que de la gba...), GBAGraphics (qui porte mal son nom, en fait, lui aussi ), ou PAGfx (qui n'est pas fait que pour PAlib)...

Si tu veux conserver tes fichiers PCX, comme je n'ai jamais utilisé ce format je ne saurai pas te conseiller, désolé !

Après, il existe une méthode pour avoir en fait 16 palettes de 256 couleurs (le mode palettes étendues), mais là tout de suite de tete je vais avoir du mal à te refiler du code :s

Citation:
Salut ! Tiens un codeur qui n'utilise pas PAlib ! Ca devient rare !
C'est clair Mais il en faut aussi, courage
Mollusk est déconnecté   Réponse avec citation
Vieux 26/09/2006, 19h16   #5
Pitt
Membre confirmé
 
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
Par défaut

Bon bah j'ai été grillé Utilise GBAGraphics : ça te simplifiera bien la vie !
Bonne prog !
__________________
Utiliser la libnds ?
What's it ?
Pitt est déconnecté   Réponse avec citation
Vieux 26/09/2006, 23h41   #6
zeb
 
Messages: n/a
Par défaut

ok merci beaucoup je vais essayer tout ca
  Réponse avec citation
Vieux 27/09/2006, 13h46   #7
zeb
 
Messages: n/a
Par défaut

Tout ca a encore soulevé une ou deux interrogations :

- avec GBA Graphics, ca me crée les 3 fichiers pour la map, les tiles et la palette, mais je les utilise comment? En cherchant, j'ai vu que y'avait un prog (all.exe) qui les compilaient en un .h mais le lien ne marche pas
(et a propos de gbagraphics, pour 'type de map' il faut choisir 8/16/32 bits?)

- sinon j'ai essayé avec le mode palette étendue, donc pour ca j'ai ajouté une vram (a savoir VRAM_I_SUB_SPRITE_EXT_PALETTE), un flag dans SUB_DISPLAY_CR (qui est : DISPLAY_SPR_EXT_PALETTE) et mit dans sprite.attribute[2] le flag ATTR2_PALETTE(n) ou j'ai essayé toutes les valeurs de n possibles (donc 0 a 15) sans succes non plus lol

Donc si qqun pouvait m'aider, que j'en finisse avec ces problemes de sprite et que je puisse m'attaquer a des choses plus interressantes! lol
merci

[EDIT] bah pour ce qui est de GBAgraphics, probleme résolu (d'ailleurs c'est tellement simple a utiliser que je ne comprends pas pourquoi j'ai pas trouvé tout de suite :/ )
pour les palettes étendues, je peux faire sans mais bon par curiosité ...

Dernière modification par zeb ; 28/09/2006 à 11h45.
  Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h46.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince