Tein nyt sen uuden version tuosta fonttien latauksesta jonka lupasin. Tämä on eri versio kuin se C++ esimerkkikoodeihin postaamani, mielestäni tämä on paljon kätevämpi. Suurin ero on se, että tämä versio ei käytä luokkia tekstin tulostamiseen. Lisäksi tällä saa värit toimimaan (esimerkissä 11) Koodi sisältää myös kuva luokan, se ei ole kovin tarpeellinen, mutta jätin siihen kun sitäkin voi tarvita jossain.
Värit olisi voinut toteuttaa värjäämällä fonttikuva aina halutulla värillä, mikä olisi ollut moninkertaisesti parempi ratkaisu, mutta joku muu saa tehdä sen :D Ja tämä versio ei lisäksi tue .PNG kuvia, koska mulla ei oo lisäkirjastoja.
Code: Select all
#include <SDL/SDL.h>
#include <string>
using namespace std;
// Surface for screen,
// this can be something else,
// but in that case you have to
// mod it also in drawtext()
SDL_Surface *screen;
/*
IMAGE SECTION
*/
class Image
{
public:
// Loads image
void Load(char *target,int w=0,int h=0)
{
res = SDL_LoadBMP(target);
width = w;
height = h;
}
// Returns image as
// an SDL_Surface
SDL_Surface *GetResource()
{
return res;
}
// Draws image
void Draw(int x,int y)
{
SDL_Rect locate;
locate.x = x;
locate.y = y;
SDL_BlitSurface(res,NULL,screen,&locate);
}
// Draws image as animated
void DrawAnimated(int x,int y,int f)
{
SDL_Rect locate;
locate.x = x;
locate.y = y;
SDL_Rect size;
size.x = width*f;
size.y = 0;
size.w = width;
size.h = height;
SDL_BlitSurface(res,&size,screen,&locate);
}
// Deletes surface and
// the loaded image
void Free()
{
SDL_FreeSurface(res);
}
private:
SDL_Surface *res;
int width,height;
};
/*
TEXT SECTION
*/
int CharWidth;
int CharHeight;
Image FontImage;
// Inits all fonts
// w,h = char width and height
void InitFonts(int w=13,int h=16)
{
CharWidth = w;
CharHeight = h;
FontImage.Load("font.bmp");
}
/*
TEXT FUNCTION
*/
// Draws the text
// x,y = text coordinates
// text = string of the text
// whole = color of the text
void DrawText(int x,int y,const char *text,int whole=0)
{
int i = 0;
while(1)
{
if(text[i]=='\0') break;
SDL_Rect read;
read.x = int(text[i])*CharWidth;
read.y = whole*CharHeight;
read.w = CharWidth;
read.h = CharHeight;
SDL_Rect drawing;
drawing.x = x+(i*CharHeight);
drawing.y = y;
SDL_BlitSurface(FontImage.GetResource(),&read,screen,&drawing);
i++;
}
}
/*
EXAMPLE
*/
int main(int argc,char *argv[])
{
srand(time(NULL));
screen = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE|SDL_ANYFORMAT);
InitFonts();
// Main loop attrs
SDL_Event tapahtuma;
bool pois = 0;
while(!pois)
{
// Example of use
for(int i=0;i<11;i++) DrawText(50,50+(i*15),"Output",i);
SDL_PollEvent(&tapahtuma);
if (tapahtuma.type == SDL_QUIT) pois = true;
if (tapahtuma.type == SDL_KEYDOWN)
{
if ( tapahtuma.key.keysym.sym == SDLK_ESCAPE ) pois = true;
}
SDL_Flip(screen);
}
SDL_Quit();
return 1;
}
Taas varoittelen huonosta englannista, purkasta, virheiden käsittelemättä jättämisestä jne.
Lisäksi päivitin tuota CB koodia tukemaan värejä, joka tosiaan on turha, jos halutaan käyttää sitä parempaa värjäystoimintoa.