J'essaie de faire en sorte que mes ennemis dans mon jeu soient triés dans un vecteur dans l'ordre de la distance du joueur et donc j'utilise la fonction de tri. Évidemment, mes ennemis sont des objets, donc le prédicat de base ne suffit pas et je dois faire ma propre fonction, alors je l'ai fait.STL Trier l'utilisation de la fonction statique
Cependant, ces fonctions doivent être statiques, et ainsi, comment, dans cette fonction, puis-je comparer la distance entre l'ennemi et le joueur?
double World::getPlayerDistance(Entity* enemy){
int xDistance = enemy->m_xValue - m_pPlayer->m_xValue;
int yDistance = enemy->m_yValue - m_pPlayer->m_yValue;
double dist = sqrt(pow((double)xDistance, 2) + pow((double)yDistance, 2));
return dist;
}
Ceci est le code que je suis en train d'utiliser, mais comme il est une fonction statique (définie statique dans l'en-tête), il n'a pas accès aux variables membres et les indications suivantes ne fonctionne pas:
bool World::sortXDistance(Entity *i, Entity *j) {
return (getPlayerDistance(i) < getPlayerDistance(j));
}
(également défini statique en-tête) Ceci est destiné à être utilisé avec la STL de tri avec un vecteur.
J'ai essayé de googler, mais perhps je ne reconnais même pas le vrai problème, donc toute aide serait appréciée, ou une autre façon de le faire serait considérée. Merci d'avance :)
Donc en faire un membre statique de classe fn? ou mieux encore, un foncteur de niveau classe qui sera probablement intégré. Ou peut-être faire du monde un ami de l'ennemi? (Et ces pointeurs bruts dans ce vecteur devraient faire peur). – WhozCraig
Pourriez-vous expliquer un peu plus en profondeur? :) Je serai de retour demain, (j'ai déjà passé trop de temps sur ça) mais je vais certainement y jeter un coup d'oeil :) –