.[ ČeskéHry.cz ].
VilTAGE - Dart Framework
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Ostatní
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 20. září 2014, 14:14:13    Předmět: VilTAGE - Dart Framework Odpovědět s citátem

Nejsem si jistý, zdali je tohle správná rubrika, tak mě popřípadě někam přesměrujte. Chtěl bych zde ukázat svůj 'engine' s názvem VilTAGE (ViliX's Text/ASCII Game Engine). Ještě předtím, než se zasmějete nad tímto egoistickým názvem, tak si vzpomeňte na Linuse a jeho Linux Very Happy
Jak jste asi už z názvu poznali, tak se jedná o engine (spíše framework) pro textové hry. Nazval jsem to spíše frameworkem i když název uvádí engine, protože se nejedná o žádný skvělý program, kde se různě skládají kostičky, ale o pár knihoven.
Je to napsáno v Dart (v poslední době můj oblíbený jazyk) a je to určeno pro vývoj Dartu (je možnost i pro JS, ale to je komplikovanější). Hlavní důvod, proč jsem něco takového začal dělat je, že si chci připravit nějáký základ pro různé soutěže (viz. LD), kde není proti pravidlům používat takovéto enginy/frameworky, které jsou věřejně sdílené. Když jsem již zmínil to veřejné sdílení, tak nesmím zapomenout na to, že tento projekt je veden jako GitHub repozitář a je možné se na něj podívat zde. Na wiki jsou zatím dvě stránky, dnes večer tam plánuji přidat něco více, aby se vysvětlily některé věci.
Nyní už k funkcím, VilTAGE by měl být schopen nahradit ten 'boilerplate' kód, který píšu vždy při dělání jakékoliv hry. Teď je tam tedy smyčka, která vykresluje a updatuje. Stará se o všechny věci, které přímo nesouvisí s hrou (např. střelba hráče).
Teď trochu k námětu a fiozofii tohoto frameworku: Vše ve hře je Entita. Entita je objekt, který je při každém volání metody 'render' vykreslen a při každém volání 'update' je zavolána metoda 'update'. Skvělý způsob jak toho využít je vytvořit si například třídu Hráč, která 'extends' (nenapadá mě český ekvivalent) třídu Entita. Pokud se ve hráči vyskytuje metoda 'update', pak bude volána ta metoda a o zbytek se postará framework. Entita má pozici x a y a také pole objektů 'State'. 'State' uchovává zase pole objektů 'CharNode', které v sobě mají uložený samotný znak, který je zobrazován. Do 'CharNode' se dá přidat různé CSS, apod. Pole 'State' existuje v Entitě především kvůli animaci. Při vytvoření nové Entity má toto pole v sobě jeden základní objekt.

Některé (i výše zmíněné) věci nejsou ještě zcela implementovány, neboť jsem na tom začal dělat před čtyřmi dny, ale věnuji tomu spoustu svého času a velmi mě to baví Smile V budoucnu se plánuji zaměřit hlavně na vstup od uživatele a přizpůsobitelnost.

Pokud máte zájem VilTAGE používat nebo chcete třeba kouskem kódu či nápadem přispět, můžete mi napsat na Twitteru nebo se vyjádřit zde a já vše milerád vysvětlím.



Ještě připomínám, že ani já to nepovažuji za nic světoborného, ale spíše za něco, co by mi mělo ušetřit např. při LD tak 10 hodin práce.

Odkaz na GitHub projekt


Naposledy upravil ViliX dne 22. září 2014, 19:04:23, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 21. září 2014, 07:29:37    Předmět: Odpovědět s citátem

Od posledního příspěvku jsem udělal pár úprav, mezi ně patří:

    - Proměnná backgroundColor pro CharNode
    - Proměnná backgroundColor pro celý paragraf
    - Odstraněna závislost na CSS, neboť všechny potřebné atributy jsou již dané v kódu
    - Přidán list CSS tříd CharNode, který může být upravován
    - Ošetření některých situací
    - Přidány metody pro načítání celých částí textu (řádek, čtverec)
    - Zprovozněno GameJolt API


Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
DespeRadoX



Založen: 28. 07. 2007
Příspěvky: 520

PříspěvekZaslal: 21. září 2014, 09:42:52    Předmět: Odpovědět s citátem

pekne , nazov by som zmenil na ViliX's New Text/ASCII Game Engine
bude to mat smrnc VINTAGE
_________________
http://www.touchgames.eu/
http://playito.com
TW: @Despo100
Space Merchants Online ...zruseny, pracujem na mobilnej verzii space merchantu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 21. září 2014, 10:04:29    Předmět: Odpovědět s citátem

S názvem jsem měl asi největší potíž. První jsem chtěl, aby to bylo kratší, ale když jsem si (většinou zkratky) vygooglil, tak už to bylo zabrané.
ViNTAGE je dobrý název, ale googlitelnost bohužel žádná.
Také už logo je inspirované tím názvem VilTAGE (=> voltage).

Každopádně moc díky za nápad Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 22. září 2014, 07:53:59    Předmět: Odpovědět s citátem

Extends je cesky "dedi"...

Jinak ty zdrojaky jsem jen rychle prolitnul, par veci nechapu:
- Proc je kazda trida ve sve vlastni library? Very Happy Sice neznam dart, ale tohle asi nebude spravne, ne?
- Na co tam mas ruzne frekvence pro update a render? Proc nekolikrat ve stejnem vlakne renderujes neco, co se jen jednou updatovalo? Very Happy
- Jak se v tom budou delat framerate-independent hry?

Jinak nekde tam mas vylozene chyby (text.length==1 && text!=null). Spousta veci ma ne uplne vystizne nazvy Smile (Opravdu se renderuje zapisem do pole s nazvem Utility.ar? Nemelo by getChar() v char_node byt spis neco jako getHTML()?).
Celkove mi ten kod prijde trochu zvlastni, ale to by bylo na delsi diskuzi. Strucne receno - ja bych to pojal jinak.

U te ukazkove hry toho zatim moc nemas. Nicmene proc se o svou polohu v zavislosti na vstupu nestara v update() samotna trida Player?
Jinak actual se spelluje s jednim "l" Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 14:11:48    Předmět: Odpovědět s citátem

Framerate a update rate má výchozí hodnoty (60 a 30) a jdou měnit. Je to tak kvůli tomu, že animace se budou pravděpodobně dít v renderingu (ještě nad tím popřemýšlím). Každá má svou vlastní library, protože jsem očekáva, že na sobě nebudou tak závislé. Plánuji tam místo toho nacházet různé 'part' atd.. O té chybě jsem si vědom (naštěstí není game breaking, neboť length je v případě null textu pouze taky null a dá se porovnávat s číslem). Vznikla rychlosti úpravou jedné chyby.

Tu ukázkovou hru jsem zatím nějak moc neřešil a budu se tomu věnovat asi až ve VilTAGE přibudou ještě nějaké další funkce. getChar() asi změním na getHTML(), to máš asi pravdu Smile

Moc děkuji za připomínky Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 14:31:15    Předmět: Odpovědět s citátem

Jinak pokud tam uvidíš nějakou blbost (sebemenší) tak klidně se to dá i na netu zeditovat Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 22. září 2014, 14:58:51    Předmět: Odpovědět s citátem

To, v jakem stavu se nachazi animace nejake entity, je zalezitosti logiky hry a melo by se to normalne resit v update. Render by mel resit pouze vykreslovani, kdyz uz to mas takto rozdelene. (Treba v libGDX se oboji, jak vis, dela v render.) Predstava, ze se mi bude jednim frameratem menit treba pozice a uplne jinym ratem se bude menit policko v animaci, mi prijde fakt hodne divna Smile

Navic kdyz programujes hry, tak vetsinou chces, aby byly nezavisle na framerate, coz ted u tebe nejde...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 15:10:50    Předmět: Odpovědět s citátem

Ale jde, když je hra vyvíjena třeba v 60fps a 30ups, tak takhle to pojede všude. Jen přemýšlím nad tím, jaký systém pro to mám teď zvolit, aby to dávalo více smysl.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 15:18:49    Předmět: Odpovědět s citátem

Možná myslíš něco jiného a já tě jen nechápu :/ Každopádně jsem změnil 'getChar()' na 'getHTML()', upravil podmínku a chybku ve FasterFaster (tou hrou bych se teď však moc nezabýval).

V LibGDX se pracuje s deltou a to je docela dobrý nápad Smile, mně ale připadá lepší, pokud jsou render a update na sobě nezávislé.

Pokud to co zde píšu nedává moc smysl tak mi to stačí akorát oznámit a přepíšu to tak, že rendering bude volán vždy po update. A to všechno pojede bez omezení a jako argument pro update bude delta.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 22. září 2014, 17:26:16    Předmět: Odpovědět s citátem

I v pripade, ze su na sebe nezavisle, tak MUSIS pracovat s deltou.
Ten "sleep" ani nejaky timing request alebo planovac ti nikdy nezaruci (a ani nema v umysle) presne hentaku deltu. Takze si to musis zmerat. Cez to nejde vlak, ani na kernel urovni, nie to este nejaky JS.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 17:33:32    Předmět: Odpovědět s citátem

S tím tam pracuji (odečítám od sebe dva časy a z toho vzinkne delta). Jen je otázka, zdali udělat ten systém tak, aby rendering byl po každém updatu a updaty běžely jak rychle by šly a měly by deltu jako argument.

Na podobném principu právěže funguje LibGDX, i když ten tam má pouze metodu render.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 22. září 2014, 18:30:41    Předmět: Odpovědět s citátem

Radis napsal:
Extends je cesky "dedi"...

A inherits je potom co?
A když chci nedejbože říct "rozšiřuje", tak použiju jaké slovo? Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 18:53:59    Předmět: Odpovědět s citátem

Tak jsem to tedy přepsal, aby rendering nastal po každém updatu (který je limitován určitou hodnotou, ale zároveň do každé update metody jsem vložil argument delta, který by měl zajistit danou nezávislost.

Doufám, že tohle je to, co @Radis myslel Very Happy

Co se týče extends x inherits tak v tom máš @Mem pravdu (lingvisticky), ale říkat v tomhle případě, že třída rozšiřuje jinou je poněkud zvláštní. Takže 'třída dědí z jiné třídy'. Nechci ovšem začít flamewar, tak to raději nehme Very Happy


Naposledy upravil ViliX dne 22. září 2014, 21:04:57, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ViliX



Založen: 04. 08. 2014
Příspěvky: 116

PříspěvekZaslal: 22. září 2014, 19:03:13    Předmět: Odpovědět s citátem

Již jsem přejmenoval 'Utility.ar' a 'Utility.ar2' na 'Utility.charArray' a 'Utility.charArray2'.
Také jsem zapomněl zmínit, že nedávno jsem také přidal možnost vlastního stylování jednotlivých znaků.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Ostatní Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna