Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Project Spark - kurs tworzenia gier część 1, programowanie skryptów

Kilka dni temu razem z tysiącami innych graczy dostałem spóźniony prezent świąteczny. Klucz do beta testów jednej z najbardziej ciekawych gier jaka powstała. O ile można ją nazwać grą. Chodzi oczywiście o grę Project Spark. A może bardziej poprawnie trzeba byłoby napisać edytor do tworzenia gier. Bo granica miedzy grą a edytorem dla programistów i grafików jest tutaj zupełnie rozmyta. Każdy może próbować tworzyć własne gry, każdy może grać w cudze gry a nawet otworzyć ich kod by skorzystać z wybranych fragmentów lub zrobić własną kopię cudzej gry jako remix z kilkoma zmianami. Praktycznie pełna dowolność. Można powiedzieć że to odpowiednik klocków LEGO dla każdego kto chciałby nauczyć się programować gry. I taki będzie cel mojego drugiego wpisu na blogu. Prosty kurs tworzenia gier. Dla początkujących

Plan na pierwszą lekcję jest następujący. Chcemy stworzyć bohatera dla naszej przyszłej gry. To typowy wojownik znany z RPG więc wyposażymy go w miecz oraz kuszę. Tak by mógł zarówno walczyć wręcz jak i strzelać do odległych celów co może nam się przydać gdy będziemy projektowali późniejsze zadania. Zaprezentuję także jak stworzyć mapowanie gamepada na poszczególne akcje. Zdefiniujemy przycisk odpowiedzialny za atak, za zmianę aktywnej broni oraz za jej wyciągnięcie oraz ukrycie. Tak by nasz bohater nie musiał biegać cały czas z bronią w ręku co jest domyślnym zachowaniem w Project Spark. Specjalnie wybrałem taki zestaw akcji by móc pokazać kilka prostych operacji na zmiennych, widoczności obiektów itp.

r   e   k   l   a   m   a

Pierwszym krokiem po stworzeniu pustego projektu. Domyślne ustawienia to gra przygodowa z trzeciej osoby. Tak więc mamy całkowicie pusty świat oraz pojedynczy obiekt bohatera. Obiekt taki ma podstawowy wygląd który możemy modyfikować zmieniając mu kolory, ubrania, dodatki a nawet przypisać do niego inne elementy z czego skorzystamy w dalszej części tego kursu. Elementy te możemy edytować w edytorze obiektów w którym znajdziemy także bardziej zaawansowane opcje jak domyślne wartości elementów takich jak prędkość ruchu, stożek widzenia czy choćby ustalić jak działa fizyka na naszego bohatera. Drugim kluczowym elementem powiązanym z każdym obiektem w grze jest skrypt zachowania. Czyli tzw. mózg. To najważniejszy element każdego obiektu i większość kursu spędzimy tworząc kolejne zasady sterowania

Jak widać domyślna logika jest banalnie prosta. Na początku mamy regułę która przypisuje naszego bohatera do drużyny pierwszej. Ta reguła posiada warunek 'Once' co oznacza że wykona się tylko jeden raz niezależnie od tego ile razy będzie przetwarzany dany skrypt. Następne dwie linijki to zdefiniowanie domyślnej kamery która w tym przypadku podąża za graczem oraz modyfikacja interfejsu tak by wyświetlał pasek z ilością punktów życia naszego bohatera. Reszta skryptu to mapowanie przycisków kontrolera na domyślne akcje. Całość skryptu ma proste wartości ale jak w każdym edytorze programowania możemy je bardzo mocno zmodyfikować lub stworzyć coś zupełnie odmiennego. W Project Spark dostępnych są setki bloków z poszczególnymi akcjami a każdy z nich można łączyć z innymi np. modyfikatorami, tworzyć wiele stron skryptu lub przełączać całe skrypty. Możliwości są w zasadzie nieograniczone. Od prostych typu atak po obliczanie wektorów przecięcia pomiędzy obiektami w przestrzeni 3D. Domyślnie nasz bohater ma przypisaną walkę do przycisku X oraz strzelanie do przycisku Y. Czeka nas więc sporo modyfikacji.

Nasza gra będzie posiadała odmienne sterowanie. Jako uniwersalny atak będziemy używali przycisku X tak by przycisk Y był wolny na jakieś przyszłe akcje. Dodatkowo zdefiniujemy przycisk LB jako wyciągnięcie aktywnej broni oraz RB jako jako zmianę aktywnej broni. Tak by gracz naciskając X domyślnie walczył wręcz ale tylko jedno naciśnięcie klawisza LB powodowało że bohater sięgnie po noszoną broń. Taki rodzaj sterowania będzie dużo bardziej ciekawy a przy okazji posłuży do zaprezentowania kilku kluczowych mechanizmów programowania takich jak zmienne.

Zacznijmy od zdefiniowania dwóch zmiennych. Pierwsza z nich o nazwie 'hero use weapon' o typie binarnym będzie określała czy nasz bohater w danej chwili trzyma w ręku broń. Druga zmienna binarna o nazwie 'hero weapon type' określi czy jest to broń ręczna czy dystansowa. Obie zmienne ustalamy z parametrem 'global' tak by móc korzystać z nich także w innych skryptach w odmiennych obiektach. Należy o tym pamiętać ponieważ domyślnie zmienne są lokalne dla pojedynczego obiektu a w jednym z kolejnych kroków będziemy się do niej próbowali odwołać z zewnątrz. Zmienne inicjujemy na początku reguły głównej z parametrem 'Once' tak by wykonały się tylko za pierwszym razem

Następnym krokiem będzie zmiana tych wartości, przypisana do poszczególnych przycisków. Wykonywane operacje to proste zaprzeczenie binarne przełączające wartość prawda na fałsz i odwrotnie. Mamy więc typową strukturę 'warunek' oraz 'akcja'. Dodatkowo kolejne reguły możemy przypisać do danego warunku stosując wcięcia. W naszym przypadku dodałem tam wywołanie drugiej strony skryptu o nazwie 'equipment' która za chwilę utworzymy. Warto zauważyć że skrytpy w Project Spark działają na zasadzie maszyny stanu więc poza wywołaniem 'call' które uruchamia daną stronę skryptu możemy także wywołać 'switch' która trwale przełączy aktywną stronę skryptu.

Kolejnym elementem będzie umieszczenie symbolu aktywnej broni na ekranie. Jest to w konieczne w naszej grze ponieważ gracz może przełączać aktywną broń przyciskiem 'RB' nawet wtedy gdy bohater nie trzyma jej w ręku. Gracz musi wiedzieć jaka broń zostanie użyta zanim zdecyduje się ją wyciągnąć przyciskiem 'LB'. Reguła jest bardzo prosta i przypomina wcześniejsza regułę domyślną która pokazywała pasek życia. By narysować symbol elementy zwyczajnie wybieramy go z galerii. Gra będzie wiedziała że reguła dotyczy grafiki 2D jako elementu interfejsy więc automatycznie zrobi dla nas odpowiednią grafikę. Całość skalujemy by odpowiednie wygladała na ekranie. Reguła powinna działać automatycznie i zmieniać obrazek broni zgodnie z wartościa zmieniającej się zmiennej 'hero weapon type'

Następnie tworzymy nową stronę w naszym skrypcie i nazywamy ją 'equipment' tak by pasowała do wcześniejszego wywołania. W zależności od ustawionych zmiennych nakazuje ona silnikowi gry wyposażyć danego bohatera w miecz lub kuszę. Obiekty te wybieramy z galerii przedmiotów. Warto zwrócić uwagę na polecenie zniszczenia poprzedniego ekwipunku. Jest to konieczne ponieważ w naszym skrypcie wybieramy obiekt z galerii jako funkcja 'create' a to oznacza każdorazowe stworzenie obiektu przy naciśnięciu przycisku zmiany broni. Jeżeli usuniemy polecenie zniszczenia aktywnie używanej broni to bohater ją wyrzuci na ziemię, tak samo stanie się jeżeli wybierzemy funkcję 'unequip'. A tym samym każdorazowa zmiana broni spamowałaby kolejne instancje przedmiotów leżących u stóp naszego bohatera.

Gdy całość jest gotowa wracamy do naszej pierwszej strony skryptu i dodajemy właściwy atak. Reguła jest oczywista. Całość powinna działać poprawnie. Gracz będzie mógł zmieniać aktywną broń zarówno gdy trzyma ją w ręku jak również gdy jest ona w ekwipunku. Gra automatycznie dostosuje dany atak do broni w jaką wyposażyliśmy bohatera. Oczywiście wszystko to możemy dalej modyfikować dodając kolejne klocki. Na poniższym przykładzie dodałem blok 'strzała z kuszy' za atakiem dystansowym który jest nadmiarowy ale pokazuje że możemy strzelić czymkolwiek.

Na tym etapie całość powinna już działać ale to nie koniec naszej pierwszej lekcji. Nie podoba mi się to że broń pojawia się w ręku bohatera znikąd a następnie znika. Nie wygląda to zbyt profesjonalnie. Zdecydowanie lepiej byłoby gdyby bohater miecz miał przypięty do pasa. By osiągać taki efekt koniecznie będzie wykonanie złożenia modelu naszego bohatera z modelem miecza. W tym celu otwieramy edytor postaci i przechodzimy do sekcji 'attachment'. W tym edytorze możemy wybrać dowolne obiekty 3D z galerii i przypiąć je do naszego bohatera. Wybieramy więc miecz i przypisujemy punkt połączenia do ciała naszego bohatera. Możemy wybrać różne miejsca ciała wiec wybieramy tułów. Następnie przesuwamy wybrane obiekty w interesujące nas miejsce, skalujemy, obracamy. Tak by miecz znalazł się przy pasie.

Gdy uruchomimy naszą grę to natychmiast zauważymy zabawny problem. Bohater ma za pasem miecz ale gdy naciskamy by użył broni to magicznie pojawia mu się w ręce nowa instancja. Tak wiec ma jeden miecz za pasem a drugi w ręce. Nie do końca to chcieliśmy osiągnąć. By rozwiązać ten problem konieczne będzie wykorzystanie unikalnej cechy gry Project Spark a mianowicie: każdy obiekt ma mózg. Tak samo jak mózg ze skyptem posiada nasz bohater tak samo identyczny mózg posiada miecz. Tym razem wiec zamiast zaznaczać obiekt bohatera zaznaczamy obiekt miecza. Gra pokazuje nam dokładnie takie same opcje jak w przypadku bohatera. Możemy zmieniać wygląd, cechy lub rozpocząć edycję mózgu naszej broni. Gdy otworzymy edytor skryptu zauważamy że domyślnie jest tam reguła pozwalająca na jej podnoszenie. Nie jest ona nam potrzebna więc możemy ją usunąć. Zamiast tego dodajemy prosta regułę ukrycia. Jeżeli nasz bohater używa miecza to ukrywam miecz przypięty do pasa. Dlatego właśnie na początku naszej lekcji ustaliliśmy że zmienne określające broń w użyciu ustalimy jako globalne. Dzięki temu są one widoczne pomiędzy obiektami

No i gotowe. Mamy postać do naszej gry. Całość będzie działała ale jeżeli chcemy by nasza gra była zrobiona porządnie to warto zająć się logiką ustalania aktywnego wroga, unikami, trybami obsługi kamery gdy mamy przeciwnika na celowniku itp. To kilka kolejnych w miarę prostych reguł. Wszystko jednak w swoim czasie. Oczywiście zależy to od zainteresowania tematem tworzenia gier w Project Spark. Jeżeli temat będzie dla czytelników DP ciekawy to spędzę czas na zrobienie kolejnych części kursu. Ale jak łatwo się domyślić jest to dosyć czasochłonne więc po ilości odsłon oraz komentarzy ocenię czy jest to temat wystarczająco interesujący. Jeżeli kogoś ten wpis zainteresował i chciałby dowiedzieć się czegoś więcej o tej aplikacji to polecam także kanał tematyczny na YouTube na którym autorzy gry pokazują poszczególne funkcje edytora

W następnym odcinku...

W następnym odcinku pokazałem jak modelować własny poziom. Modelujemy teren, używamy obiektów, ustalamy oświetlenie. Tak by finalnie stworzyć ładnie wyglądający dom hobbita. Wynik wygląda jak na poniższym obrazku. Jeżeli ktoś jest zainteresowany to zapraszam do przeczytania drugiej części artykułu

Od dziś Project Spark jest dostępny dla każdego za darmo

Od 18 marca 2014 nie są wymagane klucze beta. Każdy może ściągnąć aplikację i tworzyć własne gry bez potrzeby wcześniejszej rejestracji. Zlikwidowano także abonament Spark Time który wcześniej ograniczał możliwość grania w gry używające DLC. Teraz każdy może grać we wszystko za darmo nawet jeżeli nie odblokował samemu zawartości DLC.

Project Spark - Sklep Windows 8.1

Na potrzeby tego kursu założyłem dodatkowe konto w grze gdzie będę publikował kod dla poszczególnych lekcji. Aktualnie są tam tylko najnowsze lekcje. Zapraszam. SatiricalCrab94.  

porady programowanie gry

Komentarze