if(!projectiles.empty()){
sort(projectiles.rbegin(), projectiles.rend()); //Occasionally I get bad sort error. No idea why.
}
снаряды — это std::vector, полный структур снарядов. Они добавляются каждый кадр, если выполняется команда «огонь», и автоматически удаляются каждый кадр, если истекает время ожидания.
В снаряде:
bool operator < (const projectile& proj) const
{
return (D3DXVec3Dot(&pos, p_camera.GetWorldAhead()) < D3DXVec3Dot(&proj.pos, p_camera.GetWorldAhead()));
}
... pos - это D3DXVECTOR3 с позицией снаряда в трехмерном пространстве - это работает (сортировка предназначена для проверки глубины при альфа-смешении). Для тех, кому интересно, D3DXVec3Dot возвращает число с плавающей запятой. Но изредка, особенно при большом количестве снарядов на экране, выкидывает:
Ошибка утверждения отладки!
Программа: C:\Windows\system32\MSVCP110D.dll Файл: e:\applications\vc\include\algorithm Строка: 3566
Выражение: неверный оператор‹
Сведения о том, как ваша программа может привести к ошибке утверждения, см. в документации Visual C++ по утверждениям.
Не уверен, почему. Любая помощь горячо приветствуется.
D3DXVec3Dot
иp_camera.GetWorldAhead()
кажутся созревшими для проблем. Пол прав, когда спрашивает о многопоточности. Похоже, вы хотите вычислить эти значения один раз и как-то отсортировать по прокси. (В Perl это называется преобразованием Шварца.) - person Joe Z   schedule 05.07.2013