C ++ SDL2文本不呈现

时间:2018-07-14 13:56:42

标签: c++ sdl-2 sdl-ttf

我有一个程序,其中包含一个我无法弄清楚如何使其工作的类。当我使代码运行时没有“错误”时,它不会在屏幕上显示任何文本。

我在主循环中有一个来自此类的对象,在其中进行渲染。从类中调用render()void函数。

我弄清楚了代码崩溃的地方。但是我不知道为什么会这样。

感谢您的帮助。

文本对象的

类:( text.cpp

#include "text.h"

void Text::init(const char* text, int x, int y, int r, int g, int b, int size, SDL_Renderer *renderer){
    font = TTF_OpenFont("arial.ttf", size);
    color.r = r;
    color.g = g;
    color.b = b;
    color.a = 255;

    surface = TTF_RenderText_Solid(font, text, color);
    texture = SDL_CreateTextureFromSurface(renderer, surface);

    rect.x = x;
    rect.y = y;
    rect.w = 300; //surface->w; //Here is one error, if i compile the commented part, there is no problem untill I run it. Then it crashes.
    rect.h = 300; //surface->h; //The same happens with this
}

Text::~Text(){
    SDL_FreeSurface(surface);
    SDL_DestroyTexture(texture);
}

void Text::render(SDL_Renderer *renderer){
    SDL_RenderCopy(renderer, texture, NULL, &rect); // But even with that, this shows no text on screen
}

text.h 文件:

#ifndef TEXT_H
#define TEXT_H

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>

class Text{
    private:
    SDL_Surface* surface;
    SDL_Texture* texture;
    TTF_Font* font;
    SDL_Color color;
    SDL_Rect rect;

    public:
    Text() {};
    ~Text();

    void init(const char* text, int x, int y, int r, int g, int b, int size, SDL_Renderer *renderer);
    void render(SDL_Renderer *renderer);

};

#endif //TEXT_H

1 个答案:

答案 0 :(得分:1)

首先:对SDL函数(如assert())的返回值添加内部测试(如TTF_OpenFont)(如果失败,则返回NULL)。

其次::使用SDL_GetError()获取失败原因的详细信息。

第三步::在编译器上使用-g选项,然后使用gdb执行程序,它将提供有关程序崩溃位置的更多详细信息。

假设:

  1. 您的一个SDL函数调用失败。
  2. 纹理是渲染器特定的,这意味着用于创建纹理的渲染器是唯一可以渲染该纹理的渲染器。
  3. 要更新的渲染器,以显示对SDL_RenderPresent(renderer)的修改
  4. 涉及RGBA时,有几种打印方法,请确保纹理不是透明的,并且渲染器处于正确的模式。