PDA

Voir la version complète : [NDS][Aide] Problème Pointeur de Structure


BennyRebirth
23/03/2006, 15h35
Salut a tous :)
Je continue à bosser lentement mais surment sur mon petit moteur de RPG DS, j'aurai j'espère bientot l'ocaz de vous balancer une nouvelle petite démo, mais pour le moment impossible a cause d'un petit problème que je n'arrive pas a résoudre grrr

J'ai créer une fonction LoadLevel qui est sencé me charger le BG1 , 2 , la Maps de collision.... enfin en gros charger une maps!
Une map qui sera créer avec la structure MAP , ici c'est "Village" qui doit etre charger
J'optiens aucune erreur de compilation mais écran noir :( rien ne s'affichage mais le jeux ne freeze pas, il y a juste un problème au niveau de mon pointeur de structure a mon avis.

J'ai biensur vérifier si mes fonctions RefreshMap et PA_LoadChipset fonctionnaient correctement.
Tout fonctionne bien si je les utilisent sans pointeur :
Exemple :

RefreshMap(*MaisonLvl1_map,*Cave1Lvl1BG2_map,*Mais onLvl1Col_map,35,35,1,1);

PA_LoadChipset(InHouse_palette,InHouse1_tiles);

Mais avec ma fonction loadlevel rien ne s'affiche :(

Voici les bouts de codes dont je supose vous aurez besoin , please help

///////// Dans mon Main /////////////////////

typedef struct
{
unsigned short *MapsBg1;
unsigned short *MapsBg2;
u16 *CollisionMaps;
unsigned char *TileSet;
unsigned short *Palette;
u16 TailleX;
u16 TailleY;
u8 NbEvenement;
EVENT Evenement[50];
}MAP;

MAP Village={(unsigned short *)Village11_map,(unsigned short *)Village11BG2_map,(unsigned short *)Village11Col_map,(unsigned char *)Exterrieur1_tiles,(unsigned short *)Exterrieur1_palette,80,80,0};

LoadLevel(&Village);

///////////////////Dans un autre fichier///////////////////////////////////////////

void LoadLevel(MAP* pDoublet)
{

//pDoublet = (MAP*) malloc (sizeof (MAP));

PA_LoadChipset(pDoublet->Palette,pDoublet->TileSet);

RefreshMap(pDoublet->MapsBg1,pDoublet->MapsBg2,pDoublet->CollisionMaps,pDoublet->TailleX,pDoublet->TailleY,1,1);

AnimSpr();

FadeIn();

}

void RefreshMap(const usigned short *maps,const unsigned short *maps2,const unsigned short *maps3,u16 taillex, u16 tailley,u8 fade,u8 search)



Merci d'avance :)

Alekmaul
23/03/2006, 17h12
Ce n'est pas plutôt directement LoadLevel(Map) sans le & ?

BennyRebirth
23/03/2006, 17h32
error: incompatible type for argument 1 of 'LoadLevel'

Quand je retire le "&"

Alekmaul
23/03/2006, 17h33
Et bien, tu a testé un LoadLevel((MAP *) Village) ?

BennyRebirth
23/03/2006, 17h35
error: cannot convert to a pointer type

:( arggggggg :(

Alekmaul
23/03/2006, 17h36
et avé le (MAP *) &Village ?

BennyRebirth
23/03/2006, 17h40
aucune erreur de compil mais toujours écran noir :(

Alekmaul
23/03/2006, 17h42
Ce qui peut paraitre normal car c'est le même appel que si tu n'avez rien entré.
Ce qui m'amènre à penser que le pb est peut être plutôt sur le RefreshMap(pDoublet->MapsBg1,pDoublet->MapsBg2,pDoublet->CollisionMaps,pDoublet->TailleX,pDoublet->TailleY,1,1);
Quel est le prototype de cette fonction ?

Dr.Vince
23/03/2006, 17h47
essaye ça peut être :

MAP Village={(void*)&Village11_map,(void*)&Village11BG2_map,......


[EDIT] t'es pas obligé de mettre les void, tu peux laisser le vrai type

BennyRebirth
23/03/2006, 17h53
void RefreshMap(const usigned short *maps,const unsigned short *maps2,const unsigned short *maps3,u16 taillex, u16 tailley,u8 fade,u8 search)

pour Alekmaul

Sinon pour Dr.Vince jviens d'essayer mais toujours écran noir :(

Dr.Vince
23/03/2006, 18h09
et avec ça :

PA_LoadChipset(*(pDoublet->Palette),*(pDoublet->TileSet));


je sais pas trop si la syntaxe est correct mais l'idée est là :
pDoublet est un pointeur.
Donc pDoublet->Palette, tu obtiens donc un pointeur également d'après la définition de ta structure.
Donc tu rajoute un * pour avoir la donnée, car d'après les premières lignes du code qui marche ça ne prend pas un pointeur mais des données

je sais pas trop si ce que je dis est correct mais bon tu peux essayer

[EDIT]

faut que tu conserve aussi la première modife que je t'ai donné
car pareil, il me semble :

t'as structure prend un pointeur et toi tu lui passe juste les données castées en pointeurs.
Il faut donc que tu file en faite l'adresse de tes données (&) pour obtenir un pointeur

Nesgba
23/03/2006, 19h03
void RefreshMap(const unsigned short *maps,const unsigned short *maps2,const unsigned short *maps3,u16 taillex, u16 tailley,u8 fade,u8 search)

pour Alekmaul

Sinon pour Dr.Vince jviens d'essayer mais toujours écran noir :(

essaye de virer les const voir.

BennyRebirth
24/03/2006, 17h42
Merci a tous ;) j'ai abandonné cette idée, jvé refaire pas mal de chose dans mon moteur de RPG, jvé tanter d'integré LUA :p
héhé , merci quand même :)