Jakie są dobre podejścia do proceduralnego generowania nieskończonego poziomu 2d? Poziom można ograniczyć w dowolnym wymiarze, ale niekoniecznie.
Podejście, które do tej pory ma dla mnie największy sens, polega na zastosowaniu promienia opartego na siatce. np. podziel obszar gry na siatkę z kwadratami określonego rozmiaru, a następnie załaduj X kwadratów w promieniu wokół gracza. Następnie, gdy gracz przechodzi na inny kwadrat, zbuduj następny zestaw i upuść dalej (Utrzymanie eksplorowanego obszaru nie jest konieczne.) Kiedy kwadrat jest budowany, zawiera on losowy układ obiektów. Kiedy obiekty opuszczają zewnętrzny pierścień kwadratów, są usuwane ze świata. Czy są lepsze lub inne sposoby? Lub jeśli jest to dobre podejście, jakie są potencjalne problemy?
W trosce o dyskusję, możesz myśleć o tym poziomie jak o polu asteroid z góry na dół z rozproszonymi dopalaczami itp.
źródło
Odpowiedzi:
Problem z „nieskończonymi” światami polega na tym, że współrzędne leżące u ich podstaw mogą nie być nieskończone. Czasami, jeśli gra wystarczająco spowolni gracza, może to nie stanowić problemu, ponieważ na przykład czas na osiągnięcie liczby całkowitej jest zbyt długi, aby można go było kiedykolwiek osiągnąć. Ale jeśli pozwolisz na duże różnice prędkości, być może będziesz musiał być bardzo precyzyjny i bardzo dalekosiężny, abyś musiał pomyśleć o swoich współrzędnych. Rozsądnym rozwiązaniem byłoby posiadanie dwóch poziomów, takich jak współrzędne całkowite twojej siatki i współrzędne zmiennoprzecinkowe w każdej linii odniesienia.
Na marginesie, możesz być nawet w stanie poprawnie zachować układ swojego świata, używając współrzędnych siatki jako ziarna do stworzenia losowego świata na danym kwadracie. Kiedy więc gracz opuści obszar, możesz go upuścić, a gdy gracz wróci, możesz go zregenerować z nasion.
źródło
float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos;
na moim komputerze diff wynosi 0