IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

JetPack sršící oheň a šplouchání vody - GM Particles

Vytvoříme si jednoduchou hru s použitím částicových efektů.
Nastínění hry: Létající panáček s JetPackem (raketový batůžek -> sršící plameny z trysek) nad mořem. Pokud spadne do moře - voda šplouchne do stran.
Sprity si můžete tvořit vlastní nebo použít tyto (nacházejí se ve složce GM - podsložka Sprites)

GameMaker - Efekty GameMaker - Efekty GameMaker - Efekty GameMaker - Efekty
spr_character spr_splash spr_water_top water_tile

Nejprve je tedy přidáme (poslední water_tile přidáme jako pozadí - bude použit jako tile). Voda bude animace - takže ji přidáme pomocí EditSprite/Fi­le/CreateFrom­Strip zvolíme spr_water_top.png do počtu obrázků (number of images a images per row) napíšeme 12 a rozměry zvolíme 24x24

  • U spr_character odškrtneme precise collision checking a zaškrtneme separate collision masks -> lepší kolize
  • U spr_water_top uděláme totéž a změníme masku na tvar obdélníku (rectangle) zvolíme manuální nastavení a posuneme ji od shora (top) o 10px (aby panaáček až spadne do vody byl kousek zanořen v ní.
  • U spr_splash vystředíme Origin

Vytvoříme objekt obj_water_top přiřadíme mu příslušný sprite a zaškrtneme solid.

Nyní vytvoříme obj_character přiřadíme mu sprite postavičky a hloubku (depth) nastavíme na 1 (aby až spadne do vody byl jakoby v ní).

  • Vytvoříme Create event
    • Set gravity - postavička bude přitahována gravitací o síle 0.5 směrem k zemi 270 když ji jetpack vynese do vzduchu tak aby samovolně padala k zemi
  • Do Step eventu přidáme ošetření aby se postavička padající k zemi nezrychlila na příliš vysokou rychlost
    • Pomocí Test variable zadáme podmínku pokud je hodnota proměnné vspeed větší než 10 tak nastavíme vspeed na 10 (nebude padat rychleji než 10px/s)
  • Kolize s obj_water_top
    • Přidáme Move to contact pro lepší kolizi. Nastavíme direction na 270 zbytek necháme.
    • A nastavíme vertikální i horizontální rychlost na 0
  • Do události pro šipku vlevo přidáme opět kontrolu rychlosti, tentokrát proměnné hspeed větší než -5 a horizontální rychlost budeme relativně odečítat o hodnotu -0.5
  • Šipka vpravo bude obsahovat to samé s tím rozdílem, že kontrola bude hspeed < 5 a k horizontální rychlosti se bude relativně přičítat 0.5
  • V události pro šipku nahoru budeme relativně odečítat -1 od současné hodnoty vspeed pokud je její hodnota větší než -10 (aby zase nelítal moc rychle)
  • Vytvoříme si místnost (pro lepší umísťování objektů zvolíme snap/mřížku o velikosi 24x24) přidáme do ní vodu a umístíme někam kousek před kolizní místo panáčka. Při přidávání tilů vody pod hladinou v záložce tiles zvolíme Add a nastavíme hloubku vrstvy na 0 (chceme aby byl panáček ve vodě (za vodou) a například plameny jetpacku, které za chvilku vytvoříme by mohli vyčuhovat)
    GameMaker - Efekty

Hru spusťte

Panáček nyní nádherně létá ve vzduchu. Můžete si však všimnout nedostatku, že když zatočíte vpravo/vlevo, že udržuje stále stejnou rychlost. To vyřešíme přidáním tření (friction) s hodnotou 0.1 do eventu Create A přidáme event Outside room do nějž vložíme Warp screen s parametrem horizontal

Nyní to vše konečně obohatíme o částicové efekty.

  • Do create eventu doplníme následující
    • Vytvoříme částicový systém - hloubku nastavíme na 1 aby plamen byl za vodou
    • Vytvoříme novou částici
      • Tvar explosion
      • min a max velikost 0.02 se size increment 0.05 (jako při startu rakety z malé trysky srší velký oheň)
    • Barvu zvolíme changing od žluté po oranžovou s počátační alfou 1 a koncovou 0
    • Životnost nastavíme 5-10 (aby plamen nebyl moc dlouhý)
    • A pohyb
      • rychlost od 1-3
      • směr 270 (dolů)
  • Upravíme událost pro šipku nahoru
    • Vytvoříme zde dva emittery (type0, type1)
      • první pro první trysku (ona je to ruka u toho panáčka ale my si představujeme jetpack :D) když si otevřete sprite a klepnete na trysku zobrazí se vám souřadnice bodu
        • při použití výchozího spritu jsou pro první trysku souřadnice x+4 a y+20 a pro druhou x+28 a y+20
      • přidáme 2x burst from emitter (jednou z prvního emitteru poté s druhého - obě trysky) s hodnotami 16)

Hru spustíme a vychutnáme si nádherný efekt.
GameMaker - Efekty Teď ještě pro úplnou dokonalost přidáme šplouchnutí vody do stran, když na ni panáček z výšky spadne.

  • V create eventu vytvoříme další částici (type1)
    • kde místo tvaru použijeme sprite kapky vody
    • min velikost 1 maximální 0.5
    • životnost 5-8
    • u barvy zvolíme počáteční alfa průhlednost na 1 a koncovou na 0
    • rychlost 8-12 směr 50-130
    • s gravitací o velikosti 2 směrem k zemi (270)
  • Do kolize s obj_water_top přidáme vytvoření emitteru (emitter2) na souřadnicích zhruba mezinoží (u našeho panáčka x+16, y+35) - od středu šplouhne do stran
    • burst částice type1 z emitteru2 počet 20

Pokud hru spustíme zjistíme hned nedostatek -> chceme aby voda šplouchnula při kolizi jen jednou a né stále.

To ošetříme jednoduchou podmínkou.

  • V create eventu vytvořte proměnnou např. can_splash a dejte jí hodnotu 0 (na začátku když stojí ve vodě nešplouchne)
  • Do kolize vložte podmínku pomocí kontroly hodnoty proměnné if can_splash == 1 tak se provede vytvoření emitteru, vytvoří se efekt šplouchnutí a proměnná can_splash se nastaví na 0
  • V události šipka nahoru pak hodnotu proměnné can_splash nastavíme zase na 1

Kód GML pro obj_character by mohl mít následující podobu:

//create event
gravity = 0.5;
gravity_direction = 270;
friction = 0.1;

psyst = part_system_create();
part_system_depth(psyst,1);

part0 = part_type_create();
part_type_shape(part0, pt_shape_explosion);
part_type_size(part0, 0.02, 0.02, 0.05, 0);
part_type_color2(part0, c_yellow, c_orange);
part_type_alpha2(part0, 1, 0);
part_type_life(part0, 5, 10);
part_type_speed(part0, 1, 3, 0, 0);
part_type_direction(part0, 270, 270, 0, 0);

part1 = part_type_create();
part_type_sprite(part1, spr_splash, 0, 0, 0);
part_type_size(part1, 1, 0.5, 0, 0);
part_type_life(part1, 5, 8);
part_type_alpha2(part1, 1, 0);
part_type_speed(part1,8, 12, 0, 0);
part_type_direction(part1, 50, 130, 0, 0);
part_type_gravity(part1, 2, 270);

can_splash = 0;

//step event
if (vspeed > 10)
    vspeed = 10;

//collision with obj_water_top
move_contact_solid(270, -1);
hspeed = 0;
vspeed = 0;

if (can_splash == 1)
{
    emitter2 = part_emitter_create(psyst);
    part_emitter_region(psyst, emitter2, x+16, x+16, y+35, y+35, ps_shape_rectangle, ps_distr_linear);
    part_emitter_burst(psyst, emitter2, part1, 20);
    can_splash = 0;
}

//keyboard left
if (hspeed > -5)
    hspeed-=0.5;

//keyboard right
if (hspeed < 5)
    hspeed += 0.5;

//keyboard up
if (vspeed > -10)
    vspeed -= 1;

emitter0 = part_emitter_create(psyst);
part_emitter_region(psyst, emitter0, x+4, x+4, y+20, y+20, ps_shape_rectangle, ps_distr_linear);
emitter1 = part_emitter_create(psyst);
part_emitter_region(psyst, emitter1, x+28, x+28, y+20, y+20, ps_shape_rectangle, ps_distr_linear);

part_emitter_burst(psyst, emitter0, part0, 16);
part_emitter_burst(psyst, emitter1, part0, 16);

can_splash = 1;

//outside room
move_wrap(1, 0, 0);
GameMaker - Efekty

Nyní je hra dokončena :) Ke stažení přikládám zdrojový kód a použité sprity.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Všechny články v sekci
GameMaker - Efekty
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
3 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity