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šiaci oheň a špliechanie vody - GM Particles

Vytvoríme si jednoduchú hru s použitím časticových efektov.
Načrtnutie hry: Lietajúci panáčik s jetpack (raketový batôžtek -> sršiaci plamene z trysiek) nad morom. Ak spadne do mora - voda šplouchne do strán.
Sprity si môžete tvoriť vlastné alebo použiť tieto (nachádzajú sa v priečinku GM - podpriečinok Sprites)

Game maker - Efekty Game maker - Efekty Game maker - Efekty Game maker - Efekty
spr_character spr_splash spr_water_top water_tile
Najprv je teda pridáme (posledný water_tile pridáme ako pozadie - bude použitý ako tile). Voda bude animácie - takže ju pridáme pomocou EditSprite / File / CreateFromStrip zvolíme spr_water_top.png do počtu obrázkov (number of images a images per row) napíšeme 12 a rozmery zvolíme 24x24
  • U spr_character Odškrtnite precise collision checking a zaškrtneme separate collision masks -> lepšia kolízie
  • U spr_water_top urobíme to isté a zmeníme masku na tvar obdĺžnika (rectangle) zvolíme manuálne nastavenie a posunieme ju od zhora (top) o 10px (aby panaáček až spadne do vody bol kúsok zapustené v nej.
  • U spr_splash vycentrujeme Origin

Vytvoríme objekt obj_water_top priradíme mu príslušný sprite a zaškrtneme solid.

Teraz vytvoríme obj_character priradíme mu sprite postavičky a hĺbku (depth) nastavíme na 1 (aby až spadne do vody bol akoby v nej).

  • Vytvoríme Create event Set gravity - postavička bude priťahovaná gravitáciou o sile 0.5 smerom k zemi 270 keď ju jetpack vynesie do vzduchu tak aby samovoľne padala k zemi
  • Set gravity - postavička bude priťahovaná gravitáciou o sile 0.5 smerom k zemi 270 keď ju jetpack vynesie do vzduchu tak aby samovoľne padala k zemi
  • Do Step eventu pridáme ošetrenie aby sa postavička padajúce k zemi nezrýchlil na príliš vysokú rýchlosť Pomocou Test variable zadáme podmienku ak je hodnota premennej vspeed väčšia ako 10 tak nastavíme vspeed na 10 (nebude padať rýchlejšie ako 10px / s)
  • Pomocou Test variable zadáme podmienku ak je hodnota premennej vspeed väčšia ako 10 tak nastavíme vspeed na 10 (nebude padať rýchlejšie ako 10px / s)
  • Kolízia s obj_water_top Pridáme Move to contact pre lepšie kolízii. Nastavíme direction na 270 zvyšok necháme.

    A nastavíme vertikálnej aj horizontálnej rýchlosť na 0

  • Pridáme Move to contact pre lepšie kolízii. Nastavíme direction na 270 zvyšok necháme.
  • A nastavíme vertikálnej aj horizontálnej rýchlosť na 0
  • Do udalosti pre šípku vľavo pridáme opäť kontrolu rýchlosti, tentoraz premenné hspeed väčšia ako -5 a horizontálna rýchlosť budeme relatívne odčítať o hodnotu -0.5
  • Šípka vpravo bude obsahovať to isté s tým rozdielom, že kontrola bude hspeed <5 a k horizontálnej rýchlosti sa bude relatívne pričítať 0.5
  • V udalosti pre šípku hore budeme relatívne odčítať -1 od súčasnej hodnoty vspeed pokiaľ je jej hodnota väčšia ako -10 (aby zase nelietal moc rýchlo)
  • Vytvoríme si miestnosť (pre lepšiu umiestňovanie objektov zvolíme snap / mriežku o veľko 24x24) pridáme do nej vodu a umiestnime niekam kúsok pred kolízne miesto panáčika. Pri pridávaní telu vody pod hladinou v záložke tiles zvolíme Add a nastavíme hĺbku vrstvy na 0 (chceme aby bol panáčik vo vode (za vodou) a napríklad plamene jetpacku, ktoré za chvíľku vytvoríme by mohli vytŕčať) Game maker - Efekty

hru spustite

Panáčik teraz nádherne lieta vo vzduchu. Môžete si však všimnúť nedostatku, že keď zatočíte vpravo / vľavo, že udržuje stále rovnakú rýchlosť. To vyriešime pridaním trenie (friction) s hodnotou 0.1 do eventu Create A pridáme event Outside room do ktorého vložíme Warp screen s parametrom horizontal

Teraz to všetko konečne obohatíme o časticové efekty.

  • Do create eventu doplníme nasledujúce Vytvoríme časticový systém - hĺbku nastavíme na 1 aby plameň bol za vodou

    Vytvoríme novú časticu tvar explosion

    min a max veľkosť 0.02 sa size increment 0.05 (ako pri štarte rakety z malej trysky sršia veľký oheň)

    Farbu zvolíme changing od žltej po oranžovú s počátační alfou 1 a koncovú 0

    Životnosť nastavíme 5-10 (aby plameň nebol moc dlhý)

    A pohyb rýchlosť od 1-3

    smer 270 (dole)

  • Vytvoríme časticový systém - hĺbku nastavíme na 1 aby plameň bol za vodou
  • Vytvoríme novú časticu tvar explosion

    min a max veľkosť 0.02 sa size increment 0.05 (ako pri štarte rakety z malej trysky sršia veľký oheň)

  • tvar explosion
  • min a max veľkosť 0.02 sa size increment 0.05 (ako pri štarte rakety z malej trysky sršia veľký oheň)
  • Farbu zvolíme changing od žltej po oranžovú s počátační alfou 1 a koncovú 0
  • Životnosť nastavíme 5-10 (aby plameň nebol moc dlhý)
  • A pohyb rýchlosť od 1-3

    smer 270 (dole)

  • rýchlosť od 1-3
  • smer 270 (dole)
  • Upravíme udalosť pre šípku hore Vytvoríme tu dva Emitter (type0, type1) prvý pre prvú trysku (ona je to ruka u toho panáčika ale my si predstavujeme jetpack : D ) Keď si otvoríte sprite a kliknete na trysku zobrazia sa vám súradnice bodu pri použití predvoleného Spritu sú pre prvú trysku súradnice x + 4 a y + 20 a pre druhú x + 28 a y + 20

    pridáme 2x burst from Emitter (jednou z prvého Emitter potom s druhého - obe trysky) s hodnotami 16)

  • Vytvoríme tu dva Emitter (type0, type1) prvý pre prvú trysku (ona je to ruka u toho panáčika ale my si predstavujeme jetpack : D ) Keď si otvoríte sprite a kliknete na trysku zobrazia sa vám súradnice bodu pri použití predvoleného Spritu sú pre prvú trysku súradnice x + 4 a y + 20 a pre druhú x + 28 a y + 20

    pridáme 2x burst from Emitter (jednou z prvého Emitter potom s druhého - obe trysky) s hodnotami 16)

  • prvý pre prvú trysku (ona je to ruka u toho panáčika ale my si predstavujeme jetpack : D ) Keď si otvoríte sprite a kliknete na trysku zobrazia sa vám súradnice bodu pri použití predvoleného Spritu sú pre prvú trysku súradnice x + 4 a y + 20 a pre druhú x + 28 a y + 20
  • pri použití predvoleného Spritu sú pre prvú trysku súradnice x + 4 a y + 20 a pre druhú x + 28 a y + 20
  • pridáme 2x burst from Emitter (jednou z prvého Emitter potom s druhého - obe trysky) s hodnotami 16)

Hru spustíme a vychutnáme si nádherný efekt.
Game maker - Efekty
Teraz ešte pre úplnú dokonalosť pridáme šplechnutie vody do strán, keď na ňu panáčik z výšky spadne.

  • V create eventu vytvoríme ďalšiu časticu (type1) kde namiesto tvaru použijeme sprite kvapky vody

    min veľkosť 1 maximálna 0.5

    životnosť 5-8

    u farby zvolíme počiatočnej alfa transparentnosť na 1 a koncovú na 0

    rýchlosť 8-12 smer 50-130

    s gravitáciou o veľkosti 2 smerom k zemi (270)

  • kde namiesto tvaru použijeme sprite kvapky vody
  • min veľkosť 1 maximálna 0.5
  • životnosť 5-8
  • u farby zvolíme počiatočnej alfa transparentnosť na 1 a koncovú na 0
  • rýchlosť 8-12 smer 50-130
  • s gravitáciou o veľkosti 2 smerom k zemi (270)
  • Do kolízie s obj_water_top pridáme vytvorenie Emitter (emitter2) na súradniciach približne medzinoží (u nášho panáčika x + 16, y + 35) - od stredu šplouhne do strán burst častice type1 z emitteru2 počet 20
  • burst častice type1 z emitteru2 počet 20

Ak hru spustíme zistíme hneď nedostatok -> chceme aby voda šplouchnula pri kolízii len raz a né stále.

To ošetríme jednoduchú podmienkou.

  • V create eventu vytvorte premennú napr. Can_splash a dajte jej hodnotu 0 (na začiatku keď stojí vo vode nešplouchne)
  • Do kolízie vložte podmienku pomocou kontroly hodnoty premennej if can_splash == 1 tak sa vykoná vytvorenie Emitter, vytvorí sa efekt šplechnutie a premenná can_splash sa nastaví na 0
  • V udalosti šípka hore potom hodnotu premennej can_splash nastavíme zase na 1

Kód GML pre obj_character by mohol mať takúto 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);
Game maker - Efekty
Teraz je hra dokončená :) Na stiahnutie prikladám zdrojový kód a použité sprity.

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 399x (12.49 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Všetky články v sekcii
Game maker - Efekty
Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity