.[ ČeskéHry.cz ].
Objektový návrh Maria
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Java / J2ME
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Houp



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

PříspěvekZaslal: 10. duben 2009, 21:20:53    Předmět: Objektový návrh Maria Odpovědět s citátem

V Javě jsem poměrně nováček a nejsem si jist, jestli dobře chápu úlohu interfaců. (holt v C++ nejsou)

V Mariovi jsou různé příšery, hráč, nějaké objekty na mapě, které mají společnou vlastnost, že se vykreslují. Takže by mohl být dobrý interface něco jako Drawable, v něm metoda Draw(). Pak udělat objekty typu Drawable a hezky vše vykreslit v jednom cyklu.

Další věc, co budou mít tyto objekty(hráč, příšery..) společnou, že budou mít svojí hlavní smyčku, kde se budou starat o vše potřebné, co mají dělat(hráč reagovat na klávesnici, příšery reagovat na přítomnost hráče atd.)

Takže asi nejlépe změnit Drawable na vhodnější název a přidat metodu MainLoop()?

Nebo nad tím uvažuji špatně?
V C++ bych to asi takhle "složitě" neřešil a měl bych zvlášť cyklus pro objekty, zvlášť pro příšery..
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 10. duben 2009, 21:46:31    Předmět: Odpovědět s citátem

Ja myslim ze je to tak dobre.
v C++ interfacy nejsou potreba protoze podporuje vice nasobnou dedicnost, takze misto nich muzes pouzit tridy s virtuanima metodama. Nevim, jak je na tom s dedicnosti Java. Ale v C# by bez interfacu proste nesla vytvorit trida obsahujici vic vlastnosti treba:
class Monster : IDrawable, IAnimated...
doufam ze v nicem nekecam Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 10. duben 2009, 22:40:56    Předmět: Odpovědět s citátem

No, kazdopadne v tvem pripade je asi interface zbytecnosti. Nepotrebujes definovat novy interface kvuli kazde veci, co ma par objektu spolecnych. V tvem pripade bude asi lepsi udelat pro vykreslovatelne objekty spolecnou nadtridu s abstraktni metodou paint(), protoze toho urcite budou sdilet mnohem vic...

Kdy pouzit interface? Obecne je to ve chvili, kdy potrebujes definovat spolecne vlastnosti v ruznych stromech dedicnosti trid... tj. kdyz mas nekolik trid odvozene od jedne tridy a nekolik trid odvozenych od druhe tridy a potrebujes, aby v obou skupinach mely nejake tridy shodne vlastnosti... (pokud se to teda zase neda udelat tak, ze se to preskupi do jednoho stromu dedicnosti).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 11. duben 2009, 07:08:40    Předmět: Odpovědět s citátem

Mozna jeste typictejsi pouziti interfacu je pouzit je prave jako interfacy Wink

V tomto pripade zapomente na dedicnost (ceho je moc toho je priliz)
Rekneme ze mate konfigurovatelny system, treba textovy editor. A ten vam dovoluje si formou dalsich komponent ci pluginu dodelat treba syntax highlighting nebo kontextove doplnovani (intellisence).

System tedy definuje interface (tedy rika jake metody musi plugin naimplementovat) a v pluginu si pak udelate tridu daneho interfacu a implementujete pozadovane metody. Instanci teto tridy pak zaregistrujete v systemu.

Vlastne to funguje jako takovej chytrejsi "objektovej" callback.
A v c++ se intarfacy delaly (a stale delaji) pomoci abstraktnich trid bez promennych. Viz napr. COM Wink
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 11. duben 2009, 11:09:10    Předmět: Odpovědět s citátem

jelikož každej vykreslitelnej objekt bude mít nejspíš nějakou pozici a něco jako jméno obrázku, tak by bylo lepší to dát do nějaké nadtřídy

ve skutečnosti si myslím že by celá ta metoda Paint() šla napsat v té nadtřídě
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 12. duben 2009, 00:23:00    Předmět: Odpovědět s citátem

Souhlas s krkalem.
Jinak pokud mas problemy s pochopenim, co je interface a jak se pouziva, cili uplne s objektovym navrhem, tak doporucuji nejdrive nacist alespon nejake zaklady z literatury (napr. Thinking in Java - zdarma dostupne na internetu), jinak se asi budes hodne placat.
Nemuzes postavit dum, kdyz nemas pevne zaklady... Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Houp



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

PříspěvekZaslal: 12. duben 2009, 12:46:21    Předmět: Odpovědět s citátem

Tak jsem nakonec interfacy nepoužil. Na následujícím obrázku je můj návrh.



Některé věci zkusím tady vysvětlit. Nejde přesně o kopii Maria, je to zjednodušené. Listy Turtle a Mushroom jsou opravdové příšery, želva, která nezemře po skoku na ní, houbička zemře. BonusLive vlastně není příšera, je to to, co vyskočí z nějakého tilu, a když to chytíte, získáte život.(tady se to liší od originálu)

BlockDestroyable je tile, který se zničí, pokud se ho hráč dotkne zespoda. BlockPoints jsou tile, z kterých padají peníze, když do nich skáčete zespoda. BlockLive je tile, z kterého vyzkočí BonusLive.

Uvítám veškeré připomínky a kritiku.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 12. duben 2009, 13:21:03    Předmět: Odpovědět s citátem

Nestudoval jsem to, ale "Live" je "živý" ... pokud jsi chtěl "život", pak je to "Life" Wink
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Houp



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

PříspěvekZaslal: 12. duben 2009, 14:43:59    Předmět: Odpovědět s citátem

jj, dík. To je tak, když tam pak mám i množné číslo, lives. Opravím to.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 12. duben 2009, 15:34:19    Předmět: Odpovědět s citátem

A když už rejpu do jazyka, tak jsem se na to i podíval. Na malou hru typu Mario to vypadá OK. No ale jak už to bývá, tak na problémy s návrhem si asi příjdeš sám, až to budeš implementovat Smile
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 17. duben 2009, 10:52:33    Předmět: Odpovědět s citátem

Presne tak, napriklad me pripada docela malo rozlisovat "wall" jen jako boolean, tj. jestli nekde zed je nebo neni Smile Uvidis pri implementaci Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Houp



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

PříspěvekZaslal: 17. duben 2009, 12:04:44    Předmět: Odpovědět s citátem

Tak mě varujte předem Smile

Tak ono o té zdi, jak bude třeba vypadat, budu rozlišovat v samotných objektech typu Block

ale abych nemusel každý frame kontrolovat kolizi všech příšer se všemi bloky na mapě, tak navíc si budu pamatovat, kde něco je, a kde není a tedy detekce s mapou bude pro každou příšeru/Maria v konstantním čase.

Tenhle návrh zatím nepočítá s ničím podobným jako quadtree, či podobnými urychleními detekce kolize.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 20. duben 2009, 22:24:07    Předmět: Odpovědět s citátem

Houp napsal:
Tak mě varujte předem Smile
Tenhle návrh zatím nepočítá s ničím podobným jako quadtree, či podobnými urychleními detekce kolize.


Quadtree by ti asi kolize tezko urychlil. Ten pouze optimalizuje pamet.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Mem



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

PříspěvekZaslal: 21. duben 2009, 06:43:45    Předmět: Odpovědět s citátem

sulthan: Eh? Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. duben 2009, 07:10:13    Předmět: Odpovědět s citátem

Mem napsal:
sulthan: Eh? Wink


tak nejak - taky tu kroutim nevericne hlavou - to jsme ten kvadrantovej strom implementovali uplne zbytecne asi v praci - zajimavy je ze s jeho pouzitim mame vyhledavani geometrii v prostoru mnohonasobne rychlejsi Razz
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 -> Java / J2ME Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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