Game maker tutorial - Arkanoid

Ostatní jazyky GameMaker Jednoduché hry Game maker tutorial - Arkanoid

Dnes si vytvoříme hru zvanou Arkanoid. Určitě vám něco říká věhlasné pinkání míčkem do cihliček a následné odražení jej od pálky aby nespadl.

Je to velice jednoduché: Začneme přidáním spritů.

A to sice tři sprity pálky -> velkou, normální a malou. Poté ještě sprite míčku a cihliček. Asi takto:

Nyní si vytvoříme objekt pálky, přiřadíme mu sprite bat_normal a zaškrtneme solid. Přidáme mu prozatím jen eventy create, keyboard/left a keyboard/right.
V create si vytvoříme proměnnou gamespeed a nastavíme jí hodnotu 10.
Poté do left přidáme podmínku z control pro kontrolu volného místa (hned tu první). Souřadnice zadáme x: x - gamespeed; y: y;
Poznámka: pokud budete takto kontrolovat volné místo, může se stát při zaseknutí v objektu, že funkce bude stále vyhodnocovat místo jako kolizní. Je lepší tedy od x-ové souřadnice vytvářet rozdíl např. pomocí sprite_width / 4 - čímž sáhnete kousek za okraj spritu a kolize se již nebere vzhledem ke kolizní masce a právě kolidujícímu předmětu, ve kterém je těleso zaseklé, ale dívá se za něj a zjišťuje jestli je tam volné místo
Pod podmínku vložíme jump to position z move a souřadnice budou stejné jako předešlé.

To samé udělejte u right s tím že prohodíte znaménka.

Nyní si vytvořte room a přidejte někam dolů do prostředka objekt pálky a hru si vyzkoušejte.

Ještě než rozpohybujeme míček tak si vytvoříme dva sprity o velikostech roomu 640x16 a 16x480. Dejte jim třeba černou výplň ať sou pěkně vidět.

Nyní si vytvoříme 3 objekty (obj_horizontal_up, obj_horizontal_dow­n, obj_vertical), kterým přiřadíme patřičný sprite, odškrtneme visible a zaškrtneme solid.

Přidáme je do mapy (odškrtněte si delete underlying).

Vytvořte si objekt ball kterému přiřaďte zatím jen sprite a vložte jej do mapy.

Teď přidáme kolize a rozpohybujeme míček.
Otevřeme si míček. Přidáme nejprve step. Popíši vám co chci udělat. Přidáme podmínku, že pokud ještě nezačala hra tak že se míček bude pohybovat s pálkou.
Ale musíme trošku poupravit sprity. U pálek nastavíme x na prostředek a y na 0. U míčku nastavíme y na dolní hranici a x na střed.

Teď již můžeme napsat do bloku pouhé x = obj_bat.x a y = obj_bat.y a ještě musíme zastavit pohyb klepnutím na prostředek v akci start moving in a direction.

Ještě přidáme kolizi se zarážkami. Horní, postraní zarážky a pálka budou mít pohé bounce a u dolní se bude nastavovat proměnná start na 0.

Ještě přidejte event create kde nastavte proměnnou start na hodnotu 0 a přepněte se do objektu pálky. Přidejte event keyboard_keypres­s/space.
Do kterého vložte zase podmínku na start a do bloku vložte nastavení start na 1 a rozpohybování míčku do rohových stran rychlostí řekněme 7.

A když nad tím tak přemýšlím můžete vlastně smazat z mapy kuličku a do obj_bat do eventu create přidat akci create instance obj_bat na souřadnicích x,y.

Hru si vyzkoušejte teď už je to vážně pěkné a můžete se vrhnout na cihličky.
Vytvořte proto objekt obj_stone, kterému nepřiřazujte žádný sprite, bude sloužit jako rodič a zastupovat všechny ostatní cihličky (ušetří nám mnoho práce).

Do objektu obj_ball do kolize s obj_stone přidejte zvýšení skóre o jedna. Pod to bounce self against all objects. A ještě přidejte destroy other instance.

Teď si už jen popřidávejte cihličky a nastavte jim patřičné sprity a jako parrent zvolte obj_stone.

Té cihličce co má i nakřuplí sprite vytvořte objekt do kterého dáte kolizi s míčkem a tam akce score++, bounce other against all a change instance into obj_stone_blu­e_damaged (ve kterém je sprite poškozeného kamene a parrent obj_stone).

Do cihličky s křížkem (do té co nepůjde rozbit) vložíme kolizi s míčkem kam dáme akci bounce s parametrem other a against nastavíme na all objects.

Poskládáme si cihličky do mapy a vyzkoušíme.

Už to krásně funguje :)

Do obj ball přidáme ještě kontrolu počtu cihliček. Takže přidáme kolizi s obj_stone a naprosto jednoduše se zeptáme je počet cihliček roven 0? Pokud ano a next room exituje tak next room, pokud neexistuje ukaž výslednou listinu a skonči hru. (přidal sem bloky aby to bylo lépe vidět)

Do game start u obj_bat přidáme set score = 0 a set lives = 3. Ještě nastavíme zobrazení skóre a životů v caption.

Přidáme event no more lives a do něj show highscore tabla a end the game.

A do obj_ball do kolize s obj_horizontal_down přidáme ještě lives--.

Teď hru obohatíme o bonusy. Vytvoříme si objekt bonus který zatím encháme ladem. Poupravíme kolizi s obj_ball v objektu obj_ball. Přidáme šanci na bonus.

Ták a teď se vrhneme na obj_bonus. Do create přidáme proměnou bonus které nastavíme hodnotu na round(random(2)) -> vygeneruje číslo od 0-2 a zaokrouhlí ho (bonusy budeme mít zatím jen 3): přidání života, zmenšení a zvětšení pálky, později si můžete přidat další.

Přidáme podmínky na proměnnou bonus a podle hodnoty změníme sprite bonusu. A objekt rozpohybujeme pomocí set the vertical speed asi tak na 3.

Do kolize s obj_bat přidáme akce které má bonus provést.

A hru máme hotovou. Můžete si přidat pozadí, zvuky další bonusy a levely.

Ke stažení přiloženy zdrojové soubory.


 

Stáhnout

Staženo 742x (28.2 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

  Aktivity (1)

Článek pro vás napsal David Jančík [sczdavos]
Avatar
Autor je vášnivý programátor v .NET C# a PHP. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.

Jak se ti líbí článek?
Celkem (6 hlasů) :
55555


 


Miniatura
Předchozí článek
Game maker tutorial - Pong!
Miniatura
Všechny články v sekci
GameMaker - Jednoduché hry

 

 

Komentáře
Zobrazit starší komentáře (22)

Avatar
David Jančík [sczdavos]:

V tutoriálu je akorát místo konstanty '10' použita proměnná gamespeed. A tento tutoriál patří k začátkům a je v něm ukázána práce pomocí ikonek.

Odpovědět 3.8.2012 12:08
Čím více času dostaneš, tím méně ho máš.
Avatar
nopatu
Člen
Avatar
nopatu:

Ahoj mám problém nechce mi fungovat vypadávání objektů z rozbitých kostek.
a to to delám podle návodu. :( padá mi to v levém horním rohu. Předem díky za reakci.

Editováno 17.11.2012 17:58
Odpovědět 17.11.2012 17:57
http://maniaplay.eu/?id=183052
Avatar
jakzie2
Člen
Avatar
jakzie2:

Musíš nastavit k míčku že pokud dojde ke kolizi se stěnou vytvoří stěna objekt a musíš tam mít zaškrtnuto pole Relative.
Pak ti to bude fungovat.

 
Odpovědět 17.11.2012 18:08
Avatar
nopatu
Člen
Avatar
Odpovídá na jakzie2
nopatu:

jj dík ale zas se mi obevil dalši problem když jsem prijel pozdeji ke kulice zsekla se. :)

Odpovědět 17.11.2012 18:23
http://maniaplay.eu/?id=183052
Avatar
jakzie2
Člen
Avatar
Odpovídá na nopatu
jakzie2:

Bud máš špatně nastavený odrážení nebo nemáš pálku nastavenou na solid.

 
Odpovědět 17.11.2012 18:26
Avatar
zuzka
Neregistrovaný
Avatar
zuzka:

Ahoj, mam tiez problem, postupovala som podla tvojho tutorialu co sa tyka bonusov, avsak pri spusteni hry mi vypisalo nasledovnu chybu, teda hra sa mi nespustila:

In Object obj_bonus, in Event Create event number 0 at line 2: Cannot set a constant to a value

Vies mi poradit co s tym? Vobec tomu nerozumiem. Vdaka

 
Odpovědět 27.12.2013 14:36
Avatar
TomBen
Redaktor
Avatar
Odpovídá na zuzka
TomBen:

Zjevně tam máš chybu a v objektu obj_bonus, v události Create se pokoušíš přepsat hodnotu něčeho, co přepsat nejde. Podívej se, co tam máš a zkontroluj to. I když je tutoriál starší, výsledek mi bez problémů funguje na Game Makeru 8.0 i na GM Studio 1.2, tzn. chyba bude v opisování.

Odpovědět 27.12.2013 15:01
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
TomBen
Redaktor
Avatar
TomBen:

Hm, přece jen jsem nějaké nefuknčnosti při importu do GMS objevil, ale nemají se zmíněnou chybou co do činění a spuštění samotnému nebrání. Chyba se objeví ve zvuku, kde GMS používá kompletně přepracovaný audio systém a taky GMS neumí měnit runtime text v liště okna. Info je tedy třeba přesměrovat někam do zobrazované plochy. Obojí je řešitelné drobnými úpravami.

Odpovědět 27.12.2013 15:28
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Gonisou
Neregistrovaný
Avatar
Odpovídá na TomBen
Gonisou:

Taky mi to nefunguje :/ nejde to zapsat nějak jinak aby se proměnná naplnila náhodným číslem když jsem to zkusil zapsat do GML jako bonus = random(2) hodilo mi to stejnou hlášku :/ .

 
Odpovědět 7.1.2014 22:46
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Gonisou
TomBen:

Když se proměnná jmenuje bonus,
tak si nesmíš pojmenovat objekt taky bonus, to je všechno.

Odpovědět 7.1.2014 22:59
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 32. Zobrazit vše