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)
spr_character | spr_splash | spr_water_top | water_tile |
- 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ť)
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.
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);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