Eli tekstiä pitäis saada kirjoitettua. Tuo lisäkirjastohan tarvitaan (SDL_ttf.h) ja sen olen saanut toimimaan. Heikin ohjeesta olen tutkaillut ja vähän yrittänyt selvää saada ja kun tuon koodin jo 200 kertaa lukenut läpi niin se VÄHÄN aukeaa. Alustana linux ja siinä käytän emacsia.
Käännettäessä koodia ei tule mitään virheitä, mutta kun yritän käynnistää ohjelmaa ruutu vain vilahtaa. Virheitä tulee kaksi (tutkimista varten tulostelee consoleen virheet). Ensimmäinen joka enimmäkseen ihmetyttää on se kun yritän antaa arvon "messagelle"
message = TTF_RenderText_Solid( font, "Hello world.", textColor );
sen jälkeen on varmistaja, että kaikki on kunnossa
if( message == NULL ) { cout << "messagen:n alustus ei onnistunut: " << TTF_GetError() << endl; // Tämä siis toteutuu pois=true; }
toinen virhe tulee kun kutsun funkiota
PiirraKuva(message, naytto, 200, 200);
Ja funktio on
void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y) { if ( kuva == NULL ) { cout << "kuvan alustus ei onnistunut: " << SDL_GetError() << endl; // tämäkin toteutuu return; } // mihin näytöllä SDL_Rect alue; alue.x = x; alue.y = y; // näytölle // koska toinen parametri on NULL, piirretään koko kuva SDL_BlitSurface(kuva, NULL, naytto, &alue); }
Ensiksi haluaisin tietää tuohon ensimmäiseen virheeseen syyn. Miten heti alustamisen jälkeen voi olla mahdollista, että se on silti NULL? Noiden välissä ei ole mitään joten en ole muuttanutkaan sitä NULL:ksi.
Tuo funktio palauttaa NULLin, jos syntyy virhe (http://jcatki.no-ip.org/SDL_ttf/SDL_ttf.html#SEC36). Selvita miksi tuo antaa virheen (eiko GetError kerro mitaan?). Jos et itse saa selvitettya niin vilauttele sita koodia vahasen...
Ratkaisu löyty linuxissa ei toimi
message = TTF_RenderText_Solid( font, "Hello world.", textColor );
Linuxissa pitää käyttää
message = TTF_RenderText_Shaded( font, "Hello world.", textColor, textBackColor );
Kiitos jo kaikille lukeneille :)
Mina kylla joskus kaytin ihan tuota solidia. Linuxissa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.