Pravidla Ucet
Nepřihlášen

Článek

Menu

Pracujeme s ini soubory
Přidáno: 19.07. 2010

Zajímá Vás jak fungují konfigurační soubory, chcete, aby hráči mohli ukládat nejrůznější nastavení? Pokud ano, tak je tento návod přesně pro Vás.

Úvod

Konfigurační soubory jsou používány takřka všude. Jedná se o textový soubor, do kterého lze snadno uložit nejrůznější informace a ty pak znovu načíst. Game Maker v základu dokáže pracovat pouze se soubory ini. A právě práci s nimi se Vás prostřednictvím tohoto návodu budu snažit naučit.

Základy práce

Game Maker obsahuje celkem deset funkcí s předponou "ini_". Abychom vůbec mohli čtení/zápis zahájit, musíme konfigurační soubor otevřít. Dělá se to pomocí funkce ini_open(název souboru) Příklad:

ini_open("config.ini")
.
Game Maker umí číst zároveň pouze z jednoho ini souboru.
Na koncovce nezáleží.
Nyní máme soubor otevřený a můžeme zahájit práci. Mezi základní úkony se řadí čtení/zapisování. Slouží k tomu funkce ini_read a ini_write. U obou typů práce je nutno zadat příponu, kde záleží na tom, zdalipak chcete psát/číst číslo(real) nebo text(string). Při čtení/zápisu čísla se za příponu dosazuje "_real" u textu "_string". Vzniknou Vám z toho tedy následující funkce: ini_read_real(sekce,klíč,hodnota) - slouží ke čtení čísel ini_read_string(sekce,klíč,hodnota) - k vyčtení textu ini_write_real(sekce,klíč,hodnota) - k zapsání čísel ini_write_string(sekce,klíč,hodnota) - k zapsání textu Určitě jste si všimli toho, že závorky nejsou prázdné. Za "sekce" musíte dosadit název "bloku", jedná se o seskupení hodnot určitého druhu. Tzn. že když máte funkce pro nastavení obrazu, tak je nebudete mít v sekci "Audio", ale "Video". Tak počítač pozná, kde má vyčíst ten správný klíč. Klíč je název, pod kterým se skrývá hodnota. Může to být cokoliv, například "fullscreen" nebo "v-sync".
Hodnota u čtecích funkcí je brána tak, že kdyby klíč neexistoval, vytvoří se nový s "defaultní" hodnotou.
U zapisovacích je to hodnota, která se zapíše do ini.
Ptáte se kde zůstane ona vyčtená hodnota? Pokud ji nepoužijete nebo nezaznamenáte do proměnné tak nikde. Příklad použití:
ini_open("config.ini"); //Otevřeme ini soubor.
window_set_fullscreen(ini_read_real("Video","fullscreen",1)); //Nastavíme hru přes celou obrazovku, tedy pokud bude hodnota v ini 1.

show_message(ini_read_string("Test","zpráva","Ahoj Světe!")) // Necháme si zobrazit hodnotu, která se skrývá pod klíčem "zpráva" a sekcí "Test".

ini_write_string("Test","zpráva","Ahoj Teste!"); //A nakonec přepíšeme hodnotu zprávy na "Ahoj Teste!" (Pokod hru s vytvořeným ini souborem restartujete, ukáže se Vám místo "Ahoj Světe!" právě "Ahoj Teste!".

ini_close(); //A samozřejmě uzavřeme veškerou práci s ini.
Jak jsem před chvíli ukázal, práce se musí také ukončit. A to nejlépe ihned po dokončení veškerých akcí. Stačí vyvolat funkci ini_close() a Game Maker ukončí komunikaci s konfiguračním souborem. Posledními čtyřmi funkcemi jsou ty zjišťovací a mazací. Pokud potřebujeme zjistit, jestli sekce nebo klíč existují, můžeme použít funkce ini_key_exists(sekce,klíč) a ini_section_exists(sekce). Příklad:
ini_open("config.ini");
if (ini_section_exists("Test")) { //Pokud sekce "Test" existuje...
if (ini_key_exists("Test","zpráva")) { //A klíč "zpráva" také...
show_message(ini_read_string("Test","zpráva","Ahoj Světe!")); //Zobrazí se obsah klíče "zpráva".
}
}
ini_close();
A úplně posledními funkcemi jsou ini_section_delete(sekce) a ini_key_delete(sekce,klíč). Nevidím sice jejich jakékoli využití, ovšem někomu se možná budou hodit. ini_section_delete(sekce) se, jak už z názvu vyplívá, postará o smazání celé sekce včetně všech klíčů a ini_key_delete(sekce,klíč) smaže pouze zvolený klíč v uvedené sekci. Příklad:
ini_open("config.ini");
if (ini_section_exists("Test")) { //Pokud sekce "Test" existuje...
ini_section_delete("Test"); //smažeme její obsah.
}
ini_close();

