Oto kilka słów ogólnych informacji i porad, które mogę przekazać jako, hm, nadmiernie doświadczony modder Minecraft (który może przynajmniej częściowo dać ci trochę wskazówek).
Powód, dla którego Minecraft jest wolny, ma wiele wspólnego z niektórymi wątpliwymi decyzjami projektowymi na niskim poziomie - na przykład za każdym razem, gdy odniesienie do bloku polega na pozycjonowaniu, gra sprawdza współrzędne za pomocą około 7, jeśli oświadczenia zapewniają, że nie wykracza poza granice . Co więcej, nie ma sposobu na złapanie „fragmentu” (jednostki 16 x 16 x 256 bloków, z którymi gra współpracuje), a następnie bezpośredniego odniesienia do niej bloków, aby ominąć wyszukiwania w pamięci podręcznej i, hmm, głupie problemy z weryfikacją (na przykład, każde odniesienie do bloku obejmuje również wyszukiwanie fragmentów, między innymi.) W moim modzie stworzyłem sposób na bezpośrednie chwytanie i zmianę tablicy bloków, co przyspieszyło generowanie ogromnych lochów z niemożliwych do gry lagów na niezauważalnie szybkie.
EDYCJA: Usunięto twierdzenie, że zadeklarowanie zmiennych w innym zakresie spowodowało wzrost wydajności, w rzeczywistości tak nie jest. Wydaje mi się, że w tamtym czasie połączyłem ten wynik z czymś innym, z czym eksperymentowałem (konkretnie, usuwając obsady między liczbami podwójnymi i zmiennoprzecinkowymi w kodzie związanym z eksplozją poprzez konsolidację do liczb podwójnych ... co zrozumiałe, miało to ogromny wpływ!)
Ponadto, chociaż nie jest to obszar, w którym spędzam dużo czasu, większość dławików wydajności w Minecraft stanowi problem z renderowaniem (około 75% czasu gry jest poświęcone temu w moim systemie). Oczywiście nie przejmujesz się tak bardzo, czy problemem jest obsługa większej liczby graczy w trybie dla wielu graczy (serwer nic nie renderuje), ale ma to znaczenie, ponieważ każdy komputer może nawet grać.
Więc niezależnie od wybranego języka, postaraj się bardzo zbliżyć do szczegółów implementacji / niskiego poziomu, ponieważ nawet jeden mały szczegół w projekcie takim jak ten może mieć znaczenie (jeden przykład dla mnie w C ++ brzmiał: „Czy kompilator może statycznie wstawiać funkcję wskaźniki? „Tak, może! Zrobiłem niesamowitą różnicę w jednym z projektów, nad którymi pracowałem, ponieważ miałem mniej kodu i przewagę wbudowanego.)
Naprawdę nie lubię tej odpowiedzi, ponieważ utrudnia to projektowanie na wysokim poziomie, ale to bolesna prawda, jeśli wydajność jest problemem. Mam nadzieję, że okazało się to pomocne!
Ponadto odpowiedź Gavina obejmuje pewne szczegóły, których nie chciałem powtarzać (i wiele więcej! Jest wyraźnie bardziej kompetentny w tym temacie niż ja) i w większości się z nim zgadzam. Będę musiał poeksperymentować z jego komentarzem dotyczącym procesorów i krótszych rozmiarów zmiennych, nigdy o tym nie słyszałem - chciałbym udowodnić sobie, że to prawda!