2D mapa z góry: normalizacja czy nie?

11

Jestem absolutnym początkującym w programowaniu gier, jeśli to pytanie jest źle sformułowane, pamiętaj, że nie był to niechlujność po mojej stronie, ale brak doświadczenia w programowaniu gier.

Gra, którą planuję kodować, będzie używać mapy 2D z góry jako „świata”. Świat może być większy niż okno (okno może powiększać lub pomniejszać), a pojazdy mogą być zlokalizowane w dowolnym punkcie świata (= nie jest to mapa kafelkowa, przestrzeń jest „ciągła”).

Wyjaśnij na przykładzie: jeśli świat jest terenem o wymiarach 1000 x 1000 metrów, pojazd może znajdować się w odległości (327,31, 720,4) metrów.

Moje pytanie brzmi: jaki jest najwygodniejszy sposób reprezentowania świata wewnętrznie? Mógłbym pomyśleć o tych możliwościach:

  • nic nie rób i używaj mierników tak, jakbym pracował z fizycznym przedmiotem,
  • znormalizować do pikseli określających rozmiar świata jako liczbę pikseli reprezentujących 1000 metrów przy maksymalnym powiększeniu,
  • znormalizuj do 1, definiując słowo jako kwadrat wielkości 1

... ale jestem pewien, że mogą istnieć inne / niektóre z nich mogą nie mieć sensu. Chodzi o to, że będąc moją pierwszą grą, nie mam przed sobą jasnych zdjęć problemów i chciałbym uzyskać wskazówki, jak dokonać właściwego wyboru początkowego.

Dziękuję za Twój czas.

prochowiec
źródło
Miałem ten problem. Nie opublikuję jako odpowiedzi - są już świetne rzeczy. Ale jeśli pracujesz w dowolnej arbitralnej jednostce, możesz wesprzeć dowolną rozdzielczość, modyfikując tylko jedną wartość. Jest również o wiele łatwiej radzić sobie z rozgrywką. Wreszcie przy dużych liczbach, takich jak pomiary pikseli, fizyki mogą wybuchnąć.
Kaczka komunistyczna

Odpowiedzi:

10

Zgadzam się z wykorzystaniem rzeczywistej wartości (metrów, stóp itp.) Jako podstawy odległości. Problem z pozostałymi dwiema sugestiami polega na tym, że obie są zmiennymi. Praca ze światem wielkości 1spowoduje, że cała arytmetyka będzie zmiennoprzecinkowa między -1 a 1, co może prowadzić do większej liczby błędów zmiennoprzecinkowych. Ponadto, jeśli kiedykolwiek zdecydujesz się na tworzenie różnych rozmiarów światów („duże” światy dla dłuższych gier itp.), Wprowadzisz wiele problemów do swojego kodu. Podobnie, jeśli używasz pikseli, nawet przy maksymalnym / minimalnym poziomie powiększenia, wpadniesz w zamieszanie, a także problemy, jeśli zdecydujesz się zwiększyć lub zmniejszyć poziomy powiększenia.

dlras2
źródło
Ta odpowiedź jest doskonała (+1). Szczególnie podoba mi się sposób, w jaki wyjaśniłeś potencjalne problemy z używaniem „1” dla wielkości świata.
Randolf Richardson
Jeśli wykonujesz jakąkolwiek symulację fizyczną, nawet jeśli jest całkowicie wymyślona, ​​użycie liczb całkowitych stałoprzecinkowych spowoduje nieprawidłowe wyniki. Wszystko, co musisz zrobić, to modelować pojedynczy pojazd poruszający się z prędkością jednostkową po przekątnej, a przekonasz się, że nie masz możliwości prawidłowego przedstawienia jego pozycji.
edA-qa mort-ora-y 14.07.11
3
Uzgodniona RE: za pomocą liczników. Pomoże to również wizualizować i rozumieć rzeczy. „Ten pojazd ma 5 metrów długości” lub „Te dwa obiekty znajdują się w odległości 500 metrów od siebie” i nie muszą cały czas robić matematyki, aby poczuć, co robisz.
Tim Holt
-1 to stwierdzenie, że arytmetyka liczb całkowitych jest szybsza niż zmiennoprzecinkowa, nie jest ogólnie prawdą, w rzeczywistości są one znacznie szybsze na większości współczesnych platform
Maik Semder
2
Nadal stosowanie wartości stałych dla pozycji bezwzględnych może być dobrym pomysłem. Prowadzi to do stałej precyzji i identycznej fizyki na całym świecie.
CodesInChaos
7

Spośród trzech zasugerowanych przez ciebie opcji, korzystanie z mierników będzie prawdopodobnie najlepsze. Gdy tworzysz inne dane, radzenie sobie z długością w metrach znacznie ułatwi ci życie. Między innymi możesz zdecydować o zmianie rozmiaru świata lub różne poziomy mogą wymagać map o różnych rozmiarach.

Możesz także zdecydować się na użycie stóp (lub ewentualnie cali). Część tej decyzji może zależeć od tego, jakich pakietów oprogramowania pośredniego używasz - niektóre silniki fizyki preferują taki czy inny typ jednostki (choć prawie zawsze można ją konfigurować). W przeważającej części możesz po prostu wybrać jednostkę i iść z nią.

Trzepnięcie
źródło
5

Normalizacja do „1” nie jest tak naprawdę dobrą drogą (co zrobić, jeśli masz świat, który nie jest kwadratowy? Lub kilka światów o różnych rozmiarach ...).

Używanie pikseli jako ... NIGDY Nie mieszaj rozgrywki i środków graficznych !! Nie zamykaj się, aby nie można było zmienić grafiki bez konieczności zmiany kodu.

Tak więc mierniki (stopy lub jakikolwiek inny pomiar, który lubisz najbardziej) to droga. Znacznie lepiej poczujesz kodowanie wyrzutni rakiet, aby poruszała się z prędkością 50 km / h niż 0,00076 jednostek na sekundę ...

Valmond
źródło