Moro.
Testailen tehdä tuommoista kirjoitusfunktiota SDL:llä ja muuten homma pelittää, mutta en saa fonttikuvan taustaväriä(tässä sininen) läpinäkyväksi.
Teen näin:
SDL_Surface *fontti = IMG_Load("kuvat/fontti.png"); SDL_SetColorKey(fontti, SDL_SRCCOLORKEY, SDL_MapRGB(fontti->format, 0, 0, 255) );
Kysymys kuuluukin: pitääkö tuo tehdä png-kuvilla jotenkin toisella tavalla? Ilman SDL_image -kirjastoa olen saanut kyllä toimimaan bmp:illä, mutta nyt en ymmärrä. fontti.png:stä olen sataan kertaan tarkistanut, että taustaväri varmasti on tuo täysin sininen.
Laitetaan nyt vielä boonuksena se kirjoitusfunktio jos jotakin kiinnostaa:
void piirraTeksti(SDL_Surface *fontti, SDL_Surface *naytto, string teksti, int x, const int& y) { int leveys = (fontti->w) / MERKKEJA_FONTISSA; int korkeus = fontti->h; // Käydään teksti läpi for ( int i = 0 ; i < teksti.size() ; i++ ) { // PiirraKuva() löytyy SDL-oppaasta jos et muuten ymmärrä PiirraKuva(fontti, naytto, haeIndeksi(teksti.at(i))*leveys, 0, leveys-1, korkeus, x, y); x += leveys; } } // Hakee kirjaimen indeksin fonttitiedostolle sopivaksi // eli vähentää tai lisää merkin ASCII-arvoon jotakin int haeIndeksi(char c) { if ( c >= 'a' && c <= 'z' ) { return static_cast< int >( c ) - 86; } else if ( c >= 'A' && c <= 'Z' ) { return static_cast< int >( c ) - 54; } else if ( c >= '0' && c <= '9' ) { return static_cast< int >( c ) - 47; } // Jos on joku muu merkki, tehdään välilyönti return 0; }
Tässä tapauksessa MERKKEJA_FONTISSA = 37 (tyhjä, 0-9, A-Z) ja isot ja pienet kirjaimet näytetään samanlaisina. Jos merkkejä tekee lisää, pitää haeIndeksi()-funktiota muokata.
Edit: Funktiota kutsutaan vaikkapa näin:
piirraTeksti(fontti, naytto, "kusti polkee", 10, 23);
Niin ja fonttitiedostossa merkit ovat samanlevyisiä (yllätys) ja niiden välissä on yhden pikselin paksuinen erotinviiva (ihan vaan piirtämisen helpottamiseksi).
Tein semmoisen lisäyksen, että tekstiin voi laittaa rivinvaihdon:
void piirraTeksti(SDL_Surface *fontti, SDL_Surface *naytto, const string& teksti, int x, int y) { int leveys = (fontti->w) / MERKKEJA_FONTISSA; int korkeus = fontti->h; int ekax = x; // Käydään teksti läpi for ( int i = 0 ; i < teksti.size() ; i++ ) { if ( teksti.at(i) == '\n' ) { y += korkeus; x = ekax; continue; } // PiirraKuva() löytyy SDL-oppaasta jos et muuten ymmärrä PiirraKuva(fontti, naytto, haeIndeksi(teksti.at(i))*leveys, 0, leveys-1, korkeus, x, y); x += leveys; } } Esimerkkikutsu: piirraTeksti(fontti, naytto, "kusti polkee\nposti kulkee", 0, 0);
Ootko kokeillu SDL_SetAlphaa? En tunne funktiota pahemmin, mutta nimi ja tämä vaikuttivat ihan asianmukaisilta. :o
TGunner kirjoitti:
Ootko kokeillu SDL_SetAlphaa?
Nyt kokeilin ja sehän hoiti homman. Kiitos vinkistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.