Game maker tutoriál - Letecká střílečka

Ostatní jazyky GameMaker Simulátory Game maker tutoriál - Letecká střílečka

Spusťte si GameMaker (při tvorbě této hry jsem používal verzi 8.0). Pokud nemáte zapnutý Advanced Mode tak jej jednoduše zapněte -> Klepnutím na File a pokud u možnosti Advanced mode není fajfka klepněte na tuto možnost.

Nejprve přidáme obrázek (dále již sprite) raketky. Klepněte proto na složku Sprites pravým tlačítkem a zvolte Create sprite. Sprite si pojmenujte například spr_rocket (předpona spr označuje zkratku sprite je vhodné ji používat aby se vám pak nepletl rocket jako sprite a rocket jako object). Poté klepněte na Load sprite a ze složky Space nacházející se ve složce s GameMakerem vyberte nějaký obrázek rakety například rocket.png. Poté potvrďte tlačítkem Open a sprite potvrďte OK.

Nyní vytvoříme object. Můžete zase klepnout pravým tlačítkem na složku oObjects nebo jej přidat pomocí tlačítka s obrázkem modré kuličky nacházející se v liště ovládacích prvků (nahoře v okně programu).

Object si pojmenujte nejlépe obj_rocket a nastavte mu výchozí sprite klepnutím na ikonku v panelu Sprite (vlevo nahoře v právě aktivním okně) vybráním spr_rocket. Pozn. můžete si povšimnout tlačítek které se nacházejí v panelu sprite - New a Edit, pomocí nichž můžete rovněž vytvořit nebo zeditovat sprite.

Nyní musíme objekt naučit jednoduchým pohybům. Začneme pohybem vlevo a vpravo. Klepnutím na tlačítko Add Event přidejte event -> Keyboard/Left a Keyboard/Right. Všimněte si že se do boxu označeného nadpiskem Events přidali <Left> a <Right>. Klepněte nejprve na <Left> a přidejte akci Set the horizontal speed nacházející se v move druhá odzhora

Otevře se okno ve kterém nastavíme vlastnost hor. speed na například -5.

To samé udělejte u <Right> s tím že tam nastavte absolutní hodnotu nyní zadaného čísla takže např. 5.

Poté potvrďte objekt tlačítkem OK.

Přidejte Room vlevo nahoře si všimněte raketky a stejného prvku jako u výberu spritu. Můžete si později vybírat sprity. Nyní máte vybranou raketku takže klepněte někam do prostředka místnosti a raketka se vloží. Room pak potvrďte zase tlačítkem ve tvaru fafky nacházející se nahoře vlevo a vyzkoušejte si pohyb raketky klepnutím na zelenou šipečku (nebo F5).

Je to úžasné ale chtělo by to aby se raketka taky zastavila že? :)

Proto okno zavřete a opět otevřete objekt raketka -> přidejte další dva eventy keyrelease/left a right. Do nichž umístěte stejné akce jako minule a nastavte tam hodnotu 0 (resp. pouze zmáčkněte OK).

Vyzkoušejte si hru znovu. Už je to lepší že? :)

V editoru roomu si také vyzkoušejte klávesové zkratky pokud klepnete na již existující objekt s držením ctrl -> pak jej můžete přemísťovat. Alt vám zruší nepříjemné snapování ke čtverečkům -> plynulý pohyb. Shift pak objekt klonuje.

Nastavte si v záložce settings výšku roomu na třeba 1500. Ve views zaškrtněte Evable the use of Views a Visible when room starts. Kdybychom použili view na objekt rakety tak by se room začal posouvat až by raketka dojela doprostřed. Proto musíme udělat dlaší objekt. Vytvořte si objekt obj_camera, odškrtněte jí visible (bude neviditělná) a do eventu Create jí dejte akci Set the vertical speed na -2. To samé udělejte u obj_rocket. Poté vložte do roomu asi centimetr nad dolní konec raketku a do půlky výřezu kameru. Ve views nastavte Object following na obj_camera a Vbor na 320 (připište nulu). Zda jste správně umístili obj_camera a zda funguje posun po mapě tak jak chceme zjistíte až po té co přidáte pozadí. Takže ještě chvilku vydržte.

Vytvořte nové pozadí a načtěte nějaké ze složky gamemakeru. Poté v záložce background v roomu nastavte stejným způsobem jako sprite u objektu defaultní pozadí -> vpravo na mapě se pak ukáže. Nyní spusťte hru a kochejte se.

Aby raketka nemohla opustit room a letět někam do halela... prostě dopryč. Musíme pozměnit pár vlastností. Vytvořte si nový sprite pojmenovaný třeba border. Klepněte na Edit sprite poté vytvořte nový sprite (bílá obálka vedle zelené šipečky). Nastavte velikost na 660 šířka a 500výška udělejte jednoduchý rámeček. Uložte a v nastavení spritu zmáčkněte tlačítko center -> křížek se vycentruje do středu obrázku. (když budete přemísťovat objekt s tímto spritem tak si můžete všimnout že je vycentrovaný a když jej vložíte nebo přemísťujete tak začíná prostředkem, teď si to vyzkoušíte a pochopíte)

A vše potvrďte. Tento rámeček nastavte jako defaultní sprite objektu obj_camera, které zaškrtněte ještě políčko solid a poté se přepněte do správy roomu. Kde kamerou pohybujte pomocí ctrl + shift + myš tak aby se její tři rohy (levý pravý a dolní) mírně vynořovali z okrajů roomu.

Poté ještě nastavte u hbor: 0 a u vbor: 250. To je velikost zóny od každé strany (horizontální nebo vertikální) od které se začne pohybovat room.

Nyní ještě promakáme raketu aby zrychlovala a zpomalovala.

Přidejte proto známé eventy <UP>, <DOWN>, a jejich release.

Do up dáte zase set the vertical speed a hodnotu třebas -7. Do release up -2 resp. výchozí hodnotu.

Do down dáte 5 a do release down zase výchozí hodnotu -2.

Ještě přidejte kolizi s obj_camera (event collision) a do něj dejte akci start movin in a direcotry (první ikonka v move). Kde klepněte na šipku nahoru a jako hodnotu napište 2. (Vspeed má totiž hodnoty v kladu jako pohyb dolů a hodnoty v záporu jako pohyb nahoru a abychom vypnuly jednou akci pohyb do stran použijeme tuto a takto :))

Nyní do raketky ještě přidejte event Outside View (nacházející se v Other). Do nehož dejte akci Go to next room (main1 v dolní části) a vyberte si nějaký pěkný efekt.

Poté si vytvořte nějaký další room. A můžete si tam dát jako pozadí nápis Vyhráli jste :) Nejlépe jako tile.

Tile je obrázek který nemá jinačí účel než zobrazit se. Pokud chcete pouze obrázek používejte tiles zatěžují méně pc než objekty protože nemají vlastnosti. Takže si vytvořte pozadí v editoru napište nějaký ozdobný nápis vyhráli jste a poté v editoru roomu (toho nového) klepněte na záložku tiles a vložte text s výhrou.

Hru si vyzkoušejte :)

Nyní můžete room nějak vyzdobit (ten ve kterém lítá raketka), přidat nějaké tiles a nějaké objekty (do kterých raketa nesmí narazit).

Zde máte nějaké tiles:

Použijte je tak že je načtete jako pozadí a zaškrtnete use as tile set rozměry změňte na 32x32. V roomu si pak otevřete záložku tiles klepnete na požadovaný obrázek (nahoře si nastavte snapování také na 32x32 aby se vám lépe umísťovalo). A pak už jednoduše klikáte. Pozn.: pokud vás štve že klikáte a nějaké objekty nebo tile nebo cokoli jiného mizí tak tuto neblahost zrušíte odškrtnutím políčka Delete underlying.

Doporučuji přečíst si tento článek o optimalizaci hry v GM

Teď vytvoříme objekt rozbité raketky do něhož dáme nějaký sprite výbuchu. A vložíme event animation end (z other) a do něj akci restart room (z main1 dole)

Do kolize s překážkou vložte akci play sound z main1 kde si dáme nějaký zvuk (já zvolil ze složky gamemakeru první co mě přišel pod ruku alarm) poté destroy the instance (koš z main1) kde klepnete na Other aby se zničila překážka a pod to change instance z main1 kde nastavte change into na rozbitou raketku.

Teď si půjdeme vytvořit animaci aby nám fungoval event animation end. Je to jednoduché buď si najdete nějaký gif s animací exploze a pak jej dáte jako sprite čimž máte problém vyřešen nebo si ve sprite dáte více obrázů za sebou a automaticky se z nich stane animace.

Doporučuji přečíst si tento článek jak správě udělat animaci

Teď si vyrobíme kulomet resp. patronu která bude vylítávat z špičky rakety abychom mohli překážky rozstřílet.

Vytvoříme proto objekt bullet ke kterému si třeba opět propůjčíme sprite ze složky gamemakeru (vycentrujte jej pomocí tlačítka center).

V objektu rocket si vytvoříme event keyboard space do kterého dáme akci create instance (z main1) kde napíšeme jako souřadnice souřadnice rakety (ale ještě předtím bychom si mohli nastavit nulové souřadnice rakety na špičku rakety) zvolíme proto editaci spritu a šipečku nasměrujeme na vrcholek rakety. Poté stačí jako souřadnice napsat obj_rocket.x a obj_rocket.y.

Pokud si hru vyzkoušíte zjistíte, že je to fakt krásné, ale poněkud k ničemu :D

Takže nejprve by to chtělo nějaký interval aby se náboje nevytvářeli stále dokola ale měli nějakou prodlevu.

Do create přidáme set variable (čtvereček s VAR v dolní části) a napíšeme název proměnné ammo a hodnotu 1

Vytvoříme si event Alarm 0 a uděláme to samé plus ještě přidáme zvuk střelby (použil sem gun7 z gamemakeru).

Event space takto poupravíme:

Do objektu střely přidáme event create a tam start moving in a directory kde zvolíme šipku nahoru a rychlost tak 10.

Přidáme ještě kolizy s překážkami kde dáme 2x destroy (koš) -> other a self. A outsite of room destroy self.

A zkusíme hru.

Pokud chcete mít hru efektivnější přidejte nějakému objektu (přkážce), že se bude pohybovat proti vám například nějaký meteorit.

Do create u raketky můžete přidat ještě set score které nastavíte na 0 a set the score caption info což vám umožní zobrazovat v titulku okna informace o skóre. Za každý sestřelený objekt pak můžete dát set the score +1 (zadáte hodnotu 1 a zaškrtete relative - tím přičtete k současné hodnotě) - tuto akci vložíte před destroy instance v obj_bullet při kolizy s objektem

Teď si uděláme jednoduché nepřátele.

Nejprve si zase vytvoříme objekt např. alien kterému vybereme patřičný sprite zase mu nastavte šipečku na špičku.

Poté klepnete na objekt střela a dáte duplikovat. Změníte její směr -> dolů a rychlost snižte tak na 5. Z kolize s překážkami odděláte score +1 a přidáte kolizy s raketou. Do níž dáte přehrát zvuk alarmu, destroy self instance a change other instance to raketa rozbitá.

A střelu je také třeba otočit, ti co vlastní GM Pro můžou požít Transofrm sprite a flipnout jej, ostatní musí vytvořit nový sprite a otočit ho v editaci spritu (transform/flip).

Znovu si otevřeme objekt alien do Create dáme set variable alien_ammo na 1 a set alarm 0 na 20. Do alarm 0 create instance obj_alien_bullet se souřadnicemi alien lodě (napište x, y) -> aby když si jich do mapy dáte více aby všechny střílely. A znovu zavoláme alarm0 s prodlevou 20;

Do obj_bullet vložte kolizy s mimozemšťanama, vložte si je do mapy a vyzkoušejte.

Ještě ho jednoduše rozpohybujeme. Vytvořte si jednoduchý sprite nějakou čáru o rozměrech 5x20 (šířka x výška)

Vytvořte objekt bounce kterému nastavte solid a vypněte visible. Dejte mu kolizi s obj_alien a do něj akci bounce zaškrtněte Other a u against vyberte all objects.

Vložte tento objekt na místa kde chcete aby se mimozemšťani odráželi. A mimozemšťanům do create přidejte start moving kde klepněte na levou a pravou šipečku a napište třeba 5.

Vyzkoušjete :)

Podobně jako talíř si můžete vytvořit další nepřátele.

Abyste nemuseli stále duplikovat ukážeme si fígl.

Objekt obj_alien přejmenujte na obj_enemy a vytvořte objekt obj_alien.

V obj_enemy vypnete sprite. A v obj_alien vyberete sprite a jako parrent zvolíte obj_enemy. A pak u každého nepřítele budete používat parrent. Čímž ušetříte spoustu místa.

Jediné co musíte ještě udělat je v roomu místo otazníčků dát obj_alien.

Nyní vyzkoušejte a přidejte si další nepřátele.

Ještě si otevřete obj_rocket klepněte pravým tlačítkem na kolizi z překážkou zvolte duplikovat vyberte kolizi s obj_enemy a nyní je naše hra dokonalá.

Stačí přidal pár levelů. Napěchovat je překážkami, nepřáteli a nějakými drobnými bonusy, za které bude hráč dostávat skóre (zase využití parrent).

A hra je dokonalá !

Přikládám zdrojové soubory, kdyby Vám něco nefungovalo nebo jste se chtěli na něco podívat :)


 

Stáhnout

Staženo 558x (168.72 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 (2 hlasů) :
3.53.53.53.5 3.5


 


Miniatura
Všechny články v sekci
GameMaker - Simulátory

 

 

Komentáře

Avatar
kokoska2003
Člen
Avatar
kokoska2003:

Udělejte o tom video.
Dudeseto dělat líp.

 
Odpovědět 5.5.2013 20:38
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovědět  +2 5.5.2013 20:39
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 2 zpráv z 2.