Tôi hiện có một thực QuadTreethể chứa tất cả các Thực thể của tôi. Nó hoạt động tốt và tôi đã tối ưu hóa nó khá tốt, nhưng một điều đau lòng là tôi đang gỡ bỏ và chèn vào nó gần như mọi khung hình. Một ít mã:
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);
Mã đó được chạy 30 lần một giây. Tôi sử dụng một lá cờ bẩn để chỉ các thực thể đã di chuyển được xử lý. entityMaplà QuadTreechính nó
Bất kỳ lời khuyên để giảm insertvà removecác cuộc gọi được đánh giá cao.