Ich habe derzeit eine QuadTree
, die alle meine Entitäten enthält. Es funktioniert gut und ich habe es ziemlich anständig optimiert, aber das einzige, was weh tut, ist, dass ich fast jeden Frame entferne und in ihn einfüge. Ein kleiner Code:
entityMap.remove(it->second, it->second->getLastAABB()); // Removes the entity, getLastAABB is it's last location
QuadTree* nearest = entityMap.getLowestRoot(moved);
std::unordered_set<Locatable*> entities = nearest->getAll();
for (auto itt = entities.begin(); itt != entities.end(); itt++) {
AABB aabb = (*itt)->getAABB();
if (aabb.collides(moved)) {
// COLLISION
}
}
entityMap.insert(it->second);
Dieser Code wird 30 Mal pro Sekunde ausgeführt. Ich verwende eine schmutzige Flagge, damit nur Entitäten behandelt werden, die verschoben wurden. entityMap
ist das QuadTree
selbst.
Jeder Rat zu verringern insert
und remove
Anrufe wird geschätzt.
quelle