Jak stworzyć grę Pong - hyperPong

Uwaga: Plik projektu do tego samouczka można znaleźć na końcu tego artykułu.
Wprowadzenie
W tym samouczku stworzymy grę przypominającą Pong od podstaw. Omówimy kilka bardziej zaawansowanych funkcji i zachowań w hyperPad, więc ten samouczek zakłada podstawową wiedzę o edytorze hyperPad. Jeśli uważasz, że musisz bardziej zaznajomić się z tworzeniem gry od podstaw, możesz najpierw zapoznać się z Pełnym przewodnikiem - tworzenie gry platformowej .
Pong to prosta gra dla dwóch graczy, składająca się tylko z dwóch rakietek i piłki, a można ją uznać za prostą cyfrową wersję tenisa stołowego. Każdy gracz steruje jedną rakietką, obie znajdują się po przeciwnych stronach stołu. Rakietki mogą poruszać się tylko do przodu i do tyłu, uderzając piłkę w kierunku przeciwnika. Jeśli gracz spóźni się z uderzeniem piłki, drugi gracz zdobywa punkt. Pierwszy gracz, który zdobędzie 11 punktów, wygrywa!
W naszej grze Pong dodamy możliwość gry w trybie 1 Gracz (Gracz vs. AI), 2 Gracze (Gracz vs. Gracz) lub 0 Graczy "Obserwuj" (AI vs. AI).
Część 1: Ustawianie projektu i główne menu
Rozpocznijmy pracę, tworząc nowy projekt.
Otwórz menu Projektów w hyperPad i stuknij Nowy Projekt. Nadaj swojemu projektowi nazwę i stuknij Dalej. Orientację możesz pozostawić domyślną jako tryb poziomy. W tym samouczku wsparcie dla urządzeń ustawione jest na iPad 4:3. Na następnej stronie wybierz "Widok z lotu ptaka" i pozostaw resztę domyślną.
Teraz, gdy mamy nowy projekt gotowy, szybko przejdźmy do ustawiania głównego menu, zanim przejdziemy do samej gry. Pierwszą rzeczą, którą zrobimy, jest zmiana nazwy naszej sceny na "Główne Menu".
Stuknij przycisk Menu Projektu/Sceny i stuknij przycisk zębatki obok naszej "Scena 1".
Stuknij opcję Ustawienia i zmień nazwę naszej sceny na "Główne Menu". Stuknij Zapisz, aby zapisać i zamknąć okno ustawień.
Następnie, aby pozostać tradycyjnie wczesnym retro grom, takim jak arcade Pong, możemy ustawić kolor tła na czarny.
Stuknij przycisk Ustawienia Sceny i wybierz Tło. Stuknij przycisk "Zmień kolor" i ustaw go na czarny (#000000FF).
Teraz dodajmy etykietę tytułową do naszego głównego menu. Stuknij przycisk Specjalne Obiekty i wybierz Etykietę.
Wpisz nazwę swojej gry w polu tekstowym ("hyperPong" wpisano w tym samouczku), ustaw rozmiar czcionki na duży, ale nie za duży. Dla tytułu "hyperPong" 72 punkty to dobry rozmiar. Zmień kolor na biały (#FFFFFFFF) i umieść go w centrum menu blisko góry.
Teraz mamy scenę głównego menu do wypełnienia przyciskami wszystkich naszych trybów gry. Na razie zostawimy menu w takiej formie, a ukończymy je po stworzeniu gry, która będzie grywalna.
Część 2: Ustawienie sceny gry i rakietki
Stuknij przycisk Menu Projektu i stuknij "Dodaj scenę". Nazwij ją "Gra" i stuknij Utwórz. Teraz w scenie Gry powinieneś zobaczyć pusty obszar roboczy. Tak jak zrobiliśmy w scenie Główne Menu, przejdź z powrotem do przycisku Ustawienia Sceny i zmień tło na czarny (#000000FF).
Przejdźmy do pracy nad tworzeniem naszych rakietek. Stwórz pusty obiekt, klikając przycisk Specjalne Obiekty i wybierając "Pusty obiekt". Zmień jego kolor na biały (#FFFFFFFF) i upewnij się, że suwak przezroczystości jest całkowicie włączony.
Zmień nazwę obiektu na "Gracz-1" i ustaw jego tryb fizyki na Fizyka, a Passable pozostaw włączony.
Powodem, dla którego pozostawimy Passable włączony, jest to, że będziemy mieli większą kontrolę nad tym, jak piłka będzie wchodzić w interakcję z rakietką, gdy w nią uderzy. Chcemy mieć możliwość ręcznego kontrolowania prędkości i kierunku, w którym piłka się porusza.
W właściwościach obiektu Gracz-1 przejdź do zakładki Transformacja i ustaw skalę X na 25% i przesuń ją naciśniętą w lewo od pola gry.
Następnie dodamy kilka kontrolerów do naszej rakietki, aby mogła się poruszać. Z zaznaczoną rakietką przejdź do edytora zachowań, wracając do zakładki Fizyka.
Umieść zachowanie Joystick Analog, znajdujące się w sekcji Interakcja (jeśli nie możesz go znaleźć, prawdopodobnie trzeba będzie stuknąć zakładkę Zaawansowane). Spowoduje to automatyczne utworzenie joysticka w edytorze sceny.
Jednak nie chcemy, aby rakietka poruszała się tylko na podstawie ruchu joysticka. Chcemy również, aby AI mógł również wykonywać ruchy.
W sekcji Niestandardowe umieść kontener Box. Będzie to przechowywać kierunek, w którym rakietka ma się poruszać. Dzięki temu zarówno gracz kontrolujący joystick, jak i AI wykonujący obliczenia będą mogli się poruszać, zmieniając tę jedną wartość. Jego wartość domyślna powinna być ustawiona na 0. Dobrym pomysłem jest również nadanie mu dobrej nazwy, "Kierunek ruchu" wydaje się odpowiedni.
Po zaznaczeniu kontenera Box naciśnij przycisk "Zmień pole wejściowe" i stuknij Tak. To utworzy zachowanie Ustaw pole wejściowe dla kontenera box, abyśmy mogli zmieniać jego wartość w razie potrzeby. Połącz Set Input Field z Joystick Analog.
Z wybranym zachowaniem Set Input Field przeciągnij wyjściową wartość z Joystick Analog do pola Nowa wartość. Wybierz właściwość "y". Teraz kontener ruchu kierunku będzie śledził, jak daleko gracz przesuwa joystick w górę lub w dół (oś y).
Gdy śledzimy, jak daleko joystick porusza się w górę lub w dół, musimy również wyzerować go do zera, jeśli gracz puści joystick. W przeciwnym razie rakietka będzie się dalej poruszać w kierunku, który ostatnio pamiętała.
W sekcji Interakcja dodaj zachowanie Stopped Touching i stuknij je, aby otworzyć jego właściwości. Domyślnie śledzi ono, kiedy gracz przestaje dotykać rakietki, ale my chcemy śledzić, kiedy gracz przestaje dotykać joysticka.
Stuknij właściwość obiektu, aby ją zmienić i wybierz joystick. Możesz potrzebować wybrać warstwę Global UI, aby móc go wybrać. Gdy jest wybrany, stuknij przycisk kontrolny. Zachowanie powinno teraz pokazywać joystick jako śledzony obiekt.
Stuknij w zachowanie Set Input Field, które zrobiliśmy wcześniej, i sklonuj je. Zduplikowane Set Input Field połącz z zachowaniem Stopped Touching i ustaw jego właściwość Nowa wartość na 0.
Teraz nasza zmienna kontenera kierunku ruchu będzie śledzić ruchy w górę i w dół joysticka i resetować się do 0, gdy joystick zostanie puszczony. Daje to świetny sposób na powiedzenie naszej rakietce, jak się poruszać, więc kontynuujmy i nadajmy naszej rakietce ruch.
W sekcji Niestandardowe przeciągnij zachowanie Timer. W jego właściwościach ustaw interwał na 0. Ten licznik wykona się tak często, jak to możliwe (raz na klatkę), co daje nam możliwość bardzo częstego aktualizowania ruchu rakietki.
Przed ustawieniem prędkości rakietki, chcemy upewnić się, że wartość kontenera kierunku ruchu jest ograniczona w rozsądnych granicach, na wypadek, gdyby poszła zbyt wysoko lub zbyt nisko. W przeciwnym razie nasza rakietka będzie poruszać się zbyt szybko w niektórych przypadkach.
W sekcji Logika umieść zachowanie Minimum i Maximum. Połącz zachowanie Minimum z timerem, a Maximum z Minimum. Powinieneś mieć coś, co wygląda tak:
Właściwościach zachowania Minimum ustaw pierwszą wartość na wyjściową wartość zachowania kierunku ruchu, a drugą wartość na 1.
Minimum zwróci najmniejszą liczbę, jaką otrzyma. Jeśli wartość kierunku ruchu przekroczy 1, zwróci 1. W przeciwnym razie zwróci po prostu wartość kierunku ruchu.
Właściwości zachowania Maximum ustaw pierwszą wartość na wynik Minimum, a drugą wartość na -1.
Zachowanie Maximum zwróci największą liczbę, jaką otrzyma. Jeśli wartość kierunku ruchu jest mniejsza niż -1, zwróci -1. W przeciwnym razie zwróci wartość Minimum (która jest albo 1, albo kierunek ruchu, w zależności od tego, co jest mniejsze).
Co to wszystko oznacza, to to, że wynikiem Maximum jest efektywnie wartość kierunku ruchu ograniczona pomiędzy -1 a +1. To daje nam pełną kontrolę nad tym, jak szybko rakietka może się poruszać!
Zakres od -1 do +1 jest łatwy do pracy, ale będzie zbyt wolny, jeśli bezpośrednio użyjemy tego jako prędkości rakietki.
W sekcji Logika znów umieść zachowanie Mnożenia wartości i połącz je z zachowaniem Maximum. W pierwszej wartości ustaw wartość na wynik zachowania Maximum. W drugiej wartości ustaw dobrze "maksymalną prędkość".
Na razie ustaw to na 20. Jeśli pomyślisz później, że rakietka porusza się zbyt wolno lub zbyt szybko, możesz po prostu ustawić tę liczbę na wyższą lub niższą.
Zachowanie Mnożenie wartości daje nam teraz dobrą prędkość do pracy, od tak niskiej jak -20 do tak wysokiej jak +20.
Następnie pora ustawić prędkość rakietki. W sekcji Fizyka dodaj zachowanie Ustaw prędkość i połącz je z zachowaniem Mnożenie wartości. Ustaw pole "x" na 0, a pole "y" na wynik zachowania Mnożenie wartości.
Wypróbuj to! Kiedy grasz w grę, rakietka powinna poruszać się, gdy przesuwasz joysticka w górę i w dół.
Jak prawdopodobnie zauważyłeś podczas testowania, nic nie powstrzymuje rakietki od opuszczenia ekranu. W następnej części dodamy granice, aby wszystko było w zasięgu wzroku.
Część 3: Granice gry
Zanim przejdziemy dalej, użyjmy pewnej przewidywalności i rozważmy dobre projektowanie gier. Rakietka gracza nie będzie znajdować się w centrum ekranu, ale bliżej krawędzi, gdy będziemy łączyć całą naszą grę. Spowoduje to problemy, ponieważ mamy elementy interfejsu użytkownika (np. joysticki), które będą nakładać się na nasze elementy gry (np. rakietki).
Zamiast używać całego ekranu jako obszaru gry, powinniśmy przesunąć granice, aby nasza rakietka nie znalazła się pod joystickiem, gdzie są nasze palce, żebyśmy nie mogli tego łatwo zauważyć. Dzięki temu nie zgubimy rakietki w pobliżu dolnej części obszaru gry. Możemy również użyć tego przesunięcia jako twardej granicy, aby zatrzymać nasze obiekty przed opuszczeniem pola gry.
Stuknij przycisk Specjalnych Obiektów i utwórz nowy Pusty Obiekt. Stuknij nowy pusty obiekt, aby otworzyć jego właściwości.
Utrzymuj jego tryb fizyki ustawiony na Ściana i wyłącz Passable. Ustaw jego kolor, abyśmy mogli go wizualnie zobaczyć, nieprzezroczysty ciemnoszary (#1F1F1FFF) dobrze pasuje. Ustaw tarcie na 0% i odbicie na 100%.
Teraz w zakładce Transformacja ściany ustaw skalę Y na 200%, a przesuń ją do górnej części obszaru ekranu. Następnie rozciągnij tak, aby pasowała do pełnej szerokości obszaru ekranu. Możesz także włączyć tryb przyciągania do siatki, aby pomóc w precyzyjnym umiejscowieniu.
Teraz sklonuj ścianę i przenieś kopię na dół.
Klonuj ponownie i ustaw skalę X na 200% zamiast tego. Następnie rozciągnij wysokość tak, aby dopasować się do ekranu i postaw ją na lewo od ekranu.
I znowu, sklonuj pionową ścianę i przenieś ją na prawą stronę ekranu. Teraz powinieneś mieć w pełni zamknięte pole gry:
Kiedy teraz grasz w grę, prawdopodobnie od razu zauważysz, że możesz przechodzić przez ściany, jakby ich nie było. Dzieje się tak z dwóch powodów; ustawiliśmy rakietkę na "Passable" i wymuszamy prędkość rakietki w każdej klatce. Jest to w porządku, po prostu musimy wdrożyć sposób, aby zatrzymać rakietkę od wchodzenia w ścianę.
Aby wdrożyć to zachowanie, sprawdzimy położenie gracza w stosunku do położenia ściany. Jeśli to prawda, wróćmy gracza do pole gry.
Aby ułatwić nam to wdrożenie, stuknij w górną ścianę i zmień punkt zakotwiczenia Y na 0%. To przywiąże pozycję ściany do samej jej dolnej części. Może być konieczne odblokowanie pól zakotwiczenia, stukając w ikonę Kłódka.
Podobnie z dolną ścianą zmień punkt zakotwiczenia dolnej ściany na 100%. To przywiąże dolną pozycję ściany do samej jej górnej części.
Teraz jesteśmy przygotowani do wdrożenia naszych zachowań sprawdzających granice. Stuknij w rakietkę i otwórz jej edytor zachowań.
Rozpocznij od umieszczenia zachowania Get Bounding Box z sekcji Logika. Powinno być domyślnie ustawione na użycie rakietki. To zachowanie da nam dolne/ lewe współrzędne i rozmiar rakietki.
Następnie, przeciągnij zachowanie Dodaj wartości z sekcji Logika i połącz je z zachowaniem Get Bounding Box. W właściwościach Dodawania wartości set pierwszą wartość na wynik Get Bounding Box "y", a drugą wartość na wynik "height".
Wynikiem tego dodawania będzie pozycja górna naszej rakietki. Dla czytelności możesz zmienić nazwę zachowania na coś użytecznego, na przykład „Dodaj wartości - Góra rakietki”, abyśmy mogli wyraźnie zobaczyć, co osiąga.
Teraz sprawdzimy, czy rakietka wchodzi w górną lub dolną ścianę. W sekcji Transformacja przeciągnij dwa zachowania Get Position i połącz je z zachowaniem Dodaj wartości w równoległych połączeniach.
Ustaw pierwsze zachowanie Get Position, aby śledzić dolną ścianę, a drugie zachowanie Get Position, aby śledzić górną ścianę. Możesz również nazwać te zachowania dla lepszej czytelności. Powinieneś mieć coś podobnego do tego:
Dla każdego zachowania Get Position dodaj i połącz zachowanie Odejmij wartości z sekcji Logika.
Właściwości dla Odejmij wartości połączonego z zachowaniem Get Position dla dolnej ściany ustaw pierwszą wartość na wynik Get Position Dolna Ściana "position_y". Następnie ustaw drugą wartość na Get Bounding Box "y".
Teraz dla właściwości w innej Odejmi wartości, podłączonej do zachowania Get Position dla górnej ściany, ustaw pierwszą wartość na wynik Get Position Górna Ściana "position_y". Następnie ustaw drugą wartość na wynik Dodaj wartości - Góra rakietki.
Te odejmowania powiedzą nam, jak daleko musimy „pchnąć” rakietkę, aby zatrzymać ją w granicach pola gry. Teraz musimy sprawdzić, czy musimy to zrobić, czy nie.
W sekcji logiki dodaj i połącz zachowanie Jeśli dla obu gałęzi zachowań.
Właściwości dla zachowania Jeśli połączonego z dolną ścianą ustaw pierwszą wartość na wynik powiązanego zachowania Odejmij wartości. Ustaw warunek na > ("Jest większe niż") i drugą wartość na 0.
Właściwości dla zachowania Jeśli połączonego z górną ścianą, ustaw pierwszą wartość na wynik powiązanego zachowania Odejmij wartości. Ustaw warunek na < ("Jest mniejsze niż") i drugą wartość na 0.
Oba te oświadczenia jeśli będą kontynuować wykonywanie, jeśli rakietka przekroczy każdą z ścian odpowiednio.
Jeśli rakietka wychodzi poza granice, chcemy wymusić zatrzymanie rakietki, aby nie mogła się już dalej poruszać przez resetowanie prędkości rakietki do 0, a następnie pchenia jej z powrotem do pola gry.
W sekcji Fizyka umieść i połącz zachowanie Ustaw prędkość dla każdej gałęzi. Na obu ustaw ich wartości prędkości X/Y na 0.
Teraz możemy pchnąć rakietkę z powrotem do gry. W sekcji Transformacja umieść i połącz zachowanie Przesuń do z każdą gałęzią.
W każdym zachowaniu Przesuń do pozostaw wartości Przesuń X na 0 i ustaw Przesuń Y na wynik Odejmij wartości w ich odpowiednich gałęziach. Następnie ustaw czas trwania na 0 sekund (natychmiastowe).
Cała ta sekcja, kiedy jest wykonywana, teraz sprawdzi, czy rakietka znajduje się w ścianie, jak daleko jest w ścianie, i wypchnie ją, jeśli zajdzie taka potrzeba. Teraz musimy wykonać ten łańcuch zachowań, gdy rakietka się porusza.
Dla uproszczenia na samej górze tego łańcucha zachowań dodaj zachowanie Zestaw zachowań z sekcji Niestandardowe i połącz je powyżej Get Bounding Box. Możesz nazwać je w coś użytecznego, na przykład "Sprawdź granice".
Uwaga: Zachowanie "Zestaw zachowań" nic не robi samo w sobie i jest używane tylko tutaj jako punkt startowy do sprawdzania, czy rakietka znajduje się poza granicami.
Następnie, w sekcji Niestandardowe umieść i połącz zachowanie Wykonaj zachowanie. W jego właściwościach stuknij w pole „Wybierz zachowanie”, a następnie wybierz zachowanie „Sprawdź granice”, które właśnie stworzyliśmy. Teraz przesuń zachowanie Wykonaj pod tym, gdzie pierwotnie ustawiliśmy prędkość rakietki dla ruchu rakietki. Połącz Wykonaj zachowanie z zachowaniem Ustaw prędkość z oryginalnego łańcucha ruchu rakietki.
Teraz, gdy rakietka aktualizuje swoją prędkość ruchu, zachowanie Wykonaj przeskoczy do naszego nowego łańcucha zachowań Sprawdź granice, gdzie sprawdzi, czy rakietka wyszła poza granice!
Wypróbuj to i zobacz, jak to działa!
Ostatnią rzeczą do zrobienia, zanim przejdziemy dalej, to przesuń rakietkę na lewą stronę pola.
Teraz, gdy mamy trochę miejsca, zbudujmy piłkę!
Część 4: Tworzenie piłki
W edytorze sceny utwórz pusty obiekt. Ustaw jego tryb fizyki na Fizyka i wyłącz Passable, aby piłka mogła się poruszać i fizycznie kolidować ze ścianami granicznymi. Ustaw tarcie na 0% i odbicie na 100%. Możesz również nadać temu obiektowi kolor biały (#FFFFFFFF). Dla uproszczenia możesz zmienić nazwę tego obiektu na "Piłka".
W zakładce transformacji ustaw skalę na X=25% i Y=25%, a pozycję na X=50% i Y=50%.
Następnie otwórz edytor zachowań dla piłki i nadamy jej trochę ruchu. W sekcji Niestandardowe umieść zachowanie Czekaj i ustaw na 3 sekundy.
Następnie umieść zachowanie Losowa liczba z sekcji Logika i podłącz do zachowania Czekaj. Dla pierwszej wartości ustaw -1.0, a dla drugiej wartości ustaw 1.0. Upewnij się, że zawiera "0", w przeciwnym razie losowo wybierze liczbę pomiędzy -1.0 a 1.0, w tym miejsca dziesiętne. To posłuży jako losowy "kierunek pitu" podczas pierwszego uruchomienia piłki.
Następnie umieść i połącz zachowanie Zastosuj siłę z sekcji Fizyka. Ustaw Siłę X=-1, a Siłę Y na wynik losowej liczby. To posłuży jako kierunek, w którym piłka się poruszy, ale 1 newton to niewiele siły, więc musimy również zmienić mnożnik. Ustaw mnożnik na 150 i przetestuj grę, aby zobaczyć, czy jest za szybko czy wolno. Możesz zmienić ten mnożnik według własnych upodobań. Piłka powinna zacząć się poruszać po 3 sekundach podczas gry, jakby została serwowana.
Podczas testowania piłka powinna odbijać się od ścian, ale przechodzić przez rakietkę. To normalne, ponieważ jeszcze nie wdrożyliśmy zachowań kolizji rakietek w piłce. Możesz również zauważyć, że piłka czasami zaczyna się obracać, czego nie chcemy, więc naprawmy to.
W edytorze zachowań piłki umieść w dowolnym miejscu zachowanie Zablokuj obrót z sekcji Transformacja i przetestuj jeszcze raz. Teraz piłka nie będzie się kręcić pod kontrolą.
Przed dodaniem zachowań do kolizji z rakietką znowu w edytorze sceny stuknij w rakietkę, a w właściwościach rakietki przejdź do zakładki etykiety. W polu tekstowym wpisz "Rakietka" i naciśnij przycisk +, aby dodać etykietę do rakietki.
Teraz wróć do edytora zachowań piłki. W sekcji Obiektów umieść w dowolnym miejscu zachowanie Kolizja. W właściwościach tego zachowania stuknij w zakładkę Etykiety i wybierz etykietę Rakietka, którą stworzyliśmy. Teraz, ilekroć piłka uderzy w jakikolwiek obiekt z etykietą "Rakietka", to to zdarzenie się wykona.
Co chcemy zrobić to wziąć aktualną prędkość piłki i odwrócić jej prędkość X. W ten sposób, jeśli piłka poruszała się w lewo, zacznie poruszać się w prawo, a odwrotnie. Chcemy również, aby piłka poruszała się odrobinę szybciej niż wcześniej, więc w miarę rozgrywki piłka będzie stopniowo przyspieszać.
Podłącz do zachowania Kolizja zachowanie Uzyskaj prędkość z sekcji Fizyka. Następnie połącz zachowanie Mnożenie wartości z sekcji Logika. Ustaw pierwszą wartość na wynik "prędkość_x" z Uzyskaj prędkość. W drugiej wartości ustaw wartość na -1.03. Wynik tej wartości mnożenia będzie ujemną prędkością X piłki, a także 3% wzrost prędkości. Więc zastosujmy tę zmianę następną.
Połączone z zachowaniem Mnożenie wartości dodaj zachowanie Ustaw prędkość z sekcji Fizyka. Ustaw prędkość X na wynik Mnożenie wartości i оставь prędkość Y jako aktualną prędkość.
Teraz, gdy grasz, piłka powinna odbić się od rakietki i zmienić kierunek z ledwie zauważalnym wzrostem prędkości.
Wszystko zaczyna się teraz składać! Piłka i rakietka ładnie się poruszają, ale kierunek pitu piłki się nie zmienia. Gdy piłka uderzy w rakietkę, powinna również zmienić kierunek pitu; jeśli piłka uderza bliżej górnej części rakietki, powinna wznosić się, a jeśli piłka uderzy bliżej dolnej części rakietki, powinna opadać. To doda warstwę złożoności i umiejętności, ponieważ gracze będą mieli pewną kontrolę nad tym, gdzie piłka się uda.
Aby dowiedzieć się, jak silnie powinniśmy okreslić ping-pong, będziemy musieli uzyskać różnicę pozycji pomiędzy piłką a rakietką. W sekcji Transformacja umieść dwa zachowania Uzyskaj położenie i połącz je szeregowo pod zachowaniem Ustaw prędkość. Pierwsze Uzyskaj położenie będzie śledziło Piłkę domyślnie. Zmień drugie Uzyskaj położenie na wynik "ObjectB_ID" z zdarzenia Kolizji.
Uwaga:"ObjectB" w tym przypadku byłby kolidującą rakietką, ponieważ jest to drugi obiekt związany z wydarzeniem kolizji, natomiast pierwszy obiekt ("ObjectA") byłby piłką.
Dodaj i połącz zachowanie Odejmij wartości z sekcji Logika. Ustaw pierwszą wartość na wynik "position_y" z pierwszego Uzyskaj położenie, które śledzi piłkę. Ustaw drugą wartość na wynik "position_y" z drugiego Uzyskaj położenie, które śledzi kolidującą rakietkę.
Następnie, dodaj i połącz zachowanie Zastosuj siłę z sekcji Fizyka. Ustaw wartości siły X na 0, a Y na wynik Odejmij wartości. Samo położenie różnicy nie będzie bardzo mocne, więc będziemy musieli również zmodyfikować mnożnik. Spróbuj użyć mnożnika 50 i zobacz, jak to działa w grze.
Podczas testowania, piłka powinna teraz zmieniać kąt pod jakim uderzysz w rakietkę. Piłka powinna wznosić się jeszcze wyżej, jeśli uderzy blisko górnej części rakietki, i pić niżej, jeśli uderzy blisko dolnej części rakietki. Jeśli piłka wznosi się w złym kierunku, spróbuj zamienić miejscami wartości w zachowaniu Odejmij wartości, a to powinno rozwiązać problem.
Jesteśmy prawie gotowi do zaimplementowania pełnego ruchu piłki! Wciąż pojawił się jeden drobny problem; nie ma ograniczenia, jak szybko może się poruszać! W rzeczywistości po pewnym czasie bez resetowania piłka może poruszać się tak szybko, że przechodzi przez obiekty. Powinniśmy wdrożyć ograniczenie prędkości piłki, więc nie może osiągnąć niezwykle wysokiej prędkości.
Po zachowaniu Zastosuj siłę umieść i połącz zachowanie Uzyskaj prędkość z sekcji Fizyka, aby uzyskać nową prędkość piłki. Pod tym, przeciągnij i połącz Maksimum oraz Minimum z sekcji Logika w celu uzyskania serii.
Właściwości maksimum ustaw pierwszą wartość na wynik "velocity_x" z Uzyskaj prędkość, a drugą wartość na -25. To spowoduje, że zwróci tę wartość, która jest największa.
Właściwości Minimum ustaw pierwszą wartość na wynik Maksimum, a drugą wartość na 25. To spowoduje, że zwróci wartość, która jest mniejsza, skutecznie nadając nam ograniczoną wartość prędkości X piłki w zakresie od -25 do 25. Nie wyżej i nie niżej!
Teraz musimy zrobić to samo dla prędkości Y piłki. Dodaj i połącz kolejne Maksimum i Minimum w serii. W nowych właściwościach Maksimum ustaw pierwszą wartość na wynik "velocity_y" z Uzyskaj prędkość, a drugą wartość na -10.
W nowych właściwościach Minimum ustaw pierwszą wartość na wynik nowego Maksimum, a drugą wartość na 10. To ograniczy Y jako prędkość w zakresie od -10 do 10. Możesz później zmienić te wartości, jeśli wolisz!
Teraz, kiedy mamy ograniczone wartości prędkości dla piłki, zastosuj je teraz. Dodaj i połącz zachowanie Ustaw prędkość z sekcji Fizyka. W jego właściwościach ustaw prędkość X na wynik pierwszego Minimum ograniczającego prędkość X, a prędkość Y na wynik drugiego Minimum ograniczającego prędkość Y.
Teraz, niezależnie od tego jak długo trwa mecz, piłka nie porusza się z niezwykle dużymi prędkościami. Prędkość Y jest również ograniczona, więc piłka nie powinna się bardzo wznosić.
Na końcu znane NFC, demonstrujące bardzo trudną i pomocną technologiczne wrogów, extreme to doładowania, które są koncie przesadzone, aby zrozumieć mechanikę gry. Ponieważ AI sygnalizuje, niższy poziom pod względem wydajności, rozważa rozważa, jaki najbardziej jest różnorodny strategia zastosowania, aby sk',['arraySize]<= 100}.head.vendorutils.TextConverterekundęciach rozgrywki na poziomie wzrostu AI, jakości i zachowania w zmiennych również za duże maksymalne wartości. Część 5: Sztuczna inteligencja rakietki. ### CREATORS NAVIGATIONS NOT USER THAT CAN MONITOR CREATORS BETA RESTRICTIONS User Index: 6538 631+6247 3416 4249 2016棋牌 4278>komentarz'>- nał='NoBubble' idAim 4685. 2695. Tą drogą upewnij się że wierzchem nad dostosowujesz róż 장소, 안전하 신제한.','') 📄='non-sy['kurzesycdl'] >]''.nT=disagree'/i','KurzePAKgob>3424${.HttpHeaders[0]{4037}}<902899는 kamagra ID '88007 '있다? '치료 내혈 걱정 투다. 후밍 &c 확정 19I 자신을 걱정하신 세상 중고 단체대구력 랍샤디의 인사팀 욕하는 시기 정신자존감:, 참여 حتى هل نحن محمّد دات عن أيّ جَرأَا على آهلّة التشكيك من تونسوالاتفاقيات المساحة الوطنية ، تم تحديدها لتصل في داء &ndus}