Doufám, že se Vám návod líbil a byl alespoň trochu užitečný. Daniel


pozn. - DDL Blue: Už sem ti to opravil, ale pro příště, když píšeš kódy, zalamuj řádky pomocí tagu "# n". Jinak se to špatně čte. Taky bych netvrdil, že INI je texťák, přecijen jsou v tom rozdíly. Třeba že INI je strukturované, a txt ne. Ale to už je spíš detail, jinak hezký tutoriál :).
Klíčová slova: ini konfigurace nastavení
 

Komentáře:

Napsal: Mikefiser
Přidáno: 20.07. 2010

Díky :) Myslím ,že už jsem to pochopil :)

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 20.07. 2010

Sevcik.daniel ti to dobře napsal (Hele, když se to snaříte někomu vysvětlit, možná by bylo lepší to všechno nervát do jednoho řádku, a dělat to přez proměnnou :)). Prostě přečte tu hodnotu, uloží si ji do paměti, zvýší ji o jedna a zapíše ji. Lehké :).

Trvalý odkaz

Přidáno: 20.07. 2010

ini_write_real("options","brightness",ini_read_real("options","brightness",1)+1);

Trvalý odkaz

Napsal: Mikefiser
Přidáno: 20.07. 2010

Počkej,tak jak zvětším hodnotu té proměnné? Napsal jsi to ,ale já to stále ještě nechápu..Mohl by si to ukázat v praxi? ;)

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 20.07. 2010

K tomu prvnímu: Todle prostě GM neumí :). Sčítat, odčítat atd. můžeš dělat pouze s proměnnýma.

K tomu druhýmu: Jde o to, že window_set_fullscreen(true/false) má jeden argument. Tím argumentem je, jestli se to má přehodit na okno, nebo na fullscreen. tj. buď 1, nebo 0. Ty přečteš z INI, jestli je to 1, nebo 0, a to číslo se dosadí do toho argumentu, tj. příkaz na dání se do okna, nebo na full. ;)

Trvalý odkaz

Napsal: Mikefiser
Přidáno: 20.07. 2010

Aha :) Ale vždyť tam budu mít už hodnotu nastavenou,už v tom ini souboru,ne?Ale teď nějak nechápu tohle:window_set_fullscreen(ini_read_real("Video","fullscreen",1)); //Nastavíme hru přes celou obrazovku, tedy pokud bude hodnota v ini 1.

Nehcápu to,vždyť tam enní žádná podmínka,aby se nastavil fullscreen ,když bude hodnota v "fullscren" 1.

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 20.07. 2010

Mikefiser: No, to +1 je nesmysl. kdyby jsi tam měl 1, nastaví se ti to na 1. pokud by jsi to chtěl zvětšovat, musíš nejdřív přečíst hodnotu, která tam už je, uložit do proměnný, zvětšit, a znova zapsat ;)

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 20.07. 2010

NicharCZ: Dokonce ani svůj vlastní? Ok, tak já to pak ještě trochu upravim no...

Trvalý odkaz

Napsal: NicharCZ
Přidáno: 20.07. 2010

DDL Blue: Ne, běžný uživatel nemůže editovat článek, pouze navrhovat...

Trvalý odkaz

Napsal: Mikefiser
Přidáno: 20.07. 2010

Asi jsem to nepochopil správně...Mám:

ini_open("text.ini")

with(ob_sipka)

if mouse_check_button_pressed(mb_left) && ini_key_exist("options","brightness") {ini_write_real("options","brightness",+1)}

ini_close()

Tak když si tam tohle zadám do stepu nějakého objektu a vytvořím si ten ini soubor ,kde budu mít tu sekci "options" a klíč "brightness",tak mi to k hodnotě toho brightness přičte jedna?

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 20.07. 2010

Nejsem si jistej, jaký mají normální uživatelé pravomoce, ale pokud můžeš, trochu si to ještě uprav :). Je vidět, že sem to dělal narychlo :-/

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 20.07. 2010

Todle už ti do editu psát nebudu, ale ono celkově by jsi moh trochu víc dělat odstavce atd. . A neber si todle moje buzerování špatně :D

Trvalý odkaz

Velkej Chytrák
Copyright (c) 2001-2010