Tutorial SDL - Fontes True Type
Nesse tutorial, vamos usar a SDL_ttf, que é uma extensão para usar as Fontes True Type para usarmos dentro de superfícies.
Como é uma biblioteca externa, precisa ser instalada, é o mesmo de instalar a SDL_image, mas vamos passo a passo:
Primeiro baixe a SDL_ttf aqui.
Baixe da seguinte opção:
Descompacte o arquivo ZIP, nele terão duas pastas, Include e Lib. Agora é fazer como foi feito na instalação da SDL.
- Copiar todos os arquivos .H (header) de dentro da pasta Include para a pasta SDL (dentro de Include) do Dev C++, que deve ser C:\Dev-Cpp\include\SDL.
- Copiar o arquivo .LIB de dentro da pasta Lib para a pasta Lib do Dev C++, que deve ser C:\Dev-Cpp\lib.
- Copiar todos os arquivos .DLL que estão dentro da pasta Lib, para a pasta Bin do Dev C++, que deve ser C:\Dev-Cpp\bin
- Agora copie também esses arquivos .DLL para a pasta C:\WINDOWS\SYSTEM32. Assim as aplicações que usarem a SDL_Image poderão ser executadas se não estiverem na mesma pasta do arquivo executável.
Abra o Dev C++ e vá até o menu projeto->opções de projeto. Na aba parâmetros, coloque -lSDL_ttf na parte que diz linker depois de "-lmingw32 -lSDLmain -lSDL".
Agora vamos ao nosso código:
-
//O Cabeçalho
-
#include "SDL/SDL.h"
-
#include "SDL/SDL_image.h"
-
#include "SDL/SDL_ttf.h"
-
#include <string>
-
-
//Atributos da Tela
-
const int SCREEN_WIDTH = 640;
-
const int SCREEN_HEIGHT = 480;
-
const int SCREEN_BPP = 32;
-
-
//As superfícies
-
SDL_Surface *imagem = NULL;
-
SDL_Surface *tela = NULL;
-
SDL_Surface *mensagem = NULL;
-
-
//A estrutura que usaremos para capturarmos os eventos
-
SDL_Event evento;
-
-
//A fonte que será usada
-
TTF_Font *fonte = NULL;
-
-
//A cor da fonte
-
SDL_Color cor = { 255, 255, 255 };
Aqui temos as nossas variáveis, mas temos duas novas, a fonte do tipo TTF_Font e cor do tipo SDL_Color. Serão usadas para carregar as fontes. A próxima alteração está na função inicia:
-
bool inicia()
-
{
-
//Inicia os subsistemas da SDL
-
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
-
{
-
return false;
-
}
-
-
//Setando a tela
-
tela = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
-
-
//Verifica se existe algum erro na tela
-
if( tela == NULL )
-
{
-
return false;
-
}
-
-
//Iniciando SDL_ttf
-
if( TTF_Init() == -1 )
-
{
-
return false;
-
}
-
-
//Setando o caption da janela
-
SDL_WM_SetCaption( "Tutorial SDL - Fontes True Type", NULL );
-
-
//Se tudo deu certo
-
return true;
-
}
Ao iniciarmos todas as funções da SDL, também iniciamos a SDL_ttf com TTF_Init().
-
bool carrega_arquivos(std::string arquivo)
-
{
-
//Carrega a imagem
-
imagem = carregaImagem( arquivo.c_str() );
-
-
//Verifica se existe algum erro no carregamento da imagem
-
if( imagem == NULL )
-
{
-
return false;
-
}
-
-
//Carrega a fonte
-
fonte = TTF_OpenFont( "lazy.ttf", 28 );
-
-
//Se existir algum problema com a fonte
-
if( fonte == NULL )
-
{
-
return false;
-
}
-
-
//se tudo der certo
-
return true;
-
}
A função carrega_arquivo() também carrega um arquivo .tff (um arquivo de fonte) dentro da nossa variável fonte.
-
void limpa()
-
{
-
//Libera a imagem
-
SDL_FreeSurface( imagem );
-
-
}
-
-
void sair()
-
{
-
//Fecha a SDL
-
SDL_Quit();
-
}
A função limpa() e sair() ganharam as funções para fechar os arquivos ttf. Agora vamos ao main():
-
int main( int argc, char* args[] )
-
{
-
-
//Variável necessária para saber se o usuário fechou a janela
-
bool quit = false;
-
-
//Inicia
-
if( inicia() == false )
-
{
-
return 1;
-
}
-
-
//Carrega os arquivos
-
if( carrega_arquivos("fundo.jpg") == false )
-
{
-
return 1;
-
}
-
-
//Carrega o texto na mensagem
-
mensagem = TTF_RenderText_Solid( fonte, "CubaGames - Tutorial SDL", cor );
-
-
//Aplicando as superfícies na tela
-
aplicaSuperficie( 0, 0, imagem, tela );
-
aplicaSuperficie( 100, 200, mensagem, tela );
-
-
//Atualiza a tela
-
if( SDL_Flip( tela ) == -1 )
-
{
-
return 1;
-
}
-
-
//Enquanto o usuário não fechar o programa
-
while( quit == false )
-
{
-
//Quando ocorrer um evento
-
while( SDL_PollEvent( &evento ) )
-
{
-
//se o usuário apertou o X da janela
-
if( evento.type == SDL_QUIT )
-
{
-
//Fecha o programa
-
quit = true;
-
}
-
}
-
}
-
//Libera a superficie e fecha a SDL
-
limpa();
-
sair();
-
return 0;
-
}
Aqui apenas verificamos se o usuário fechou a aplicação no loop principal do programa.
Para mostrar esse tutorial, foi criado 1 arquivos jpg e tem um arquivo ttf para o tipo de fonte.
Para baixar o fonte clique aqui.
Alguma Dúvida? romulo@cubagames.com.br ou comentário no site!

