Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ongelmia SDL:n kanssa

Prutus [25.05.2006 15:38:58]

#

Eli tuon mainion Heikin oppaan avulla olen aloitellut SDL:n käyttöä. Ongelmia on tullut kuitenkin vastaan, joihin aivokapasiteettini ei tähän hetkeen mennessä ole riittänyt:

1. Tein ohjelman, joka tulostaa kuvan ruudulle, jota voi ohjata nuolilla. Kun sitten ohjaan, edellinen aina kuva jää ruudulle, jolloin vaikka sinistä laatikkoa liikutellessa jäljessä seuraa sininen mato, alkupisteestä alkaen. Kun Heikin esimerkkiohjelmaa koitin ja otin siitä taustakuvapiirron pois, esiintyy siinäkin sama ongelman. Eli: miten ruudun saisi joka piirron jälkeen tyhjäksi lisäämättä taustaa? Seuraava ongelma liittyy jo vähän taustaan.

2. Kun tulostan ohjelmaani (800x600) taustakuvan, laatikon tai yleensäkin kuvan liikuttaminen menee hitaaksi. FPS on ehkä 10 luokkaa. Eihän tästä tule mitään jos pari kuvaa pitää laittaa ja FPS tippuu heti. Mikä tähän auttaisi?

3. Yritin asentaa lisäkirjastoja, mm. SDL_gfx. Latasin paketin, jossa pitäisi olla INSTALL-tiedosto, jossa on hyvät ohjeet. No, kyllähän siellä on INSTALL-niminen tiedosto, kylläkin kovin epämääräinen. Oletuksena ei ole mitään millä avata se. Avasin sen kuitenkin notepadilla, jolloin siinä luki jotakin epämääräistä. Ja mistä ja miten minä jotakin mingw:tä käytän? Mihin puran koko paketin? Voisiko joku hiukan tarkemmin minunlaiselleni amatöörille selittää lisäkirjaston asennuksen. WinXP, kääntäjänä Dev-cpp.

Meitsi [25.05.2006 15:49:15]

#

1:
Tyhjennä tausta täyttämällä se mustalla, näin:

SDL_FillRect(ruutuSurface, NULL, 0) ;

alueena on NULL jolloin koko ruutu tyhjennetään. Nolla taas on musta väri.

2: Päivitä ruudusta vain tarvittu alue.

3: Lataa sdl_gfx suoraan Devc++:san päivitystoiminnolla. Se asentuu automaattisesti parilla klikkauksella. Kannattaa aina katsoa, olisiko paketteja siellä, ennenkuin alkaa käsin asentelemaan.

ZcMander [25.05.2006 15:52:51]

#

Entäpäs jos hän ei käytäkkään Dev-C++?, oppaasta löytyi tarvittava lib-tiedosto, jonka ainakin itse lisäsin linkitettävien listaan, ja sen SDL_gfx paketin mukana tulevan headerit lisäsin SDL:n include kansioon.

Meitsi [25.05.2006 15:53:56]

#

ZcMander kirjoitti:

Entäpäs jos hän ei käytäkkään Dev-C++?, oppaasta löytyi tarvittava lib-tiedosto, jonka ainakin itse lisäsin linkitettävien listaan, ja sen SDL_gfx paketin mukana tulevan headerit lisäsin SDL:n include kansioon.

Prutus kirjoitti:

WinXP, kääntäjänä Dev-cpp.

Metabolix [25.05.2006 16:41:33]

#

2. Joko teet jotakin väärin tai käytät aika hidasta konetta. Kyllä, FPS tosiaan putoaa SDL:n kanssa aika helposti. Varmista, että kaikilla pinnoilla on sama värisyvyys. Käytännössä siis syötä kaikki käyttämäsi kuvat tällaiselle funktiolle:

// Muutetaan pinta, vapautetaan vanha ja käytetään uutta
void Muuta(SDL_Surface *&Kuva, SDL_Surface *Ruutu)
{
	SDL_Surface *Apu;
	Apu = SDL_ConvertSurface(Kuva, Ruutu->format, Ruutu->flags);
	SDL_FreeSurface(Kuva);
	Kuva = Apu;
}

Prutus [26.05.2006 13:16:55]

#

Kiitos neuvoista. Vielä jäi tuo lisäkirjastoasennus onnistumatta. Latasin Meitsin päivitystaktiikalla SDL_gfx paketin, mutta ohjelmaa kääntäessä herjataan SDL_gfx.DLL-tiedoston puuttumisesta, vaikka kyseinen tiedosto on DLL-hakemistossa. Hmmh?

Meitsi [26.05.2006 13:25:59]

#

Pistä kyseinen dll samaan kansioon binäärin ("exen") kanssa, tai windowsin system32-kansioon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta