Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 20. září 2014, 14:14:13 Předmět: VilTAGE - Dart Framework |
|
|
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
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í 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 |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 21. září 2014, 07:29:37 Předmět: |
|
|
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 |
|
|
DespeRadoX
Založen: 28. 07. 2007 Příspěvky: 520
|
Zaslal: 21. září 2014, 09:42:52 Předmět: |
|
|
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 |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 21. září 2014, 10:04:29 Předmět: |
|
|
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 |
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 22. září 2014, 07:53:59 Předmět: |
|
|
Extends je cesky "dedi"...
Jinak ty zdrojaky jsem jen rychle prolitnul, par veci nechapu:
- Proc je kazda trida ve sve vlastni library? 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?
- 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 (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" |
|
Návrat nahoru |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 14:11:48 Předmět: |
|
|
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
Moc děkuji za připomínky |
|
Návrat nahoru |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 14:31:15 Předmět: |
|
|
Jinak pokud tam uvidíš nějakou blbost (sebemenší) tak klidně se to dá i na netu zeditovat |
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 22. září 2014, 14:58:51 Předmět: |
|
|
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
Navic kdyz programujes hry, tak vetsinou chces, aby byly nezavisle na framerate, coz ted u tebe nejde... |
|
Návrat nahoru |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 15:10:50 Předmět: |
|
|
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 |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 15:18:49 Předmět: |
|
|
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 , 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 |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 22. září 2014, 17:26:16 Předmět: |
|
|
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 |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 17:33:32 Předmět: |
|
|
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 |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 22. září 2014, 18:30:41 Předmět: |
|
|
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? |
|
Návrat nahoru |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 18:53:59 Předmět: |
|
|
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
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
Naposledy upravil ViliX dne 22. září 2014, 21:04:57, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
ViliX
Založen: 04. 08. 2014 Příspěvky: 116
|
Zaslal: 22. září 2014, 19:03:13 Předmět: |
|
|
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 |
|
|
|