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:

asd

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:

C++:
  1. //O Cabeçalho
  2. #include "SDL/SDL.h"
  3. #include "SDL/SDL_image.h"
  4. #include "SDL/SDL_ttf.h"
  5. #include <string>
  6.  
  7. //Atributos da Tela
  8. const int SCREEN_WIDTH = 640;
  9. const int SCREEN_HEIGHT = 480;
  10. const int SCREEN_BPP = 32;
  11.  
  12. //As superfícies
  13. SDL_Surface *imagem = NULL;
  14. SDL_Surface *tela = NULL;
  15. SDL_Surface *mensagem = NULL;
  16.  
  17. //A estrutura que usaremos para capturarmos os eventos
  18. SDL_Event evento;
  19.  
  20. //A fonte que será usada
  21. TTF_Font *fonte = NULL;
  22.  
  23. //A cor da fonte
  24. 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:

C++:
  1. bool inicia()
  2. {
  3. //Inicia os subsistemas da SDL
  4. if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
  5. {
  6. return false;
  7. }
  8.  
  9. //Setando a tela
  10. tela = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
  11.  
  12. //Verifica se existe algum erro na tela
  13. if( tela == NULL )
  14. {
  15. return false;
  16. }
  17.  
  18. //Iniciando SDL_ttf
  19. if( TTF_Init() == -1 )
  20. {
  21. return false;
  22. }
  23.  
  24. //Setando o caption da janela
  25. SDL_WM_SetCaption( "Tutorial SDL - Fontes True Type", NULL );
  26.  
  27. //Se tudo deu certo
  28. return true;
  29. }

Ao iniciarmos todas as funções da SDL, também iniciamos a SDL_ttf com TTF_Init().

C++:
  1. bool carrega_arquivos(std::string arquivo)
  2. {
  3. //Carrega a imagem
  4. imagem = carregaImagem( arquivo.c_str() );
  5.  
  6. //Verifica se existe algum erro no carregamento da imagem
  7. if( imagem == NULL )
  8. {
  9. return false;
  10. }
  11.  
  12. //Carrega a fonte
  13. fonte = TTF_OpenFont( "lazy.ttf", 28 );
  14.  
  15. //Se existir algum problema com a fonte
  16. if( fonte == NULL )
  17. {
  18. return false;
  19. }
  20.  
  21. //se tudo der certo
  22. return true;
  23. }

A função carrega_arquivo() também carrega um arquivo .tff (um arquivo de fonte) dentro da nossa variável fonte.

C++:
  1. void limpa()
  2. {
  3. //Libera a imagem
  4. SDL_FreeSurface( imagem );
  5.  
  6. }
  7.  
  8. void sair()
  9. {
  10. //Fecha a SDL
  11. SDL_Quit();
  12. }

A função limpa() e sair() ganharam as funções para fechar os arquivos ttf. Agora vamos ao main():

C++:
  1. int main( int argc, char* args[] )
  2. {
  3.  
  4. //Variável necessária para saber se o usuário fechou a janela
  5. bool quit = false;
  6.  
  7. //Inicia
  8. if( inicia() == false )
  9. {
  10. return 1;
  11. }
  12.  
  13. //Carrega os arquivos
  14. if( carrega_arquivos("fundo.jpg") == false )
  15. {
  16. return 1;
  17. }
  18.  
  19. //Carrega o texto na mensagem
  20. mensagem = TTF_RenderText_Solid( fonte, "CubaGames - Tutorial SDL", cor );
  21.  
  22. //Aplicando as superfícies na tela
  23. aplicaSuperficie( 0, 0, imagem, tela );
  24. aplicaSuperficie( 100, 200, mensagem, tela );
  25.  
  26. //Atualiza a tela
  27. if( SDL_Flip( tela ) == -1 )
  28. {
  29. return 1;
  30. }
  31.  
  32. //Enquanto o usuário não fechar o programa
  33. while( quit == false )
  34. {
  35. //Quando ocorrer um evento
  36. while( SDL_PollEvent( &amp;evento ) )
  37. {
  38. //se o usuário apertou o X da janela
  39. if( evento.type == SDL_QUIT )
  40. {
  41. //Fecha o programa
  42. quit = true;
  43. }
  44. }
  45. }
  46. //Libera a superficie e fecha a SDL
  47. limpa();
  48. sair();
  49. return 0;
  50. }

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!