Paper 2D Game: Samochody

Wcześniej chciałbym pokazać opcję edytora, która jest często używana w tych Planach, czyli opcję „Podziel Pin Struct Struct”. Wiele Akcji Planu otrzymuje strukturę jako parametr. “Lokalizacja” jest przykładem struktury, która agreguje wartości X, Y i Z. Po kliknięciu prawym przyciskiem na parametr konstrukcji pojawia się opcja “Split Pin Struct”, która rozdziela strukturę na różne parametry. Poniższy obraz przedstawia akcję „Ustaw lokalizację aktora” przy użyciu lokalizacji i oddzielnej struktury:

  • Schemat samochodu gracza :

Zacznijmy od schematu, który reprezentuje gracza. Utwórz nowy schemat typu „Aktor” o nazwie „PlayerCar”.

Otwórz plan, na karcie „Komponenty” dodaj „Paper Sprite”:

Na karcie „Szczegóły” w „Paper Sprite”, we właściwości „Source Sprite” wybierz „PlayerCar_Sprite”:

Aby przetestować kolizję, dodaj komponent typu  „Capsule Collision”:

Na karcie „Szczegóły” sekcji „Kapsuła” we właściwości „Kształt” wprowadź następujące wartości:

W zakładce „MyBlueprint” utwórz zmienne „CarSpeed” (typ zmiennoprzecinkowy), „HorizontalDir” (typ całkowity) i „VerticalDir” (typ całkowity):

W zmiennej „CarSpeed” wpisz „200” jako „Wartość domyślna”. W tej grze jeden piksel równa się jednej Unreal Unreal (uu), wówczas wartość tej zmiennej oznacza, że ​​prędkość samochodu gracza wynosi 200 pikseli / sekundę.

Kliknij przycisk „Ustawienia domyślne klasy” na górnym pasku edytora schematów i na karcie „Szczegóły”, w kategorii „Dane wejściowe”, we właściwości „Automatyczne odbieranie”, kliknij pole kombi i wybierz „Gracz 0”. Służy to wskazaniu, że ten plan będzie otrzymywał polecenia wejściowe gracza.

Samochód gracza jest sterowany za pomocą klawiszy strzałek. Zdarzenia wejściowe modyfikują wartość zmiennych „HorizontalDir” i „VerticalDir”. Zmienne te mogą przyjmować wartości -1, 0 i 1. Służą one do obliczania kierunku, w którym porusza się samochód. Poniższy obraz przedstawia zdarzenia wejściowe.

Ruch samochodu gracza będzie się odbywał podczas imprezy „Tick”. Jeśli nie znasz zdarzenia „Tick” i parametru „Delta Seconds”, zapoznaj się z artykułem „ Tick ​​Event and Latent Actions in Blueprints ”. Treść imprezy Tick jest następująca:

Funkcja „Zacisk” służy do ograniczania „Samochodu gracza” na ulicy. W tym celu wartość X musi wynosić co najmniej 160, a maksymalnie 480. Wartość Z musi wynosić od 40 do 440. Zmienne „HorizontalDir” i „VerticalDir” są mnożone przez wartość prędkości. Na przykład, jeśli zmienna „HorizontalDir” ma wartość 1, to wynik będzie wartością dodatnią, która wskazuje, że samochód powinien poruszać się po osi X w prawo. Jeśli wynosi -1, wynik jest ujemny, co oznacza, że ​​ruch na osi X jest w lewo. Jeśli „HorizontalDir” ma wartość 0, wynikiem jest 0, więc nie przesunie się na osi X.

  • Schemat EnemyCar :

Utwórz nowy plan typu „Actor” o nazwie „EnemyCar”. W zakładce „Components” dodaj „Paper Sprite” i „Capsule Collision” w taki sam sposób, jak w przypadku „PlayerCar”. Użyj „EnemyCar_Sprite” we właściwości „Source Sprite”. Utwórz zmienną typu Integer o nazwie „Kierunek”.

„EnemyCar” rozpoczyna grę na górnym ekranie. Porusza się w dół, a jego ruch poziomy jest definiowany przez wartość zmiennej „Kierunek” (-1 = w lewo, 0 = środek, 1 = w prawo). Wartość zmiennej „Kierunek” zmienia się losowo w okresie od co najmniej 0,5 sekundy do maksymalnie 1,5 sekundy. Utworzono zdarzenie niestandardowe o nazwie „ChangeDirection”. Odpowiada za te zmiany wartości.

Funkcje typu „Random” zwracają losową wartość między określoną wartością minimalną i maksymalną. Używana jest funkcja „SetTimer_Delegate” do planowania następnego wywołania zdarzenia „ChangeDirection”. Parametr „Delegate” jest odniesieniem do zdarzenia, wystarczy połączyć mały czerwony kwadrat, który istnieje w przypadku zdarzenia, z parametrem funkcji „SetTimer_Delegate”. Zauważ, że timer nie jest z aktywną pętlą i będzie działał tylko raz. Każde wywołanie „ChangeDirection” aktywuje Timer z inną wartością czasu. Zdarzenie Tick jest podobne do „PlayerCar”. Jedna różnica polega na tym, że użyliśmy funkcji „AddActorWorldOffset”, która dodaje wartości przekazane jako parametry do bieżącej wartości lokalizacji:

Szybkość „EnemyCar” jest tymczasowo ustawiona na wartość „100”. W następnym artykule wartość ta zostanie dostosowana do aktualnego poziomu gry. Po zmodyfikowaniu pozycji „EnemyCar” wywoływane jest makro „TestLimit”, które sprawdza, czy „EnemyCar” dotknął boków ulicy lub opuścił pole gry:

Jeśli „EnemyCar” przekroczy dolną część ekranu, zostaje zniszczony. Jeśli „EnemyCar” dotknie boków ulicy, kierunek ruchu zostanie odwrócony.

Brakuje niektórych szczegółów „EnemyCar”, które można ukończyć dopiero w następnym artykule, kiedy stworzyliśmy Blueprint „GameManager”, który będzie przechowywał informacje o grze.


Źródło:https://romeroblueprints.blogspot.com/2015/07/paper-2d-game-cars.html