Vlastný efekt prechodu miestností - Otáčanie stránky
Ahoj všetci, kto ste nezanevreli na Game Maker 8.
Mám tu dnes pre vás niečo, čo sa mi nejako nepodarilo nikde vygooglit, tak som si to musel napísať sám a celkom pekne sa to podarilo. Vy si tú prácu môžete ušetriť, pretože sa teraz s vami podelím o výsledok.
Spomenul som si na svoje mladé roky, kedy som pracoval pre Českú televíziu, kde mali trikový stroj ADO 500 a na ňom išli robiť ľahko a dobre rozmanité efekty. Medzi najobľúbenejšie patril efekt otáčania stránky. Jeden obraz odlistuje ako stránka v knihe a pod ním leží list s novým obrazom. Povedal som si, že by to bol pekný prechod medzi miestnosťami v Game Makeru a začal prehrabávať vstavané prechodové efekty - room transitions. Lenže nič. Potom som schmatol Room Transition Expansion Pack, kde je 60 ďalších efektov a tam taky nič. Progooglil som skusmo weby a nikde nič. Ticho som zaklial a dal sa do diela.
Tvorba vlastnej room transition
Je síce zložité ho vytvoriť, ale je potom veľmi ľahké ho používať. Keď vo vašej hre použijete nasledujúci kód, prejdete z miestnosti do miestnosti novým vlastným efektom.
//definice transition_define(88,'pageturn'); transition_steps=500; transition_kind=88; //přechod z room0 do room1 if (room==room0) { room_goto(room1); }
V zložke Scripts musíte mať nakopírovaný môj skript pageturn, ktorý ten efekt vytvára. Byť tam musí, ale nemusíte naň vôbec siahať. Samosebou nesmiete rovnaký názov použiť pre niečo iné, ale to snáď ani nemusím pripomínať.
Ako je vytvorený skript Pageturn
Manuál je v tomto smere trochu strohý a tak som mal mierne obavy, že to nebude fungovať, ale jede to celkom bezpečne. Pravidlo znie, že sa s tým zaobchádza ako so surfaces. Predstavíte si, že existuje jeden surface s obrazom existujúce miestnosti a druhý s obrazom miestnosti nové. Vašou úlohou je napísať skript, ktorý má vstupné parametre takéto:
- argument0 - surface končiace miestnosti
- argument1 - surface nové miestnosti
- argument2 - šírka miestnosti
- argument3 - výška miestnosti
- argument4 - parameter fáza prechodu v rozsahu <0,1>
Majte rovnakú veľkosť u oboch miestností. Skript musí vedieť vykresliť obraz o danej veľkosti, zložený z jedného a druhého surface v takom pomere, aký udáva parameter. Nula znamená, že sa zobrazí pôvodná miestnosť. Jedna znamená, že sa zobrazí nová miestnosť. A napr. 0.5 znamená, že bude vidieť pol nové a pol staré miestnosti.
Celý skript si môžete pozrieť v dev-Lighter alebo v priloženom zdrojáky funkčné ukážky. Ak budete robiť svoje prechodové efekty, majte na pamäti, že to môže byť pomalé na starších počítačoch. U transition define treba zvoliť dostatočne vysoké číslo, pretože nižšie čísla okupujú tradičné efekty GM:
- 0 = no effect
- 1 = Create from left
- 2 = Create from right
- 3 = Create from top
- 4 = Create from bottom
- 5 = Create from centier
- 6 = Shift from left
- 7 = Shift from right
- 8 = Shift from top
- 9 = Shift from bottom
- 10 = Interlaced from left
- 11 = Interlaced from right
- 12 = Interlaced from top
- 13 = Interlaced from bottom
- 14 = Push from left
- 15 = Push from right
- 16 = Push from top
- 17 = Push from bottom
- 18 = Rotate to the left
- 19 = Rotate to the right
- 20 = Blend the rooms
- 21 = Fade out and in
Ďalšie prechody zo štandardného rozšírenia sú v rozsahu 101 až 174.
- tr_create_left
- tr_create_right
- tr_create_top
- tr_create_bottom
- tr_create_left_top
- tr_create_right_top
- tr_create_left_bottom
- tr_create_right_bottom
- tr_create_center_hor
- tr_create_center_vert
- tr_create_center
- tr_create_outside_hor
- tr_create_outside_vert
- tr_create_outside
- tr_create_bars_hor
- tr_create_bars_vert
- tr_create_bars_both
- tr_shift_left
- tr_shift_right
- tr_shift_top
- tr_shift_bottom
- tr_shift_left_top
- tr_shift_right_top
- tr_shift_left_bottom
- tr_shift_right_bottom
- tr_stretch_left
- tr_stretch_right
- tr_stretch_top
- tr_stretch_bottom
- tr_stretch_left_top
- tr_stretch_right_top
- tr_stretch_left_bottom
- tr_stretch_right_bottom
- tr_stretch_center_hor
- tr_stretch_center_vert
- tr_stretch_center
- tr_stretch_outside_hor
- tr_stretch_outside_vert
- tr_stretch_outside
- tr_push_left
- tr_push_right
- tr_push_top
- tr_push_bottom
- tr_squeeze_left
- tr_squeeze_right
- tr_squeeze_top
- tr_squeeze_bottom
- tr_rotate_in_left
- tr_rotate_in_right
- tr_rotate_out_left
- tr_rotate_out_right
- tr_interlace_left
- tr_interlace_right
- tr_interlace_top
- tr_interlace_bottom
- tr_blocks
- tr_blend
- tr_fade_in
- tr_fade_out
- tr_fade_outin
- tr_melt
- tr_diagonal1_in
- tr_diagonal1_out
- tr_diagonal2_in
- tr_diagonal2_out
Ak vytvoríte vlastných prechodov viac, je samozrejme možné nahradiť ich čísla názvy svojich premenných. Keď použijete číslo už existujúce efektu, prepíše sa pôvodný gamemakerovský efekt.
napr .:
transition_define(1,'pageturn');
urobí, že sa namiesto Create from left použije pageturn aj keď medzi miestnosťami prejdete ikonkou.
! Transition define je potrebné použiť pred každým prechodom znova!
Transition steps hovorí, ako bude prechod rýchly a tiež plynulý. Nesúvisí s rýchlosťou hry nastavenou v room_speed. Má defaultný hodnotu 80, čo je obvykle akurát. Vyššia je pomalší a plynulejší, menší je rýchlejší.
Použitie v rôznych verziách GM
Vlastné room transitions by mali byť bezproblémové v Game Makeru 8.0 i 8.1. Ak niekto používa staršiu verziu, musí overiť v manuáli, či room transitions podporuje. Game Maker Studio to momentálne nevie v žiadnej verzii. Ak v Štúdiu budte tento efekt chcieť, musíte patričné surfaces skriptu dodať ručne. Ak zvládnete vytvárať vlastné efekty, nemal by to byť prílišný problém, ale je to práca navyše. Výhovorka YYG pre vyškrtnutie týchto funkcií (vraj z dôvodu kompatibility medzi platformami) je viac ako trápna. Keď to ide vytvoriť GML kódom, nie je snáď dôvod, prečo by to nešlo mať zabudované od výroby.
Užite si zábavu a vytvorte pekné nové prechody. Alebo si proste len pridajte moje listovanie do svojho repertoáru.
Keď ma zmienite potom v credits, nebudem sa hnevať.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 202x (1.22 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker