Bon ben j'ai, grâce à votre aide, résolu mon problème.
Voilà la solution pour les intéréssés :
Il faut déclarer les Npcs non pas dans un tableau mais dans un vector :
vector<Npc *> m_npc;
Pour initialiser chaque Npc, je fait :
for(int i = 0; i < MAXNPCS; i++)
{ Npc *npc_m = new Npc();
m_npc.push_back(npc_m);
m_npc[i]->initNpc();
}
Ensuite, dans la classe Npc, j'ai ajouté cette fonction membre :
déclaration dans npc.h:
static bool estDerriere(Npc *npc1, Npc *npc2);
dans npc.cpp :
bool Npc::estDerriere(Npc *npc1, Npc *npc2)
{ return npc1->m_inf.m_y < npc2->m_inf.m_y;
}
Enfin, avant de dessiner les Npc à l'écran, j'appel :
sort(m_npc.begin(), m_npc.end(), Npc::estDerriere);
Ce qui à pour effet de trier mon vecteur !
Par contre j'ai une dernière question. Quand je fait un push_back(npc_m), l'objet pointé par npc_m (donc une instance de Npc) est "recopié" dans le vecteur ou celui-ci contient juste l'adresse du pointeur ? Parce que je voudrais savoir si il faut à un moment ou un autre que je vide npc_m avec un delete.
Voilà, merci à tous :)