2014-05-16 2 views
0

저는 현재 화면에 텍스트를 표시하려고 생각하고 있습니다. 그러나 문제는 화면에서 아무 것도 얻을 수없는 것입니다. 이 문제에 대한 많은 자습서를 살펴 봤는데 문제는 화면에 실제로 "blitting"된다고 생각합니다. 대부분의 자습서에서 나는 그들이 "BlitSurface"방법을 사용했음을 보았습니다. SDL2.0.3을 사용하고 있기 때문에 실제로 작동한다고 생각하지 않습니다. 나는 화면에서 이미지를 가져 오는 베어 본 클래스를 시도하지만 공백으로 남습니다. 조언이나 해결책이 있습니까?SDL_TTF를 사용하여 화면에 텍스트를 가져올 수 없습니까?

Game.ccp

#include "Game.h" 
using namespace std; 

bool Game::onInit(char*title, int width, int height, int fullscreen) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    gWindow = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, fullscreen); 
    if (gWindow == NULL) 
    { 
     cout << "Failed to create window \n"; 
    } 
    else 
     cout << "Created window! \n"; 
    gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED); 
    if (gRenderer == NULL) 
    { 
     cout << "Failed to create renderer! \n"; 
    } 
    else 
    { 
     cout << "Created renderer! \n"; 
     gRunning = true; 
    } 
    TTF_Init(); 

    //Calling the Text.h function init. 
    text.init(0, 0, 24, "bin/font/Pixel.ttf", "HELLO", gRenderer, { 255, 255, 255 }); 



    return gRunning; 

} 


void Game::onHandleEvents() 
{ 
    SDL_Event Event; 
    if (SDL_PollEvent(&Event) != 0) 
    { 
     if (Event.type == SDL_QUIT) 
     { 
      gRunning = false; 
     } 

     switch (Event.key.keysym.sym) 
     { 
     case SDLK_ESCAPE: 
     { 
      gRunning = false; 
     } 

     } 
    } 
} 


void Game::onUpdate() 
{ 

} 

void Game::onRender() 
{ 
    SDL_RenderClear(gRenderer); 

    //Calling Text.h draw function. 
    text.draw(gRenderer); 
    SDL_RenderPresent(gRenderer); 
} 

void Game::onClean() 
{ 
    SDL_DestroyRenderer(gRenderer); 
    SDL_DestroyWindow(gWindow); 

    gWindow = NULL; 
    gRenderer = NULL; 

    TTF_Quit(); 
    SDL_Quit(); 
} 

Text.h

#pragma once 
#include <SDL.h> 
#include <SDL_ttf.h> 
#include <string> 

class Text 
{ 
private: 
    TTF_Font*font; 
    SDL_Surface*surfaceMessage = NULL; 
    SDL_Texture*Message; 
    std::string text; 
    int x, y; 
    SDL_Color color; 
    SDL_Rect src; 
    SDL_Rect dst; 

public: 
    bool init(int X, int Y, int fontsize, char FontFile[], char message[],SDL_Renderer*renderer ,SDL_Color c) 
    { 
     x = X; 
     y = Y; 
     text = message; 
     font = TTF_OpenFont(FontFile, fontsize); 
     if (font != NULL) 
     { 
      surfaceMessage = TTF_RenderText_Solid(font, message, color); 

      Message = SDL_CreateTextureFromSurface(renderer, surfaceMessage); 
     } 


     return Message; 
    } 

    void draw(SDL_Renderer*renderer) 
    { 
     src = { 0, 0, surfaceMessage->w, surfaceMessage->h }; 
     dst = { 0, 0, surfaceMessage->w, surfaceMessage->h }; 

     SDL_RenderCopy(renderer, Message, &src, &dst); 
    } 

}; 
+1

SDL에서 글꼴을 찾을 수 있습니까? Game.cpp에서 함수를 호출하는 곳을 알려주십시오. – olevegard

+0

예 SDL이 글꼴을 찾을 수 있습니다. 나는 함수를 호출하는 곳에 주석을 추가했다. – NeoSanguine

+0

init 함수에서 색상 멤버를 SDL_Color c 매개 변수와 동일하게 설정하지 않은 것 같습니다. 또한, 출력 스트림에 TTF_GetError()를 보내서 whats가 잘못되었는지 알아 내려고면, surfaceMessage가 null인지 테스트 해보십시오. – eziegl

답변

0

이 문제는 내가 내 SYSTEM32에 SDL_ttf.dll을 넣어 잊고 있었던 것이 었습니다. 이제 메서드가 잘 작동합니다. 그것은 여전히 ​​game.ccp에서 메서드를 호출하는 데 실패합니다. :/

관련 문제