‫Hej, witaj z powrotem.
‫W tym filmie zajmujemy się warunkami wygranej i przegranej.
‫To jedna z ostatnich rzeczy, którymi zajmiemy się w tym projekcie gry.
‫Przyjrzyjmy się teraz naszemu planowi sekcji.
‫Teraz już zaznaczyliśmy pierwsze pięć pozycji w naszym planie sekcji, a ostatnie dwa to efekty
‫specjalne oraz warunki wygranej i przegranej.
‫Chciałbym zamienić te ostatnie dwa i zająć się warunkami wygranej i przegranej tylko dlatego, że
‫jest to ostatnia z naszej logiki programowania rozgrywki, a efekty specjalne są kosmetyczne i bardziej przypominają końcowe poprawki, abyśmy
‫mogli poradzić sobie z tymi na samym końcu.
‫W tym filmie stworzymy funkcję zakończenia gry, abyśmy wiedzieli, kiedy gra została
‫wygrana lub przegrana.
‫A żeby wygrać grę, będziemy musieli policzyć liczbę wież na świecie, ponieważ
‫kiedy zniszczymy wszystkie wieże, wiemy, że wygraliśmy grę.
‫A jeśli sam czołg ulegnie zniszczeniu, możemy uznać to za stan utraty.
‫Wróciłem więc do trybu gry i pierwszą rzeczą, którą chciałbym zrobić, to stworzyć kolejne wydarzenie, które można wdrożyć
‫do planu.
‫Mamy funkcję startu gry, którą możemy wywołać z C++, ale jej logikę implementujemy w trybie
‫gry.
‫Blueprint Dzięki wydarzeniu Blueprint Implementable Event, chciałbym stworzyć kolejny za przegraną
‫grę.
‫Więc mam zamiar stworzyć funkcję void o nazwie Game Over.
‫W tym przypadku chciałbym wziąć boolowski parametr wejściowy o nazwie B one game.
‫I oczywiście będzie to wydarzenie możliwe do zaimplementowania w planie, ponieważ jedyną rzeczą, którą chciałbym
‫obsłużyć za pomocą tej funkcji, jest wyświetlanie, że przegraliśmy lub wygraliśmy grę i że możemy to zrobić na podstawie planów.
‫Mamy więc funkcję „game over”.
‫Teraz musimy wiedzieć, kiedy powinniśmy wywołać tę funkcję.
‫Po pierwsze, wiemy, że możemy wywołać tę funkcję, gdy przegramy grę, a tak
‫się stanie, jeśli czołg zginie.
‫Przejdźmy więc do naszej funkcji śmierci aktora w trybie dostrajania czołgów CP. Widzimy, że jeśli martwy
‫aktor jest czołgiem, to zajmujemy się zniszczeniem czołgu i ustawiamy włączony stan na
‫fałszywy.
‫Inną rzeczą, którą możemy tutaj zrobić, jest zakończenie gry, po prostu wywołując game over, a ta wartość logiczna będzie jedną z gier,
‫którą możemy przekazać jako fałsz.
‫Więc to dba o przegraną, przynajmniej od strony C++.
‫Teraz musimy wiedzieć, kiedy powinniśmy wygrać mecz.
‫Tutaj zmarł aktor.
‫Jeśli martwego aktora można rzucić na wieżę, wiemy, że właśnie zniszczyliśmy wieżę.
‫Byłoby to idealne miejsce do aktualizacji liczby wież lub zmiennej typu integer, która śledzi,
‫ile wież jest obecnie na świecie.
‫Ale już.
‫Aby to zrobić, potrzebujemy zmiennej do śledzenia liczby wież, więc możemy dodać
‫prywatną zmienną tutaj, w pliku H.
‫I chciałbym to zrobić tutaj na dole.
‫Więc mam zamiar utworzyć INT 32 i będę nazywać to docelowymi wieżami.
‫Teraz możemy zainicjować to od razu do wartości zerowej, ale musimy to zaktualizować, gdy
‫liczba wież się zmniejszy.
‫I musimy również ustawić to na liczbę wież na świecie.
‫Teraz moglibyśmy zakodować to na sztywno do czterech, ale co się stanie, gdy zaczniemy dodawać więcej wież do naszych poziomów?
‫Cóż, wtedy sprawa się trochę komplikuje.
‫Chciałbym więc zamiast tego zobaczyć, ile jest wież na świecie.
‫Teraz mógłbym stworzyć dla tego funkcję, która zwraca 32, a ta funkcja może dowiedzieć się, ile jest
‫wież na świecie i zwrócić liczbę.
‫Więc zamierzam wywołać tę funkcję, uzyskać docelową liczbę wież.
‫Więc przejdźmy dalej i nadaj tej funkcji treść w pliku CP.
‫Przejdę na sam dół i stworzę ciało funkcji, nie zapominając o wstawieniu
‫nazwy klasy przed nazwą funkcji.
‫Teraz to zwróci koniec 32 i musimy zdecydować, w jaki sposób dowiemy się, ile jest
‫wież.
‫Teraz w statyce rozgrywki istnieje funkcja o nazwie Pobierz wszystkich aktorów klasy.
‫Oto dokumentacja.
‫Mówi Znajdź wszystkich aktorów w świecie określonej klasy.
‫Musimy więc określić konkretną klasę.
‫Teraz ta funkcja ma trzy wejścia.
‫Pierwszy to obiekt kontekstu światowego.
‫To jest łatwe.
‫Wiemy, jak sobie z tym poradzić.
‫Ale dalej mamy podklasę PT aktora i nazywa się to klasą aktora.
‫Teraz widzieliśmy, że funkcje, które wymagają podklasy PT, mogą akceptować klasę u jako dane wejściowe, a trzecim
‫parametrem jest tablica T.
‫Wymaga tablicy t wskaźników aktora, która jest przekazywana jako referencja i nie jest stałą referencją, która wydaje
‫się sugerować, że ta funkcja może po prostu zmienić ten parametr wejściowy o nazwie act.
‫Oto kolejna wskazówka, że tak właśnie jest, jest to wywołanie aktorów.
‫Jest to parametr out, co oznacza, że przekazujemy go, a następnie po wywołaniu funkcji ma wartości, które zostały
‫w nim wprowadzone przez funkcję.
‫Możemy więc myśleć o tym jako o rodzaju danych wyjściowych dla funkcji.
‫Teraz jest napisane tutaj dla parametrów, klasa aktora to klasa aktora do znalezienia musi być określona lub
‫tablica wyników będzie pusta.
‫Chcemy znaleźć wszystkie wieże, a wyjściowi aktorzy to tablica wyjściowa aktorów określonej klasy.
‫Więc kiedy już wywołamy tę funkcję i przekażemy tablicę, kiedy funkcja się
‫zakończy, ta tablica będzie zawierała wskaźniki do wszystkich aktorów w świecie określonej klasy.
‫Wiemy więc, że ta funkcja wymaga obiektu kontekstu świata.
‫Teraz, jeśli zamierzamy wywołać to z poziomu trybu gry, możemy przejść do tego w następnym.
‫Potrzebujemy podklasy PT określającej aktora A i wiemy, że może to być nowy wskaźnik klasy.
‫Teraz musimy określić klasę do znalezienia.
‫Jeśli określimy aktora, otrzymamy dużą tablicę wypełnioną wskaźnikami do każdego aktora na świecie.
‫Ale nie potrzebujemy wszystkich aktorów.
‫Potrzebujemy tylko wież, abyśmy mogli użyć statycznej klasy wieży, która zwróci nam nową klasę reprezentującą
‫klasę A Tower C++.
‫Teraz trzeci parametr to tablica T wskaźników aktora.
‫Jeśli więc utworzymy zmienną lokalną typu tablica T określająca wskaźnik aktora w nawiasach ostrych, wtedy możemy
‫nazwać cię statystyką gry.
‫Spraw, aby wszyscy aktorzy z klasy przeszli przez te trzy dane wejściowe, a rezultatem tej akcji będzie to,
‫że nasza tablica wież powinna zawierać wskaźniki do wszystkich wież w naszym świecie.
‫Teraz tacka jest ładną klasą kontenera, która może zawierać wiele elementów, o ile wszystkie mają ten
‫sam typ.
‫A ta klasa ma całkiem sporo funkcji, z których możemy skorzystać podczas przechowywania przedmiotów na tacy.
‫Teraz przejdę do samego dołu i pokażę tę funkcję o nazwie Num Short cztery liczby
‫i mówi Zwraca liczbę elementów w tablicy.
‫Możemy więc użyć tej funkcji, aby uzyskać liczbę elementów w naszej tablicy, gdy mamy już wszystkie wieże na
‫świecie.
‫Więc jeśli nazwiemy liczbę Wieży, możemy użyć jej jako wartości zwracanej przez naszą funkcję.
‫Jak widzieliśmy, ustawiliśmy naszą wartość zwracaną dla tej funkcji, którą nazywamy get target tower count jako
‫n 32, możemy zwrócić liczbę elementów w tablicy naszej wieży.
‫Chciałbym więc rzucić wyzwanie zaimplementowaniu tej funkcji pobierania docelowej liczby wież.
‫Więc utwórz lokalną tablicę t aktora typu A.
‫Możesz nazwać to wieżami lub jak chcesz.
‫Teraz użyj swojej gry, zagraj w funkcję statyki, zdobądź wszystkich aktorów klasy i upewnij się, że podajesz
‫prawidłowe parametry wejściowe.
‫Teraz, po wywołaniu tej funkcji, twoja tacka będzie zawierać wskaźniki do wszystkich wież w
‫naszym świecie, więc możesz po prostu zwrócić liczbę wież za pomocą funkcji num, która należy do
‫klasy tacy.
‫Więc śmiało, zatrzymaj wideo i zaimplementuj.
‫Uzyskaj teraz liczbę wież docelowych.
‫Dobra.
‫Więc tutaj jest docelowa liczba wież.
‫Teraz pierwszą rzeczą, którą zamierzam zrobić, jest utworzenie lokalnej tablicy t określającej wskaźnik aktora jako typ
‫elementu, który ta tablica powinna przechowywać.
‫I zamierzam nazwać te wieże, teraz muszę nazwać was statystykami rozgrywki, więc muszę się upewnić, że
‫ten nagłówek jest uwzględniony.
‫Teraz widzę, że tak jest, ponieważ używamy go w niektórych innych naszych funkcjach, ale dobrze jest to
‫sprawdzić.
‫Następnie mogę wykorzystać statystyki rozgrywki i zadzwonić do wszystkich aktorów z klasą.
‫Teraz pierwsze dane wejściowe to obiekt kontekstu świata, który zamierzam przekazać w tym, a następnie
‫podklasa reprezentująca klasę aktora.
‫Wspomniałem, że możemy użyć statycznej klasy tower, która zwróci klasę U reprezentującą klasę
‫tower.
‫Teraz znowu, dobrym pomysłem jest upewnienie się, że uwzględniamy wieże, którymi jesteśmy.
‫Teraz trzecim i ostatnim parametrem będzie taca i możemy przejść przez wieże.
‫Więc kiedy ta funkcja zostanie wywołana, wieże będą teraz zawierać wskaźniki do wszystkich wież na
‫świecie.
‫W rzeczywistości, gdyby istniały jakieś obiekty klasy, która wywodzi się z wież, również je otrzymalibyśmy.
‫Ponieważ mamy tablicę towers, możemy po prostu zwrócić liczbę elementów w tej tablicy.
‫Więc użyję instrukcji return i użyję towers dot num, a teraz mamy docelową liczbę wież.
‫Więc to jest świetne.
‫Możemy to wykorzystać do zainicjowania naszej liczby wież, które nazwaliśmy wieżami docelowymi i możemy to zrobić, gdy
‫zaczynamy grę.
‫Więc zamierzam to tutaj umieścić i zająć się rozpoczęciem gry.
‫Właściwie chciałbym, żeby to była pierwsza rzecz, którą zrobimy.
‫Więc zamierzam wziąć docelowe wieże i ustawić je na równą wartości zwracanej z uzyskania docelowej liczby wież.
‫Teraz docelowe wieże powinny być inicjowane do liczby wież w naszym świecie.
‫To świetnie, ale musimy aktualizować ten licznik za każdym razem, gdy umiera wieża, co oznacza,
‫że musimy przejść do funkcji śmierci aktora.
‫I tutaj, jeśli rzuciliśmy martwego aktora na zniszczoną wieżę, to po tym, jak zajmiemy
‫się zniszczeniem, powinniśmy zaktualizować naszą zmienną docelowej wieży, aby móc powiedzieć docelowe wieże i użyć operatora dekrementacji.
‫Możemy użyć operatora dekrementacji post lub operatora sytuacji.
‫Obie te czynności będą skutkowały tym samym działaniem, które polega na zabraniu docelowych wież i odjęciu od nich jednej.
‫Teraz, gdy tylko odejmiemy jeden od docelowych wież, teraz musimy sprawdzić, czy docelowe wieże
‫osiągnęły zero.
‫Więc zamierzam umieścić tutaj, jeśli sprawdź, czy wieże Target osiągnęły zero.
‫Teraz, jak tylko to się stanie, wiemy, że gra powinna się skończyć, więc możemy
‫wywołać przejście funkcji game over w prawdziwej grze 4b1, ponieważ zniszczyliśmy wszystkie wieże i możemy uznać to za wygraną.
‫Teraz przejdźmy dalej i skompilujmy nasz kod.
‫Teraz, z powrotem w edytorze, chciałbym zrobić, zanim zakończymy ten film, przejść do planu trybu
‫gry.
‫Oto melodia dźwiękowa.
‫Dzięki trybowi gry i mamy tę grę startową.
‫Tworzymy widżet rozpoczęcia gry, dodając go do widoku, abyśmy mogli zobaczyć
‫licznik czasu rozpoczęcia gry.
‫Wiemy więc, że nazywa się start game, ale musimy również zaimplementować naszą grę z możliwością wdrożenia
‫planu.
‫Więc kliknę prawym przyciskiem myszy i wpiszę game over i oto nasze wydarzenie, game over i sprawdź to.
‫Zauważ, że mamy tę jedną grę i jest to wartość logiczna.
‫Więc kiedy wywołujemy tę funkcję z C++, przekazujemy wartość logiczną dla B jednej gry.
‫Węzeł zdarzenia planu usuwa małą literę B i umieszcza spację między jedynką a grą jako coś w rodzaju uprzejmości
‫dla nas.
‫Teraz stworzymy kilka widżetów, abyśmy mogli zobaczyć, kiedy wygraliśmy lub przegraliśmy grę, ale zrobimy
‫to w przyszłym filmie.
‫Na razie chcę tylko potwierdzić, że jest to wywoływane i wywoływane poprawnie, więc mogę to zrobić z
‫węzłem wydruku i możemy wydrukować wartość na podstawie tej wartości logicznej.
‫Jeśli kliknę i przeciągnę tę wartość logiczną bezpośrednio do wejścia w łańcuchu, zobaczymy, że istnieje konwersja wartości logicznej
‫na łańcuch.
‫Jest to kolejny wygodny węzeł konwersji, który przekonwertuje dla nas wartość logiczną na łańcuch, a jego
‫funkcjonalność polega na konwersji na słowo prawda lub fałsz na podstawie wartości logicznej wartości
‫logicznej.
‫Dlaczego więc tego nie przetestujemy?
‫Mam zamiar skompilować i uruchomić odtwarzanie.
‫W porządku, teraz jestem gotów spróbować wygrać mecz.
‫Mam nadzieję, że nie przegram, zanim to zrobię.
‫Przegrałem grę i możesz zobaczyć fałszywe wydrukowane w lewym górnym rogu ekranu.
‫Więc teraz wiemy, że przegrana w grze powoduje, że w przypadku zdarzenia zostanie odwołany, a fałsz zostanie przekazany, musimy
‫upewnić się, że prawda jest przekazywana, gdy wygrywamy grę.
‫Spróbujmy więc zabić wszystkie wieżyczki.
‫Więc muszę naprawdę postarać się nie oberwać.
‫Och, już dostałem.
‫To jest dość trudne.
‫I tam idziemy.
‫Prawda jest wydrukowana w lewym górnym rogu ekranu.
‫Pojawia się tylko na kilka sekund, więc mogłeś to przegapić.
‫Okej świetnie.
‫Więc teraz mamy warunki wygranej i przegranej.
‫Następnym krokiem jest pokazanie tego w formie widżetu na ekranie, abyśmy nie polegali na
‫węźle łańcucha drukowania.
‫Podsumowując, mamy teraz warunki wygranej i przegranej i jest tylko kilka rzeczy, które
‫musimy zrobić, aby to dopracować, na przykład stworzyć widżety, które informują gracza, że wygrał lub przegrał grę.
‫Policzyliśmy również liczbę wież za pomocą tacy i funkcji statystyk rozgrywki.
‫Zdobądź wszystkich aktorów z klasy.
‫Dobra robota.
‫Ta gra naprawdę nadchodzi.
‫W następnym filmie utworzymy te widżety, a następnie będziemy mogli zacząć dodawać efekty specjalne i
‫dopracowywać naszą grę.
‫Do zobaczenia w następnym filmie.