Problikávání spritů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problikávání spritů – C / C++ – Fórum – Programujte.comProblikávání spritů – C / C++ – Fórum – Programujte.com

 

Sony0
Návštěvník
22. 1. 2008   #1
-
0
-

nevěděl by někdo jak zabránit tomu aby mi problikávaly dvě překreslující se vrstvy (pozadí,objekt)? v cyklu mám (bez věcí co se netýkají kreslení):



while(quit==false)
{
bckg.show();
dude.move();
dude.show();

regulateFPS();
}


sprite objektu dude je neanimovaný, neprůhledný gif a loaduje se inicializaci s tím že jsou samozřejmě vynechány pixely pozadí..

sníkmy mám nastavené na 24 za sekundu.

Nahlásit jako SPAM
IP: 62.177.83.–
Jonyzz0
Návštěvník
22. 1. 2008   #2
-
0
-

To Sony : Nebylo by špatné, kdyby si také uvedl pomocí jaké grafické knihovny to celé vykresluješ. Jinak k tomu problikávání obrazu mě napadlo, máš zapnutý doublebuffering ?

Nahlásit jako SPAM
IP: 62.40.69.–
Sony0
Návštěvník
22. 1. 2008   #3
-
0
-

To Jonyzz : dělám to v SDL...ale na ten doublebuffering sem zapomněl jak na smrt..to máš pravdu, dík moc.zejtra to zkusim určitě to je tim

Nahlásit jako SPAM
IP: 62.177.83.–
Sony0
Návštěvník
23. 1. 2008   #4
-
0
-

jooo tak sice ten doublebufering sem zaplej neměl ale ani s nim to nepřestalo problikávat :(

Nahlásit jako SPAM
IP: 62.177.83.–
Jonyzz0
Návštěvník
23. 1. 2008   #5
-
0
-

To Sony : No, teď mě napadlo, jestli si nezapoměl na konci volat SDL_Flip pro prohození bufferů, jestli ani to nepomůže, tak sem hoď radši celej zdrojovéj kód, nebo alespoň část té vykreslovací funkce.

Nahlásit jako SPAM
IP: 62.40.69.–
23. 1. 2008   #6
-
0
-

Bez SDL_Flip by se ti to nemelo ani vykreslit. Bckg.show() pocitam resetuje pozadi (jenom barvu nebo neco vic?) ?

Btw, co je zac to regulateFPS? Sam hledam nejlpsi zpusob, jak tohle resit.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
yaqwsx+9
Posthunter
23. 1. 2008   #7
-
0
-

TAk jsem si udelal pokus:Mam sprite a ten vykreslim a v zapeti obnovim, pote vykreslim spoustu spritu a obnovim cele okno.Vysledek?Pri obnovovani celeho okna to neblika....Ale proc, tak na to nemuzu prijit...

Nahlásit jako SPAM
IP: 85.160.110.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Sony0
Návštěvník
23. 1. 2008   #8
-
0
-

To yaqwsx : no já když sem to okno obnovoval bez pozadí resp když tam v pozadí nebyl ten obrázek ale jenom vyplněnej obdélník okna tak mi to taky neblikalo. blikat to začalo až když sem tam začal obnovovat ten surface s obrázkem pozadí..

Nahlásit jako SPAM
IP: 62.177.83.–
Sony0
Návštěvník
23. 1. 2008   #9
-
0
-

jinak todle je moje funkce na vykreslování:



void draw(int x,int y,SDL_Surface *source,SDL_Surface *dest,SDL_Rect pozice)
{
SDL_Rect ofset;
ofset.x=x;
ofset.y=y;
SDL_BlitSurface(source,&pozice,dest,&ofset);
SDL_Flip(dest);
}



timhle loaduju image:



SDL_Surface *loadImage(std::string filename)
{
SDL_Surface *optimizedImage=NULL;
SDL_Surface *loadedImage=NULL;
loadedImage = IMG_Load( filename.c_str() );
optimizedImage = SDL_DisplayFormat( loadedImage );
SDL_FreeSurface( loadedImage );
SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0xFF, 0xFF, 0xFF ) );
return optimizedImage;
}

a timhle loaduju pozadí:


wallpaper=IMG_Load(filename.c_str());

Nahlásit jako SPAM
IP: 62.177.83.–
Sony0
Návštěvník
23. 1. 2008   #10
-
0
-

To CommanderZ : RegulateFPS to je jenom Delay() na konci cyklu aby každej ten cyklus vzal stejnej kus času..bckg.show() je normální vykreslení surfacu stejně jako u toho objektu dude (ta funkce draw)

Nahlásit jako SPAM
IP: 62.177.83.–
Jura
~ Anonymní uživatel
637 příspěvků
24. 1. 2008   #11
-
0
-

To Sony :
No, asi by bylo lepší si to nakreslit VŠECHNO na jeden buffer a ten až potom pouze jedním volaním SDL_Flip vykreslit. Popřípadě sem ješte vlož funkci RegulateFPS, protože jsem nějak nepobral, co myslíš tím Delay(). A taková další poznámka, pokud možno předávej string přes referenci, omezíš tím volání kopirovacího konstruktoru, který má taky nějakou režii(samozřejmě záleží na implementaci třídy string ve tvém prostředí).

Nahlásit jako SPAM
IP: 85.207.192.–
Sony0
Návštěvník
24. 1. 2008   #12
-
0
-



void regulateFPS()
{
if((SDL_GetTicks()-lastTime)<(1000/FPS))
{
SDL_Delay((1000/FPS)-(SDL_GetTicks()-lastTime));
}
lastTime=SDL_GetTicks();
}

Nahlásit jako SPAM
IP: 62.177.83.–
Sony0
Návštěvník
24. 1. 2008   #13
-
0
-

To Jura : jooo to s tim jednim bufferem to zní docela dobře.mnohem líp než to jak sem to vykresloval do teď. zkusim to...

Nahlásit jako SPAM
IP: 62.177.83.–
Sony0
Návštěvník
24. 1. 2008   #14
-
0
-

no jasny...problém vyřešen :)

btw tohle neni poprvé co jsi mi pomohl vyřešit problém. fakt moc díky.

Nahlásit jako SPAM
IP: 62.177.83.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý