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:



pořadí vykreslování v SDL

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: pořadí vykreslování v SDL

Autor: DannyB

17:49:33 25.06.2008

Blituje se pomocí SDL_BlitSurface(). Když blitneš surface A do C a pak B do C, tak v C podle mě B vždy překryje A.

Chyb se tam může udělat plno, z hlavy mě napadá:
1. v jednom z těch Tvých surfaců nedopatřením nic nemáš
2. zdrojový surface má nastavenou 100% průhlednost
3. v souboru s obrázkem, ze kterého pochází zdrojový surface, je nějaká (asi 100%) průhlednost
4. spletl sis surfacy a např. blituješ z cíle do zdroje
5. ve svém programu máš logickou chybu a např. na některý z těch blitů nikdy nedojde
6. řekl bych, že se mohou objevit i problémy s konverzí barev, když zdrojový surface není přesně toho samého typu, co cílový
7. omylem blituješ jiný výřez (např. jenom pravý dolní roh místo celé obrazovky)
8. něco mi říká, že struktury SDL_Rect musíš poctivě znova naplnit před každým blitem
9. po všech blitech se snad musí updatovat fyzická obrazovka

Kdyžtak pošli zdroják. ;-)

Citovat příspěvek

 

pořadí vykreslování v SDL

Autor: rascal

11:51:41 05.06.2008

Chtěl jsem se zeptat, mají snad surfacy v SDL nějakou vlastnost, která určuje pořadí při blittingu a tudíž co bude nakonec vidět navrchu? Protože já si myslel, že to záleží jen na pořadí volání blitting funkcí a na vrchu je prostě to, co se vykreslí jako poslední. Ale tady to prostě nefunguje:

if(temp.layer1 != 0) m_Surfaces[temp.layer1].Draw
(m * TILE_SIZE - (int)m_fFineX, n * TILE_SIZE - (int)m_fFineY, m_Screen);

if(temp.layer2 != 0) m_Surfaces[temp.layer2].Draw
(m * TILE_SIZE - (int)m_fFineX, n * TILE_SIZE - (int)m_fFineY, m_Screen);

m_Surfaces[1].Draw(9 * TILE_SIZE, 6 * TILE_SIZE, m_Screen);

if(temp.layer3 != 0) m_Surfaces[temp.layer3].Draw
(m * TILE_SIZE - (int)m_fFineX, n * TILE_SIZE - (int)m_fFineY, m_Screen);

Snažím se napsat si jednoduchý engine zobrazující scrollující mapu složenou z jednotlivých dlaždiček. Mapa je pole, každá buňka má 3 vrstvy. První dvě vrstvy se mají zobrazit pod hráčem (to jsou ty první dvě vykreslení), pak je vykreslena postava hráče a až na ní třetí vrstva (poslední vykreslení). Samotný blitting probíhá v mnou napsané třídě Surface. Problém je, že postava hráče se pořád objevuje navrchu. Už nevím, čím by to mohlo být, nejspíš nějaká blbost. Netušíte někdo, kde je zakopaný pes? V případě potřeby můžu poslat celý zdroják.

Citovat příspěvek

 

 

 

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

Uživatelské jméno:

Heslo: