2014-05-16 2 views
0

В настоящее время я пытаюсь найти текст на экране. Проблема, однако, в том, что я не могу ничего на экране. Я просмотрел много учебников по этому вопросу, и я считаю, что моя проблема заключается в фактическом «бьют» на экране. В большинстве руководств я посмотрел, что они использовали метод «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. Также попробуйте проверить, имеет ли surfaceMessage значение null, если оно отправляет TTF_GetError() в выходной поток, чтобы выяснить, что происходит неправильно. – eziegl

ответ

0

Проблема заключалась в том, что я забыл поставить SDL_ttf.dll в моей System32. Теперь метод работает нормально. Хотя он по-прежнему не может вызвать метод в game.ccp. :/

Смежные вопросы