True Type disponiveis na internet.A SDL nao suporta fontes de maneira nativa. Precisamos recorrer a outa de suas extensoes o SDL TTF (TTF e abreviatura de True Type Font). O processo de integracao ja e o meso que fizemos com o SDL_Image, baixe as dlls no site do projeto, descompacte-os no diretorio.\bind e proto, podemos inicializar a biblioteca chamando a funcao TTF_Ini.rocedure TGame.Initialize;var flags, result: integer;begin if ( SDL_Init( SDL_INIT_VIDEO or SDL_INIT_TIMER or SDL_INIT_JOYSTICK ) <> 0 )then raise SDLException.Create(SDL_GetError); fWindow := SDL_CreateWindow( PAnsiChar( WINDOW_TITLE ), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if fWindow = nil then raise SDLException.Create(SDL_GetError); fWindowSurface := SDL_GetWindowSurface( fWindow ); if fWindowSurface = nil then raise SDLException.Create(SDL_GetError); fRenderer := SDL_CreateRenderer(fWindow, -1, SDL_RENDERER_ACCELERATED ); if fRenderer = nil then raise SDLException.Create(SDL_GetError); flags := IMG_INIT_PNG; result := IMG_Init( flags ); if ( ( result and flags ) <> flags ) then raise SDLImageException.Create( IMG_GetError ); result := TTF_Init; if ( result <> 0 ) then raise SDLTTFException( TTF_GetError ); LoadTextures; CreateFonts; CreateGameObjects; fGameText := TGameTextManager.Create( fRenderer );end;(...)procedure TGame.CreateFonts;const FONTS_DIR = '.\assets\fonts\';begin fGameFonts := TGameFonts.Create( fRenderer ); fGameFonts.LoadFonts( FONTS_DIR );end;Note a presenca da rotina CreateFonts e do tipo SDLTTFException na nova versao de TGame.Initialize. Tambem ha uma nova classe: TGameFonts que vamos criar para encapsular a logica de criacao das fontes.Alem de uma classe para gerenciar as fontes, vamos precisar de mais uma para encapsular a logica de desenho dos textos. Busque no codigo do projeto de exemplo pela unit sdlGameText e voce encontrara a implementacao de todas estas classes.Nao vamos explicar os detalhes da implementacao aqui para nao ficar muito massante, ja que o codigo e muito parecido com o que desenvolvemos para carregar as imagens dos sprites. O que voce precisa saber e que ele vai buscar os arquivos de fontes no diretorio '.\assets\fonts' entao, caso nao ainda nao os tenha, baixe o pacote com os assets atualizados e utilize as fontes ttf que estao disponiveis.HUDA interface do usuario e muito simples. Consiste, basicamente de uma barra no canto superior exibindo algumas informacoes pertinentes como a pontuacao do jogo e uma mensagem sobre o status do joystick. Nesta versao ha um contador de tiros que iremos substituir mais a frente por um contador de vidas (o jogador nao pode morrer nesta versao, entao ainda nao vamos nos ater a contar suas vidas).Vamos atualizar TGame.Render para incluir os elementos do HUD.(* render alterado para desenhar o GUI, ou HUD *)procedure TGame.Render;begin SDL_SetRenderDrawColor( fRenderer, 0, 0, 0, SDL_ALPHA_OPAQUE ); SDL_RenderClear( fRenderer ); DrawGameObjects; DrawDebugInfo; DrawGUI; SDL_RenderPresent( fRenderer ); fFrameCounter.Increment;end;(* rotina atualizada para exibir um texto, alem do led, indicando o status do joystick *)procedure TGame.DrawDebugInfo;var source, dest : TSDL_Rect;begin DrawDebugGrid; //desenha o led do sensor do controle dest.x := 10; dest.y := DEBUG_CELL_SIZE div 2; dest.w := 16; dest.h := 16; source.y := 0; source.w := 16; source.h := 16; if SDL_NumJoysticks > 0 then begin source.x := 0; //desenha o texto utilizando a fonte "DebugNormal", veja sdlGameText para mais detalhes fGameText.Draw('GAME CONTROLLER FOUND', 32, 19, fGameFonts.DebugNormal); end else begin source.x := 16; //desenha o texto utilizando a fonte "DebugError", veja sdlGameText