Projekt przewijania ekranu w stylu Mega Man

25

Klasyczna seria NES Mega Man wykorzystuje bardzo specyficzną technikę przewijania, którą ciężko mi owijać wokół implementacji. Zasadniczo poziom jest podzielony na „ekrany” o tym samym rozmiarze. Niektóre ekrany płynnie się przewijają , tworząc iluzję szerszych pól gry. Niektóre ekrany zatrzymują przewijanie kamery, dopóki odtwarzacz nie dotrze do krawędzi ekranu, w którym to momencie następuje przejście i wyświetla się następny ekran. Możliwe jest również, że pojedynczy ekran ma więcej niż jedno przejście, na przykład ma drabinę, która prowadzi do jednego ekranu, ale możesz także przejść do innego ekranu.

Jak można modelować te przejścia ekranu?

Schemat przejścia ekranu Mega Man

  • Ekran 0 to ekran początkowy, w którym rozpoczyna się odtwarzacz.
  • Ekran 0-3 przesuwa się poziomo i pojawia się w odtwarzaczu jako jedno ciągłe pole gry.
  • Ponieważ istnieje przejście między ekranem 3 a sąsiednimi ekranami 4 i 5, kamera nie przejdzie obok prawej lub górnej krawędzi ekranu 3, chyba że gracz przejdzie do tej odpowiedniej krawędzi i „nie przepchnie” do następnego ekranu.
  • Gdy odtwarzacz przesunie się do jednej z krawędzi przejściowych, dane wejściowe użytkownika są chwilowo wyłączone, a kamera przechodzi do nowego obszaru, po czym dane użytkownika są przywracane.

  • Niebieski ekran (ekran 5) wyłączył przewijanie w poziomie, dzięki czemu możliwe są tylko przejścia w pionie.

  • Zielony ekran (ekran 6) ma pionowe przejście z powrotem do ekranu 5, ale umożliwia również płynne przewijanie w poziomie do ekranu 7.

Edycja : Wdrożenie przejść w kategoriach pokoi doprowadziło mnie do tego:

Schemat realizacji struktury pomieszczenia

Małe wycięcia ze strzałką to regiony, w których może wystąpić przejście. Każdy region ma „kierunek” i leży tuż poza widocznym obszarem pokoju. Gdy tylko gracz znajdzie się w regionie, rozpocznie się przejście.

Zack The Human
źródło
1
takie zachowanie występuje również w grach 2D z serii Metroid.
Sparr,
Tak, to w zasadzie to samo. Różnica polega na tym, że IIRC Metroid umożliwiał płynne przewijanie w pionie w niektórych pokojach / szybach, podczas gdy Mega Man nigdy nie miał płynnego przewijania w pionie; zawsze było przejście.
Zack The Human
Słyszałem, że nazywa się to „przesuwaniem filmów”.
Blecki

Odpowiedzi:

21

Wygląda na to, że potrzebujesz koncepcji pokoi zamiast ekranów . Ekrany 1-3 będą jednym pokojem, np. Twoje pokoje mogą mieć dowolną wielkość i kształt, a nawet być ograniczone do wielokrotności ekranu .

Kamera będzie podążać za odtwarzaczem przez dany pokój, aż gracz zbliży się do granicy (połowa szerokości ekranu). Kiedy gracz przekroczy granicę i wejdzie do innego pokoju, wykonasz wizualizację przejścia.

Każdy pokój miałby zestaw punktów dostępu, które są mapowane na punkty dostępu innego pokoju - tworząc punkty przejścia.

TreDubZedd
źródło
Dzieki za sugestie. Na początku chciałem to zrobić, ale wpadłem na mentalną przeszkodę, próbując poradzić sobie z przejściami. Powiedzmy na przykład, że jest długi pokój z wejściem od góry na lewym końcu pokoju i wyjściem na górze po prawej stronie. Myślę, że sposobem na poradzenie sobie z tym byłoby zdefiniowanie małych regionów, które mogą wywołać przejście, hmm?
Zack The Human
Nieco dalej: koncepcja „pokoju” jest tym, co obecnie mam w mojej grze. Pokoje mogą być dowolne, ale nie zdefiniowałem jeszcze sposobu przejścia z pokoju do pokoju.
Zack The Human
1
@Zack: Kamera podąża za odtwarzaczem. Granice kamery nie mogą nigdy pokrywać się z pomieszczeniem poza tym, w którym znajduje się gracz (tj. Jeśli prawa krawędź okna rzutowania jest skierowana na prawą krawędź tego pokoju, kamera nie może przesunąć się w prawo). Jeśli gracz przejdzie przez ścianę pokoju do sąsiedniego pokoju, pozwól, aby kamera szybko śledziła, aż bezpiecznie znajdzie się w nowym pokoju (musisz tylko martwić się o ruch w górę / w dół / w lewo / w prawo w swojej strukturze). Opcjonalnie, jeśli gracz podejdzie do ściany pokoju, przejmij kontrolę automatyczną i zmuś go, aby poszedł do przodu, aby znaleźć się całkowicie w nowym pokoju.
doppelgreener
1
@Zack: Twoja edycja pytania wydaje się korelować z tym, o czym myślałem. Pozycja gracza może wyjść z danego pokoju tylko w tych miejscach przejściowych (między y1 i y2 na ścianie pionowej lub x1 i x2 na ścianie poziomej), a gdy tylko to zrobi, umieścisz jego pozycję w następnym pokoju - unikając pętli „tam iz powrotem” - i wykonaj przejście wizualne.
TreDubZedd,
1
Możesz również rozważyć „obramowanie” wokół każdego pokoju, które zasadniczo jest obszarem, w którym nie można grać (z wyjątkiem regionów przejściowych). Możesz graficznie zaprojektować swoje pokoje tak, aby niemożliwa do odtworzenia ramka zawsze zawierała grafikę „na ścianie”, ale obszary przejściowe pozostały otwarte, podobnie jak reszta pokoju. Możesz sfałszować przejściowe „nakładanie się”, czekając, aż gracz całkowicie przekroczy granicę (grywalną), aw sąsiednim pokoju upewnij się, że nowa pozycja w ogóle nie przecina granicy.
TreDubZedd,
-8

Koncepcja większych gładkich obszarów przewijania składających się z fragmentów wielkości ekranu jest artefaktem poważnych ograniczeń zasobów w klasycznych konsolach, w których wzrost wydajności można uzyskać, przechowując dane w częściach o określonych rozmiarach (takich jak jedna strona pamięci). Nie ma powodu, aby używać takiego systemu we współczesnej grze.

Sparr
źródło
7
Rozumiem, że pierwotni programiści musieli zaimplementować przewijanie w ten sposób, aby załadować kafelki, duszki itp. Nie muszę implementować systemu ekranowego opisanego w moim pytaniu, tak naprawdę chcę emulować kamerę i / lub przewijanie.
Zack The Human
4
-1 - Podział obszaru gry na nieciągłe fragmenty może już nie mieć znaczenia przy ładowaniu, ale nadal tworzy szczególne poczucie miejsca dla graczy i pomaga im mapować obszar mentalnie.
@Joe, jak to ma związek z moją odpowiedzią? Zwracam się konkretnie i bezpośrednio do fragmentów o wielkości wielu ekranów. Nie mówiłem nic o nieciągłości kawałków.
Sparr
Chciałem poinformować cię, że nie głosowałem za twoją odpowiedzią, ale nie sądzę, aby odpowiedziała na moje pytanie: „Jak można modelować te przejścia ekranu?”.
Zack The Human
@Zack dzięki. jeśli pójdzie o wiele bardziej negatywnie, usunę go, ale jeśli pozostanie na -3, to go zostawię, ponieważ uważam, że jest to trafne, nawet jeśli nie bezpośrednia odpowiedź
Sparr