Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: SDL: TTF ja tekstinrivinvaihto

erakko- [06.06.2009 17:35:13]

#

Tässä tuli vain mietittyä että mitenhän onnistuu rivinvaihto tekstille, joka tehdään SDL_ttf-kirjastoa käyttäen. Pätkä koodia johon tämä olisi tarkoitus ujuttaa:

char teksti[100];
TTF_Font *fontti = TTF_OpenFont("Tahoma.ttf", 12);
SDL_Surface *pinta = NULL;
sprintf(teksti, "blah blah blah [rivinvaihto] blah blah");
//metodi jolla teksti tehdään pintaan (TTF_Font *fontti, SDL_Surface **pinta, SDL_Color vari, string teksti)
Text(fontti, &pinta, vari, teksti);
//piirtometodi (SDL_Surface *kuva, SDL_Surface *naytto, int x, int y)
Draw(pinta, naytto, 385, 128);
//vapautukset

Syy miksi haluan rivinvaihdon, on se että se on helpompaa kuin monen eri pinnan luomisen sijaan, joihin jokaiseen laittaa sitten yhden rivin tekstiä ja nämä piirtelee sitten erikseen (joka kohdistamisen takia voi olla turhauttavaa). Tosin jos muuta vaihtoehtoa ei ole niin sitten ei voi mitään. Siis korkeussuunnassa pidemässä laatikossa pitkä rivi tekstiä näyttää vähän oudolta, joten se olisi rivitettävä, mielellään helpoimmalla tavalla. Tiedän että \n vaihtaa riviä, mutta se toimii konsolilla, ei nähtävästi tässä.

Grez [06.06.2009 17:50:16]

#

Haet SLD_TTF:n lähdekoodin, muokkaat funktiota TTF_RenderUNICODE_xxx (jossa xxx on se mitä käytät) niin, että se osaa huomioida rivinvaihtomerkin (esim. "\n"). Sitten käännät sen uudelleen ja laitat vaan sen "\n" tekstiisi.

os [06.06.2009 19:06:34]

#

Tai ehkä kuitenkin olisi järkevämpää vain muuttaa tuota omaa Text-metodia siten, että se huomioi rivivaihdot.

Grez [06.06.2009 19:23:25]

#

No siellä Text metodissa oletettavasti kutsutaan tuota TTF_RenderText_xxx tai TTF_RenderUNICODE_xxx funktiota, joka puolestaan ei nykyisellään tue rivinvaihtoa (tarkistin lähdekoodista). Eli ainoa keino kiertää rajoite olisi pistää Text kutsumaan sitä erikseen jokaiselle riville, jolloin kysyjän toivomus monen pinnan välttämisestä ei toteutuisi.

Vastaus

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

Tietoa sivustosta