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.