Я пытаюсь сделать так, чтобы мои враги в моей игре сортировались в векторе по порядку расстояния от игрока, и поэтому я использую функцию сортировки. Очевидно, мои враги - это объекты, поэтому основного предиката недостаточно, и я должен сделать свою собственную функцию, поэтому я и сделал.STL Сортировка статической функции
Однако эти функции должны быть статическими, и поэтому, как в этой функции я могу сравнить расстояние между противником и игроком?
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;
}
Это код, который я пытаюсь использовать, но, как это статическая функция (определенная статическая в заголовке) он не имеет доступа к переменным-членам и поэтому следующий не работает:
bool World::sortXDistance(Entity *i, Entity *j) {
return (getPlayerDistance(i) < getPlayerDistance(j));
}
(Также определено статическое содержимое в заголовке). Это используется для сортировки STL с помощью вектора.
Я пробовал поиск по всему миру, но perhps Я даже не признаю истинную проблему, поэтому любая помощь будет оценена, или альтернативный способ сделать это будет рассмотрен. Заранее спасибо :)
Так что сделайте его классом-статическим членом fn? или еще лучше, класс-функтор, который, вероятно, будет встроен. Или, может быть, сделать World другом Enemy? (И эти необработанные указатели в этом векторе должны быть страшными). – WhozCraig
Не могли бы вы объяснить немного более глубокое? :) Я вернусь завтра, (я слишком долго трачу на это), но я обязательно посмотрю на это :) –