SDL_ttf no text on the screen, but no errors?

Started by
2 comments, last by Simian Man 16 years, 6 months ago
Hi, I've been reading the tutorial from lazyfoo.net lesson 7 working with SDL_TTF and I decided to download just the font, and code the rest in my game, and I get a 100% compiled completely source, but when I go and run the application I see no text. When I exit out the app I get no debug warnings, errors, link errors, etc... It's coded correctly why do I see now text? Is it because I don't have a background image? Even though I have a black background, and white text? And if this is the case how do you make it not the case. Also is there an easy way to change the background of your screen using just SDL? I'm quite a curious student right now. Thanks,
Advertisement
How do you know it's coded correctly? Post some code so we can see if it is.

About background image, you simply blit something on the display surface before blitting anything else and that will become your background image. The frame buffer doesn't get cleared automatically, so you must blit that before every redraw.
Alright here is my code

/**	-----------------------Documentation----------------'Name:    Nano Ninja's									        ''Author:  c.s. Finch									            ''Date:    [10-11-07 - 10-11-08]						        ''----------------------------------------------------------**/#include <SDL.h>#include <SDL_image.h>#include <SDL_ttf.h>#include <string>using namespace std;//The attributes of the screenconst int width = 640;const int height = 480;const int bpp = 32;//Surfaces that will be usedSDL_Surface *screen = NULL;SDL_Surface *image  = NULL;SDL_Surface *message = NULL;SDL_Surface *select_character = NULL;//The portions of the sprite map to be blittedSDL_Rect clip [ 6 ];//The even structure that will be used.SDL_Event  sdl_event;//The font that's going to be usedTTF_Font * font = NULL;//the color of the fontSDL_Color textColor = {255, 0, 0};//Get the key statesUint8 *keystates = SDL_GetKeyState(NULL);//load the imageSDL_Surface *load_image(string filename){	//image that is loaded	SDL_Surface *loadedImage = NULL;		//the optimized image that will be used	SDL_Surface *optimizedImage = NULL;		//Load the image using SDL_image	loadedImage = IMG_Load( filename.c_str() );	//if nothing went wrong with loading the image	if(loadedImage!= NULL)	{		//create an optimized image		optimizedImage = SDL_DisplayFormat( loadedImage );		//free the old image		SDL_FreeSurface( loadedImage );	}	//load the image onto the screen	return optimizedImage;}//draw a sprite from a sprite sheetvoid draw_slitsprite(int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL ){	//Hold the offsets	SDL_Rect offset;	//Get the offsets	offset.x = x;	offset.y = y;	//Blig the sprite from the sprite sheet	SDL_BlitSurface(source, clip, destination, &offset);}//draw a single sprite on the screenvoid draw_sprite(SDL_Surface *destination, SDL_Surface *source, int x, int y){	//Make a temporary rectangle to hold the offsets	SDL_Rect offset;		//Give the offsets to the rectangle	offset.x = x;	offset.y  = y;	//Blit the surface	SDL_BlitSurface(source, NULL, destination, &offset);}bool init(){	//Initialize all SDL subsystems	if( SDL_Init(SDL_INIT_EVERYTHING ) == -1) return false;	//set up the screen	screen = SDL_SetVideoMode(width, height, bpp, SDL_SWSURFACE);	//if there was an error setting up the screen	if(screen == NULL) return false;		//Initialize the SDL ttf	if(TTF_Init() == -1) return false;	//Set the window caption	SDL_WM_SetCaption("Nano Ninja's Beta RC1  Developed by:  C.S.  Finch", NULL);	//if everything initialized fine	return true;}bool load_files(){	//Load the images	image = load_image("images/logo.png");		//load the fonts	font = TTF_OpenFont("fonts/lazy.ttf", 28);	//if there was an error loading the images	if(image == NULL) return false;	//if there was an error loading the fonts	if( font == NULL) return false;	//if everything was loaded successfully	return true;}//Clean up the SDL Mess, and Exit out of the program!void clean_up(){	bool quit = false;	while(quit == false)	{		while(SDL_PollEvent(&sdl_event))		{			if (keystates[SDLK_ESCAPE]) quit = true;			else if(sdl_event.type == SDL_QUIT) quit = true;		}	}	//Free the surfaces	SDL_FreeSurface( image );	SDL_FreeSurface( message );	//Close the fonts that was used	TTF_CloseFont( font );	//Quit SDL & SDL_TTF	TTF_Quit();	SDL_Quit();}//Draw the splash screen of our game!void drawSplash(){	draw_sprite(screen, image, width/2-150, height/2 - 100);}//Character Selecting Screenvoid SelectCharacters(){}//The main function we need to call.int main( int argc, char* args[] ){	//Initialize SDL	if(init() == false) return 1;	//load the files	if(load_files() == false) return 1;		//Render the text	message = TTF_RenderText_Solid( font, "The quick brown fox jumps over the lazy hound", textColor );	if(message == NULL) return 1;	drawSplash();	//update the screen	if(SDL_Flip(screen) == -1) return 1;	//Free the surface and quit SDL	clean_up();	return 0;}
You never draw the text to the screen! The line

message = TTF_RenderText_Solid( font, "The quick brown fox jumps over the lazy hound", textColor );

Does not actually draw anything. It returns a newly created surface that has your text on it. You need draw it to the screen at an appropriate location with SDL_BlitSurface.

This topic is closed to new replies.

Advertisement