Java týden Java týden
Pouze tento týden sleva až 80 % na celý Java e-learning!
Brno? Vypsali jsme pro vás nové termíny školení OOP v Brně!

Game maker tutorial - Arkanoid

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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 776x (28.2 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

 

Článek pro vás napsal David Jančík
Avatar
Jak se ti líbí článek?
6 hlasů
Autor je vášnivý programátor a vizionář. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Předchozí článek
Game maker tutorial - Pong!
Všechny články v sekci
GameMaker - Jednoduché hry
Aktivity (1)

 

 

Komentáře

Avatar
koblih
Neregistrovaný
Avatar
koblih:3.9.2011 12:41

Toto jsou luxusní návody dobře mě učí v pracovat gamemakeru akorát když jsem chtěl v arkanoidu udělat ůvodní místnost tak mi to nešlo:D

 
Odpovědět 3.9.2011 12:41
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na koblih
David Jančík:3.9.2011 13:19

Ahoj,
předně díky za pochvalu. Úvodní místnost uděláš jednoduše. Ve složce rooms si vytvoříš novou místnost a zařadíš ji na začátek všech (aby se pustila jako první). Umístíš do ní objekt start game do kterého dáš event 'mouse/left pressed' kde bude akce 'go to next room'. Pak například objekt který bude hru ukončovat. A další vymoženosti si můžeš domyslet :)

Odpovědět 3.9.2011 13:19
Zapomeň, že je to nemožné a udělej to ;)
Avatar
koblih357
Člen
Avatar
koblih357:7.9.2011 18:23

JJ já vím jak udělat úvodní místnost ale u toho arkanoidu když jí udělám tak se tam napíše nějaká chyba a vypne se mi to. Ale to nevadí stejně není moc potřebná.8-)

 
Odpovědět 7.9.2011 18:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na koblih357
David Čápka:7.9.2011 18:30

Pokud do programu vložíš prázdnou místnost a spustíš ho, těžko se ti vypíše chyba, když v ní nic není a chybu nemá co zapříčinit. Problém je v nějakém objektu, který tam máš vložený. Zkusil jsem to jak říkal sczdavos a fungovalo to perfektně.

Odpovědět 7.9.2011 18:30
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
koblih357
Člen
Avatar
koblih357:9.9.2011 15:07

Aha , tak to jsem asi zase nějak blbě udělal.

 
Odpovědět 9.9.2011 15:07
Avatar
jakub
Neregistrovaný
Avatar
jakub:26.11.2011 17:24

Dobrý den ja sa chcem len spýtať že kde si možem staihnuť tie resources resp objekty ? dakujem

 
Odpovědět 26.11.2011 17:24
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na jakub
David Jančík:26.11.2011 17:48

Pokud myslíte sprity, tak jsou použity základní sprity dodávané s GM -> naleznete je ve složce GM/Sprites/...

Můžete si také stáhnout zdrojový kód a vyexportovat si přes File/Export resources jakoukoli část. :)

Odpovědět 26.11.2011 17:48
Zapomeň, že je to nemožné a udělej to ;)
Avatar
jakub
Neregistrovaný
Avatar
Odpovídá na David Jančík
jakub:26.11.2011 21:50

diki moc:)

 
Odpovědět 26.11.2011 21:50
Avatar
Turbo
Neregistrovaný
Avatar
Odpovídá na David Jančík
Turbo:2.12.2011 21:13

DObrá den .
JA by som sa chcel este spýtať že uplne všetko mi v tej hre funguje kurat nevim ako mam zadať podmienku že ked z loptičku viradím všetky obdlžniky tak že sa mi skočí hra prípadne nahodí okno skusal som rozne kmbinace ale stale to nefunguje . :/
Za odpoved vopred dakujem

 
Odpovědět 2.12.2011 21:13
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Turbo
David Čápka:3.12.2011 11:40

Podmínka je přeci vysvětlena v tutoriálu, je to blok začínající If number of instances has a value

Odpovědět 3.12.2011 11:40
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Una
Neregistrovaný
Avatar
Una:16.4.2012 21:11

Ahoj:)
vytvořila jsem si arkanoid podle tutoriálu výše, vše funguje výborně, problém mám se zvukem.

Na pozadí mám hudbu, která se spustí na začátku(je řešena objektem, který má v události "Create" akci "Play Sound". Hudba hraje do té doby než se míček dotkne jakéhokoli objektu, který má také nastavený nějaký zvuk.
Všechny ostatní zvuky jsou řešeny přímo v akcích kolize míčku s ostatními objekty.

 
Odpovědět 16.4.2012 21:11
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Una
David Jančík:16.4.2012 21:20

Ahoj,
zkontroluj zda u zvuků nemáš zaškrtnuté vícekrát Use multimedia player -> tohoto využívají zejména zvuky ve formátu *.mp3 Zvuk v tomto formátu lze přehrávat právě jen jeden.
Je vhodné na pozadí použít nějaký pěkný zvuk a zde využít mp3 a na ostatní použít zvuky ve formátu wav nebo mid, kterým se nastaví Normal sound.

Odpovědět 16.4.2012 21:20
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Una
Neregistrovaný
Avatar
Odpovídá na David Jančík
Una:17.4.2012 16:57

Děkuji za radu, už to funguje jak má;)

Mám ještě jeden dotaz. Když se pálka vlivem bonusu zvětší a je zrovna u pevného okraje, od kterého se odráží míček, tak se v něm zasekne.:o Co s tím?

 
Odpovědět 17.4.2012 16:57
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Una
David Jančík:17.4.2012 21:17

Ahoj,
děkuji za tento dotaz. Nad tím jsem v tutoriálu neuvažoval. Vyřešil bych to následovně (nejjednodušší cestou):
Když kontroluješ if place_free k x-ové hodnotě přičti ještě čtvrtinu šíře spritu. Tím vlastně při vycentrovaném originu (ten křížek u spritu) sáhneš kousek za hranice spritu a on se bude tázat na kolizi za ním.

x + sprite_width / 4

Možná bude stačit ještě méně. To ozkoušej a dej vědět.
Ještě jednou děkuji za dotaz, v tutoriálu toto zmíním :)

Odpovědět 17.4.2012 21:17
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Una
Neregistrovaný
Avatar
Odpovídá na David Jančík
Una:18.4.2012 15:57

Ahoj,
když vyměním x - gamespeed za x - sprite_width / 4 tak to funguje. Pálka se sice prodlouží do stěny, ale nezasekne se :)

Díky

 
Odpovědět 18.4.2012 15:57
Avatar
Halama
Neregistrovaný
Avatar
Halama:9.5.2012 19:37

Ahoj,
jak se zbavím okna před začátkem hry kde je napsáno:
Tutoriál vytvořen pro islandsoft.cz
Pro pokračování stiskněte escape.

 
Odpovědět 9.5.2012 19:37
Avatar
Halama
Neregistrovaný
Avatar
Odpovídá na Halama
Halama:9.5.2012 19:40

Už vím...
Sorry za spam:O

 
Odpovědět 9.5.2012 19:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Halama
David Čápka:9.5.2012 19:42

Pokud se ptáš na toto, tak evidentně vůbec nechápeš, jak tato hra ani GameMaker funguje, jinak bys hlášku našel za několik sekund. Je v události Game start objektu pálka (nečekaně), doporučuji si ten tutoriál nejprve udělat, od toho tu je, hotová hra je jen na porovnání v případě problémů.

Odpovědět 9.5.2012 19:42
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
exnero00
Člen
Avatar
exnero00:3.7.2012 20:32

Ahoj, mám GameMaker 8.1, ale když otevřu tabulku sprite properities, tak tam ty samé možnosti a nemohu tedy nastavit parametry pro x a y. Myslíte že je to verzí, nebo je chyba na mé straně ? Děkuji.

 
Odpovědět 3.7.2012 20:32
Avatar
exnero00
Člen
Avatar
exnero00:3.7.2012 20:34
  • nemám tam ty samé možnosti
 
Odpovědět 3.7.2012 20:34
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na exnero00
David Jančík:3.7.2012 20:45

Klepni na záložku file a zaškrtni Advanced mode
Poté se ti toto nastavení objeví ;)

Odpovědět 3.7.2012 20:45
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Nezi
Neregistrovaný
Avatar
Nezi:3.8.2012 11:52

Pohyb pálky by šel udělat o hodně jednodušejc do right: x += 10; a v left: x -= 10;

 
Odpovědět 3.8.2012 11:52
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Nezi
David Jančík:3.8.2012 12:08

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
nopatu
Člen
Avatar
nopatu:17.11.2012 17:57

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:17.11.2012 18:08

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:17.11.2012 18:23

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:17.11.2012 18:26

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:27.12.2013 14:36

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:27.12.2013 15:01

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:27.12.2013 15:28

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:7.1.2014 22:46

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:7.1.2014 22:59

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 32 zpráv z 32.