Jako, że czegoś się nauczyliśmy by zrobić Tux Hunt czy inną grę - zaczniemy ją projektować. Naszym zadaniem jest stworzenie gry a'la Duck Hunt - oczywiście od zera.
Duck Hunt to prosta gra automatowa, która ukazała się na Famiconach i NESach (i na Pegasusach - bo Pegasus to piracki Famicon), w której latają sobie kaczki a my musimy je zestrzelić.
Taka rozgrywka dla burżujów. Oczywiście tam się strzelało z pistoletu laserowego, ale my nie mamy takich technologii, więc będziemy klikać myszką :)
Nasza gra luźno będzie inspirowana tym tytułem - trzeba by grę bardzo obserwować by zrobić bardzo dobrą kopię, ale nam aż tak nie jest to potrzebne.
Nowy projekt
Oczywiście zakładamy nowy projekt o nazwie np. TuxHunt. Dodajemy obiekt controller, który na razie nie będzie używany. Zróbmy na razie mechanikę strzelania do pingwina.
Grafika
Na OpenGameArt znalazłem taką oto grafikę pingwina na licencji CC-BY 3.0, czyli do użytku komercyjnego:
Zdjęcie to jest przerobione i ma "lepsze tło".
Mała prośba - w Collision Checking zaznacznie Precision (zamiast Rectangle). Rectangle bierze prostokąt z grafiki (czyli nawet jak nie traficie w pingwina, a w prostokąt w którym jest obudowany - to zadziała). - bądźmy precyzyjni ;)
Obj_tux
Skoro mamy pingwina, trzeba go oprogramować. Dodajmy obj_tux i dajmy do zdarzenia "puszczonego lewego przycisku myszy", że ilość punktów jest zwiększona o 100, a pingwin eksploduje (xD) i zostaje zniszczony.
Przy okazji dajmy mu grafikę już :)
score = score + 100;
effect_create_above(ef_explosion, x, y, 1, c_red);
instance_destroy();
Score to zmienna globalna. O zmiennych globalnych mówiliśmy (chyba) przy marynarzyku - ogólnie działają w obrębie całej gry. Są jednak trzy zmienne, które są wbudowane w grę - Score, Lives i Health. Nie musimy ich wykorzystywać, ale już są wbudowane.
Effect create above tworzy eksplozję, wałkowaliśmy to
Instance_destroy() to funkcja, która usuwa instancję obiektu - albo w skrócie obiekt z planszy. Czyli jeśli naciśniemy myszką to Pingwin zostanie usunięty z egzystencji. Ogólnie możliwe, że dwie lekcje będą teoretyczne - o Git (przyda się do tworzenia gier) i Instancje. Instancje są wręcz bardzo ważne, gdyż musimy jakoś tworzyć nowe obiekty - na przykład strzelanie w grze może tworzyć obiekt "kula", a my tego nie omówiliśmy (z tego co pamiętam).
Ilość strzałów
Bardzo trudno to oszacować, ale w DH mieliśmy 3 strzały na rundę (i dwie kaczki). Zróbmy taki teoretyczny (będziemy musieli to zrobić ładnie) system liczenia pocisków. Każde kliknięcie odejmie jeden strzał, więc jak ktoś nie ma strzałów to nie może zabić pingwiniastego.
W obj_controller w Create dajemy
global.ammo=3;
Czyli tworzymy zmienną globalną global.ammo z wartością 3.
Dodajmy w tym samym obiekcie event "Global Left released" (mysz), czyli jeśli ktoś gdzieś kliknie w grze (niekoniecznie na pingwina) to
global.ammo=global.ammo-1;
Odejmie 1 od global.ammo.
Teraz w obj_tux w kodzie, który usuwa pingwinka zróbmy ifa (cały kod wygląda tak)
if(global.ammo>=1)
{
score = score + 100;
effect_create_above(ef_explosion, x, y, 1, c_red);
instance_destroy();
}
Jeśli global.ammo jest większe lub równe 1 - wykonaj kod.
Na zakończenie
Dziękuję za uwagę i zachęcam do testowania naszego kodu. Dzisiaj nauczyliście się (prawdopodobnie) o wbudowanych zmiennych globalnych i niszczeniu obiektów (instancji obiektów). Mam nadzieję naturalnie, że Wam się podobało.
zachęcam do
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
excellent pl-artykuly...i like it..i appreciate your pl-artykuly...
Thanks for sharing..
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
jakich silnikow graficznych uzywasz?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Tzn. gra powstaje w Enigmie, czyli w zasadzie bez silników (sam oprogramowujesz). Gra używa biblioteki OpenGL (1 / 3, GLES chyba nie działa ciągle)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit