Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Chyba vykreslování

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Chyba vykreslování

Autor: JaroB

16:39:59 05.04.2011

Tak ať se dílo podaří !

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

14:31:32 05.04.2011

Aha, tak dobře. Tak to bude vše, díky. :)

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

14:21:33 05.04.2011

do jednoho dximagelistu lze nahrát jen jeden dxg soubor (přidání z jiného jsem nikde neviděl). Po nahrání nových dat je nutné volat prune funkci pro vymazaání zásobníku.
Samozřejmě že lze pracovat s více dximagelisty, ale jména obrázků musí být unikátní.

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

14:18:19 05.04.2011

Funguje to tak, jak má! :) Takže budu pracovat teda s tím jedním DxImageListem. Ale měl bych k tomu dotaz jeden ještě ... Lze nahrávat do jednoho DxImageListu z více .dxg souborů? Nechci mít třeba 200 obrázků v jednom souboru, ale že bych si to rozložil třeba do 10-ti souborů a ty postupně do toho Listu načetl. Jde to?

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

13:58:35 05.04.2011

Jo, už to asi chápu. Zkusím to udělat s tím jedním DXImageListem, a pak se kdyžtak ozvu. :) Díky moc.

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

13:56:20 05.04.2011

Aha, tak to je jasné. Pokud bys použil pouze jeden DXImageList s unikátními jmény v rámci celého projektu, tak by to našel vždycky dobře.
Problém je v tom, že v zásobníku textur se hledá podle názvu, pokud máš 2 stejné tak se najde jen ten první (tedy i špatně). Doporučuji mít aktivní buď jen jeden dximagelist anebo dodržet unikátnost názvu obrázků. Lze samozřejmě udělat ještě něco jako vyčištění zásobníku, ale to jen v opodstatněných případech, má to za následek pád FPS (protože se zásobník musí zase znovu naplnit)
:)

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

13:48:13 05.04.2011

Jo, zkusím. Né, vím, kde je chyba, jen nevím proč. Ono to najde zprávný obrázek, ale v jiném listu ... Já mám v každém listu stejně pojmenované obrázky, takže obrázek je vždycky zprávný, jen to použije špatný DxImagelist, což mě právě zaráží, když jsem si to odkrokoval a metodu Draw provádí srpávný DxImageList a né ten, z kterého to nakonec vykreslí.

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

12:27:49 05.04.2011

Zkuste si to! Zkopírujte si prototypový soubor do nového adresáře a vložte do dximagelistu obrázky, tak jak jsem popisoval :)

Ještě poznámka k původnímu dotazu: Pokud se vykresluje něco jiného než žádáte, tak ověřte jména obrázků v příslušném imagelistu a text, který posíláte do funkce Find().

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

12:12:29 05.04.2011

Tak to bych vás nechtěl zase tak moc zatěžovat. Nejdřív bych se pokusil sám to upravit. Takže vy jste říkal, že by tento problém mohlo vyřešit používání jen jednoho listu? A do něj dát třeba 100 obrázků?

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

12:09:15 05.04.2011

Podporu řeším tak, že když mi pošlete svůj projekt, který je možné přeložit, pokusím se najít buď chyby nebo návrh na optimalizaci a upravený Vám ho vrátím zpět. Nebo, pokud nechcete poskytovat celý projekt, vysekněte problematický kód do jiného demo ale kompilovatelného projektu.

V případě když budete mít návrh na změnu fw DelphiX, nebo váš problém povede k úpravám fw, které budou přínosem, změním nebo doplním funkcionalitu do balíku DelphiX a zveřejním to.

:)

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

12:03:16 05.04.2011

Tak teď to trošku nechápu. :D Vy chcete, vidět, co to přesně dělá, nebo se podívat, jak to vykresluji?

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

11:34:29 05.04.2011

Abych to mohl přeložit :)

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

11:18:47 05.04.2011

Jakože celý projekt bez exe? Nevím, jestli se v tom vyznáte. Nestačí metody, kde to vykresluju?

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

11:11:17 05.04.2011

Nejlepší bude, když mi pošleš ukázku kódu programu, který ti nějak funguje (přeložitelný, ale bez exe), jak to děláš, pak ti můžu adresně poradit :)

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

10:40:29 05.04.2011

Mám tam tyto funkce, ale jelikož ani nevím, co dělají, tak je nepoužívám.

Prototypový soubor? Kde ho najdu? Jo, to chápu, všechny volám přes "Find(s)".

Takže to mám třeba na formulář naházet 30 ImageListů? Nebude to nějak vadit? A tím se ten problém vyřeší?

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

10:06:31 05.04.2011

Podle mého je lepší mít přímo na formu naplácáno víc imagelistů, protože jinak musíš nastavovat spoustu věcí ručně viz:
[code]
var
LForest: TDXImageList;
...
LForest:= TDXImageList.Create(Self);

with LForest do
begin
Name := LForest;
DXDraw := DXDraw1;
Items.LoadFromFile('Images\myimages.dxg');
end;
[/code]

a navíc máš pár funkcí (kromě Load.. a Save..) přímo nad imagelistem přístupných v design time jako je "Glue It" a "Shine effect" - pokud tedy používáš (un)DelphiX verzi 1.09 (na komponentem stisknout pravé tlačítko myši).

Ale i funkcí Load.. můžeš najednou načíst do imagelistu kvanta obrázků – bitmap, bez ohledu na jejich velikost… stačí je všechny najednou vybrat (nejlepší je mít je v jednom adresáře, pak se správně nastaví i jména obrázků).

Podívej se do prototypového souboru, jak je zacházeno s imagelistem (ale vyvaruj se volání funkcí imagelistu přes číselný index, to pak nefunguje hledání obrázků v hardware akcelerovaném vykreslování – nenajde se textura).

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

8:37:24 05.04.2011

No já to právě do těch listů nahrávám z externích *.dxg souborů. A vytvářím si listy například:

LForest:TDxImageList;

Do něj uložím pár obrázků(30x30,bmp) a pak s ním pracuju, když chci vykreslit krajinu stromů. Upřímně vůbec nevím, jak optimalizovat velikost, formát a podobné věci, v DelphiX jsem začátečník.

Přídávám je tam takto:

LForest:=TDxImageList.Create(self);

a pak tam nahrávám soubor takto:

LForest.Items.LoadFromFile(´Images\Forest.dxg´);

A vykrsluji takto:

LForest.Items.Find(s).Draw(Mapa.Surface,x,y,0);

Tak snad vám to pomůže.

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

22:42:04 04.04.2011

Prozatím bych udělal jeden imagelist (vyšel bych z prototypového souboru). Obsah imagelistu je možné upravovat a vytvářet jako externí modul *.dxg (viděl jsem takto členěné levely her), aplikace k vytváření a udržování externího souboru je standardní součástí DelphiX. Všechno, co je možné vytvořit jako statické, je dobré využít, optimalizace velikosti, formátů a tak, je možné udělat až na závěr. Popište spíš jak vytváříte dynamicky listy (a proč), tady zřejmě bude nějaký problém (kolik je tam obrázků, jak jsou asi velké, příp. jaký formát, a jak je tam přidáváte?). Můžete mít v imagelistu třeba jen jeden obrázek poskládaný ze spousty dalších různých rozměrů a vyřezávat z nich podle potřeby (ovšem je nutné mapování). Ale je samozřejmě lepší mít pojmenovaný obrázek, případně rozfázovanou animaci a pohodlně ho vykreslit jedním příkazem.

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: Hebi

21:04:49 04.04.2011

Ano, já to mám právě ve více listech, které vytvářím dynamicky, a nastavuji jim společné DxDraw. A je tam nějaký důvod, proč to nebere více? A nejlépe nějaké řešení. Te´d to s jedním listem utáhnu, ale raději bych to vyřešil hned s těma více. Nevíte jak na to?

Citovat příspěvek

 

Re: Chyba vykreslování

Autor: JaroB

20:54:06 04.04.2011

Doporučuji pro začátek použít jeden DXImageList, nacpat do něj obrázky a všechny obrázky pojmenovat. Předpokládám že v tom "S" je správné jméno příslušného obrázku. A samozřejmě všechny DXImageListy musí mít nastaveno společné DXDraw...

Citovat příspěvek

 

Chyba vykreslování

Autor: Hebi

18:30:39 04.04.2011

Doufám, že je to častý problém, protože se těžko bude asi vysvětlovat. Na surface postupně vykresluju po políčkách(30x30) krajinu a na tu krajinu pak vykreslím panáčka. Panáček se vykreslí, ale místo obrázku panáčka se tam vykreslí obrázek lesa ... vůbec to nechápu, protože panáčka vykresluju metodou:

Panacek.Items.Find(s).Draw(Mapa.Surface,Position.X*30,Position.Y*30,0);

Takže vůbec nechápu, jak se do toho dximagelistu může dostat ten obrázek lesa, který je v jiném dximagelistu. Neví někdo, co s tím?

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: