The Remote Pumpkin



Game Maker jednoduše [díl 5.] - Jak na efekty

iconPřečtěte si jak velmi jednoduše docílit efektů a plynulých přechodů ve vašich hrách. Stačí pár scriptů a efekty už můžete doslova sypat z rukávu. Systém "měničů" pracuje s proměnnou current_time, je tedy přesný na milisekundy a nezávislý na fps. Můžete se na něj spolehnout. Vždy dostanete přesné výsledky.
V tomto díle vám ukážu svůj často používaný systémek na efekty. Má velmi jednoduchou obsluhu a zvládne to opravdu každý. Použití je velmi různorodé. Nejčastěji na různé efekty a přechody. Velmi rychle a jednoduše vytvoříte přesně načasované efekty, nezávislé na FPS a ke všemu je napíšete na pár řádků.

A co že to ten měnič vlastně je?
Jednoduše - je to věc, které zadáte počáteční hodnotu, koncovou hodnotu a čas. Tím je vše připraveno. Měnič poté plynule mění svou hodnotu z počáteční hodnoty na tu koncovou. Vám stačí např. v Draw Eventu odchytávat jeho hodnotu a ovlivňovat jí vykreslování hry. Například barvu, průhlednost... No a desítky dalších využití by odříkal asi každý.

Systém (odkaz ke stažení dole) obsahuje tyto funkce:
changer_init();
• Připraví vše potřebné pro chod systému.
• Spouštět pouze jednou.
• Nepoužívejte globální proměnné global.CH_SYS a global.CH_CNT


changer_add(start_value, end_value, time);
• Vytvoří měnič (který rovnou běží) a vrátí jeho ID.
start_value je hodnota, kterou měnič začíná
end_value je hodnota, ve kterou se měnič plynule změní
time určuje čas, za který se změní hodnota z počíteční na koncovou


changer_reset(changer_id, start_value, end_value, time);
• Přenastaví měnič identifikovaný pomocí id. Změny se projeví ihned.
changer_id identifikuje měnič. Toto unikátní ID je vraceno funkcí changer_add
start_value je hodnota, kterou měnič začíná
end_value je hodnota, ve kterou se měnič plynule změní
time určuje čas, za který se změní hodnota z počíteční na koncovou


changer_get(changer_id);
• Vrátí hodnotu měniče,
changer_id identifikuje měnič. Toto unikátní ID je vraceno funkcí changer_add


changer_ended(changer_id);
• Vrátí true / false podle toho, je-li již měnič na konci
changer_id identifikuje měnič. Toto unikátní ID je vraceno funkcí changer_add


changer_endval(changer_id);
• Vrátí koncovou hodnotu měniče
changer_id identifikuje měnič. Toto unikátní ID je vraceno funkcí changer_add


Pár příkladů:
V následujícím příkladu je jednoduchý kód, kdy obdélník střídavě mění barvu z červené na žlutou a zpátky.
Create Event:
changer_init();
ch = changer_add(
0, 1, 500); // 0 – 1 behem pul vteriny
Draw Event:
var a;
a = changer_get(ch);
if (changer_ended(ch)) changer_reset(ch, a, !a, 500);
draw_set_color(make_color_rgb(
255, a * 255, 0));
draw_rectangle(x, y, x +
200, y + 100, 0);


Chvíli jsem přemýšlel a snažil se udělat co nejkratší kód, který by řešil to, co kód v první ukázce. Nejkratší možnost co jsem vymyslel byla tato:
Create Event:
to   = 1;
tick = current_time;
Draw Event:
var a;
a = (!to) + ((to - (!to)) /
500) * (current_time - tick);
if (tick + 500 <= current_time) {
tick = current_time;
to = !to;
}
draw_set_color(make_color_rgb(
255, a * 255, 0));
draw_rectangle(x, y, x +
200, y + 100, 0);
Tento kód má samou nevýhodu: Je totiž šitý na míru jen ke změnám mezi 1 a 0. Měniče jsou univerzální a můžete s nimi měnit libovolná čísla, za libovolný čas a navíc nemusíte při tvorbě každého efektu vymyšlet výpočty, jak spočítat číslo, které za vás vyřeší právě měniče.

Ke stažení:


« Předchozí díl seriáluDalší díl seriálu »


272 shlédnutí
Publikoval Pelpet před 8 lety

Komentáře (4)



Captcha

To je blbost. Proč vykreslovat obdélník přes sprity? Na co je pak asi draw_rectangle? Navíc, tady nejde o způsob vykreslení ale o způsob počítání hodnot k efektům. I tvé těžkopádné řešení by místo image_alpha -= .1; a alarmů mohlo používat měniče...
Napsal Pelpet před 7 lety
např. takhle: do drawu: draw_sprite_ext(sprite_index,0,0,0,room_width,room_height,0,c_white,image_alpha); a potom jenom do toho objektu napíšu za jakou dobu má např. image_alpha -= 0.1
Napsal aaa před 7 lety
Částice jsou uplně něco jiného. Jak přes částice uděláš například zatemnění obrazovky? Přes tohle jednoduše. Vytvoříš si měnič, a v objektu s nejnižším depth vykreslíš přes celý viewport obdélník černé barvy a dáš tomu alphu z měniče. Fakt nevím, jak toto řešit přes particly
Napsal Pelpet před 7 lety
podle mě je lepší se naučit se sprite editorem v GM a pak částice programovat jen přes direction,speed,alarm[0] atd.
Napsal aaa před 7 lety
©2012 The Remote Pumpkin