This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this tutorial in English
W tym przykładowym projekcie, który możesz otworzyć w edytorze albo pobrać z GitHuba, pokazujemy jeden ze sposobów tworzenia bardzo dużych map RPG w Defold. Projekt opiera się na następujących założeniach:
Najpierw uruchom przykład i przejdź przez świat o wymiarach 3x3 ekranów, żeby zobaczyć, jak jest zbudowany. Postacią sterujesz klawiszami strzałek.
Otwórz “/main/main.collection”, aby zobaczyć bootstrapową kolekcję tego przykładu.

Główna kolekcja zawiera obiekt gry sterujący postacią gracza, poruszającą się w 8 kierunkach za pomocą klawiszy strzałek, oraz drugi obiekt gry o nazwie “game”, który kontroluje przebieg gry. Obiekt gry “game” składa się ze skryptu i po jednym komponencie Collection factory dla każdego ekranu w grze. Fabryki mają nazwy zgodne ze schematem siatki ekranów.
Skrypt “/main/game.script” śledzi, na którym ekranie znajduje się obecnie gracz. Reaguje też na niestandardową wiadomość “load_screen”. Ta wiadomość wczytuje nowy ekran i zamienia go miejscami z bieżącym ekranem w kierunku ruchu bohatera. Na początku ekran jest wczytywany na środku widoku i nie ma jeszcze innego ekranu, z którym można go zamienić.
Bohaterem steruje skrypt “/main/hero.script”. Skrypt sprawdza, czy obiekt gry bohatera przekracza górną, dolną, lewą lub prawą linię położoną blisko krawędzi ekranu:

factory.create() na odpowiednim komponencie Collection factory. Zawartość kolekcji jest ustawiana poza ekranem.Wszystko to dzieje się w ciągu sekundy, więc przejście jest płynne i nie zakłóca rozgrywki.
Każdy ekran w świecie gry jest zbudowany w osobnej kolekcji zawierającej mapę kafelków (tilemap), obiekt kolizji (collision object) i inne obiekty gry unikalne dla danego ekranu. Aby ułatwić zarządzanie ekranami i ich wczytywanie, kolekcje ekranów nazwano według prostego schematu:

Każda kolekcja ekranu nosi nazwę zgodną ze swoją pozycją w siatce świata. Pierwsza liczba oznacza pozycję X, a druga pozycję Y.
W widoku Assets przejdź do kolekcji “/main/screens/0-0.collection” i otwórz ją. Opisuje ona ekran w lewym dolnym rogu mapy:

Zwróć uwagę, że istnieje obiekt gry o nazwie “root”, który jest rodzicem całej zawartości ekranu. To kolejna konwencja użyta w przykładzie i ma bardzo ważne znaczenie: kiedy ekran pojawia się w widoku, trzeba przesunąć tylko obiekt gry “root”. Wszystkie obiekty potomne są automatycznie przesuwane razem z obiektem nadrzędnym. Jeśli na ekranie są specjalne obiekty gry, można je też swobodnie animować, ponieważ ich ruch jest liczony względem obiektu nadrzędnego “root”. Gdy ekran jest przewijany do widoku lub poza niego, te obiekty potomne poruszają się razem z ekranem. Dodatkowy kod jest potrzebny tylko wtedy, gdy obiekt musi przemieszczać się między ekranami.
Pszczoły na ekranie 0-1 są prostą ilustracją tego pomysłu:

Każdy ekran ma własną mapę kafelków, którą można edytować we wbudowanym edytorze map kafelków. Główną wadą pracy nad każdym ekranem w izolacji jest to, że trudno wtedy zobaczyć, jak łączy się on z sąsiednimi ekranami, a to ważny element budowania ciągłości świata gry.
Z tego powodu utworzono specjalną kolekcję. Otwórz “/main/map/test_layout.collection”, aby zobaczyć tę kolekcję testowego układu świata:

Jedynym celem tej kolekcji jest służenie jako narzędzie edycyjne podczas tworzenia gry. Edytowanie konkretnego ekranu obok kolekcji testowego układu daje kontekst dla ekranu, nad którym właśnie pracujesz, i znacznie upraszcza pracę:

Wszelkie zmiany w mapie kafelków ekranu (tutaj w prawym panelu) są natychmiast widoczne w kolekcji testowej (w lewym panelu). Zwróć też uwagę, że kolekcja testowego układu nie jest dodawana do statycznej hierarchii, więc jest automatycznie wykluczana ze wszystkich kompilacji.
Jak widzisz, ten przykład został zbudowany zgodnie z określonymi ograniczeniami dotyczącymi świata gry i sposobu, w jaki bohater się przez niego porusza. Jeśli twoja gra ma inne wymagania, prawdopodobnie potrzebujesz innego rozwiązania. Na przykład jeśli gra wymaga, by kamera poruszała się płynnie po mapie świata, potrzebujesz innego sposobu podziału zawartości, innego mechanizmu wczytywania, a także innych narzędzi pomagających tworzyć świat gry.
To kończy omówienie przykładowej mapy RPG. Jak zawsze możesz używać zawartości przykładu w dowolny sposób. Aby dowiedzieć się więcej o Defold, zajrzyj na nasze strony dokumentacji z dodatkowymi przykładami, samouczkami, instrukcjami i dokumentacją API.
Jeśli napotkasz problem albo masz pytania, odwiedź nasze forum.
Miłego tworzenia!