Tôi hiện có một thực QuadTree
thể 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ý. entityMap
là QuadTree
chính nó
Bất kỳ lời khuyên để giảm insert
và remove
các cuộc gọi được đánh giá cao.