Thông thường, các thực thể và thành phần hoặc các phần khác của mã trò chơi trong thiết kế theo hướng dữ liệu sẽ có tên được kiểm tra nếu bạn muốn tìm đối tượng nào bạn đang xử lý với chính xác.Một số phương pháp tốt để thay thế tên chuỗi bằng băm số
void Player::Interact(Entity *myEntity)
{
if(myEntity->isNearEnough(this) && myEntity->GetFamilyName() == "guard")
{
static_cast<Guard*>(myEntity)->Say("No mention of arrows and knees here");
}
}
Nếu bạn bỏ qua khả năng này có thể tối ưu hóa quá sớm, nó khá rõ ràng rằng nhìn lên các đơn vị sẽ nhanh hơn rất nhiều nếu "tên" của họ là một giá trị 32 bit đơn giản thay vì một chuỗi thực tế.
Tính toán băm ra khỏi tên chuỗi là một tùy chọn có thể. Tôi đã không thực sự thử nó, nhưng với một loạt các 32bit và một hàm băm tốt nguy cơ va chạm nên được tối thiểu.
Câu hỏi là: Rõ ràng chúng ta cần một số cách để chuyển đổi trong mã (hoặc trong một số loại tệp bên ngoài) chuỗi thành các số nguyên, vì người làm việc trên các đối tượng được đặt tên này sẽ vẫn muốn tham chiếu đến đối tượng là "guard" thay vì "0x2315f21a".
Giả sử chúng tôi đang sử dụng C++ và muốn thay thế tất cả các chuỗi xuất hiện trong mã, điều này thậm chí có thể đạt được với các tính năng được xây dựng bằng ngôn ngữ hoặc chúng tôi phải xây dựng một công cụ bên ngoài xem thủ công tất cả các tệp và trao đổi giá trị?
+ LOL cho thông báo của người bảo vệ: D – Petruza
Tôi muốn nói rằng bạn thực sự muốn 'dynamic_cast' tại đây. RTTI có thể có một tên xấu trong phát triển trò chơi, nhưng điều này chắc chắn sẽ chậm hơn nhiều so với điều đó, chưa kể đến khó khăn hơn để duy trì. –
MSalters