Zwykle elementy i komponenty lub inne części kodu gry w projekcie opartym na danych będą miały nazwy, które zostaną sprawdzone, jeśli chcesz dowiedzieć się, który obiekt masz do czynienia dokładnie.Jakie są dobre metody zastępowania nazw łańcuchów haszami całkowitymi
void Player::Interact(Entity *myEntity)
{
if(myEntity->isNearEnough(this) && myEntity->GetFamilyName() == "guard")
{
static_cast<Guard*>(myEntity)->Say("No mention of arrows and knees here");
}
}
Jeśli ignorować możliwości, że może to być przedwczesna optymalizacja, to całkiem jasne, że patrząc podmiotów byłoby o wiele szybciej, jeśli ich „name” był prosty wartość 32 bit zamiast rzeczywisty ciąg.
Obliczanie skrótów z nazw łańcuchów jest jedną z możliwych opcji. Nie próbowałem go, ale z zakresem funkcji 32-bitowej i dobrej funkcji mieszania, ryzyko kolizji powinno być minimalne.
Pytanie brzmi następująco: oczywiście potrzebujemy jakiegoś sposobu na konwersję w kodzie (lub w jakimś zewnętrznym pliku) nazw łańcuchów na te liczby całkowite, ponieważ osoba pracująca nad tymi nazwanymi obiektami będzie nadal chciała odwołać się do obiekt jako "strażnik" zamiast "0x2315f21a".
Zakładając, że używamy C++ i chcemy zamienić wszystkie ciągi występujące w kodzie, czy można to osiągnąć za pomocą wbudowanych funkcji językowych, czy też musimy zbudować zewnętrzne narzędzie, które ręcznie przegląda wszystkie pliki i wymiany wartości?
+ LOL dla wiadomości strażnika: D – Petruza
Powiedziałbym, że naprawdę chcesz "dynamic_cast" tutaj. RTTI może mieć złą sławę w tworzeniu gier, ale z pewnością będzie to znacznie wolniejsze, nie wspominając o trudniejszych do utrzymania. –
MSalters