Bludisko za pár minút
Zaoberal som sa myšlienkou, ako v GM vytvoriť naozaj veľké bludisko, bez toho aby som musel klikať stovky múrov ručne. Pretože výsledok vyzerá všeobecne platný, tak sa s vami oň podelím. K pochopeniu by ste mali byť schopní písať kód v GML na úrovni prípravy skriptov a bolo by dobré rozumieť vykresľovanie do surface.
Napadlo ma, že najrýchlejší spôsob, ako editovať múru je použiť sprite. Je to jednoduché a extrémne účinné. Nie je totiž potrebné písať editor a formát dát je bežný obrázok (napr. Png). Stačí namaľovať malý obrázok, kde akýkoľvek čierny pixel bude bod múru. Obrázok by mal byť maličký. Ja som použil 123x92 a výsledné bludisko má veľkosť 6396x4784! Potom potrebujem blok múru. Ja som si vyrobil sadu obrázkov, ale stačí akákoľvek výplň.
Postup je celkom jednoduchý. Sprite sa namaľuje pokojne priamo v GM editore. V objekte bez obrázku sa v evente create nastaví veľkosti a spustí sa skript. Ten vytvorí surface, doň vykreslí sprite a berie bod po bode. Porovná farbu bodu s tabuľkou farieb podľa ktorej potom určí, či má v danej pozícii vytvoriť inštanciu objektu múry, prípadne čokoľvek iné.
Nie je ťažké to napísať, však uvádzam, ako som to splácal ja:
Kód skriptu:
// usage: instant_maze(object); // musí mít nadefinovány potřebné hodnoty with (argument0) { //****************************************************** /* draw instance create POSTUP: sprite -> surface -> room */ /* velikostí sprite ( krát násobitel mřížky ) je dána i velikost plochy v místnosti, kterou placement pokryje */ /* surface i sprite má stejný rozmer jako room dělený násobitelem */ plocha=surface_create(rozmer_mrizky_x,rozmer_mrizky_y); surface_set_target(plocha); draw_rectangle_color(0,0,rozmer_mrizky_x-1,rozmer_mrizky_y-1,c_white,c_white,c_white,c_white,0); //vyčištění surface do bílé barvy draw_sprite(bl_plan,0,0,0); //sprite musí mít vlastní center v 0,0 ( levý horní roh ) jinak vyjde mimo a dojde k ořezu+posunu for(ix=0;ix<rozmer_mrizky_x;ix+=1) { for(iy=0;iy<rozmer_mrizky_y;iy+=1) { if is_between(psat_od_x,ix,psat_do_x) & is_between(psat_od_y,iy,psat_do_y) { barva=surface_getpixel(plocha,ix,iy); //získat barvu pixelu for(ic=c_table_min;ic<=c_table_max;ic+=1) { if barva==c_table[ic,1] { instance_create(kam_psat_x+(ix*nasobitel_mrizky),kam_psat_y+(iy*nasobitel_mrizky),c_table[ic,2]); } } } } } //vrátit kreslení do obrazu a zlikvidovat surface surface_reset_target(); surface_free(plocha); //- } /* VZOREK ZADÁNÍ HODNOT //ruční vstupy bl_plan=bludiste; //sprite určující vzhled chodeb ( používat jen malý sprite - 123x92 je pak 52x větší ) rozmer_mrizky_x=sprite_get_width(bl_plan); rozmer_mrizky_y=sprite_get_height(bl_plan); nasobitel_mrizky=52; //--- kam_psat_x=0*nasobitel_mrizky; //posun všech vytvořených instancí o konstantu kam_psat_y=0*nasobitel_mrizky; //tentokrát už ale jde o velikosti v ploše místnosti, tedy vynásobené násobitelem mřížky //--- psat_od_x=0; //reagovat jen na daný výřez z plochy psat_od_y=0; psat_do_x=rozmer_mrizky_x; //rozmer mrizky je full hodnota psat_do_y=rozmer_mrizky_y; //konec: ruční vstupy */ /* ********* OBJECT TABLE of MATCH COLOR ************** */ /* c_table_min=1; c_table_max=3; //must be consistent in this range c_table[1,1]=c_black; c_table[1,2]=wall; c_table[2,1]=c_blue; c_table[2,2]=leader; c_table[3,1]=make_color_rgb(0,255,0); c_table[3,2]=stonoha; */
Je tam použitý primitívne skript is_between, ktorý vyzerá takto:
//arg0<=arg1<=arg2 return ((argument0<=argument1)&&(argument1<=argument2));
V balíčku k stiahnutiu je exe file, kde je vidieť bludisko vytvorené týmto spôsobom. Všetky prvky bludisko boli nasadené spomínaným skriptom. V bludisku je figúrka čarodejníka s ktorou ide pohybovať šípkami. Sú tam taky dve potvorky, ktoré ale nič nerobia. Bludisko nemá žiadny cieľ, je to len demonštrácia, ako to vyzerá a ako to behá. Pre urýchlenie používam aktiváciu a deaktiváciu inštancií popísanú pomerne obsiahlo v helpu Game Makeru. Ak chcete použiť tieto moje skripty, sú voľne k dispozícii a ich kópie sa nachádzajú v priloženom RARu, takže stačí použiť load. Z dolnej časti skriptu môžete potom použiť príklad nastavenie parametrov. Parametre musia byť nastavené pred spustením skriptu. Odovzdáva sa potom objekt, ktorý dané parametre lokálne obsahuje.
Možno som to napísal zložito, ale je to jednoduché. Proste to urobí bludisko priamo podľa bodov vo sprite, aby človek nemusel klikať múru ručne.
Silne odporúčam napísať si to po svojom a rozhodne nepoužívajte skript, u ktorého plne nechápete, čo presne robí.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 315x (3.71 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker