我有一个程序,其中包含一个我无法弄清楚如何使其工作的类。当我使代码运行时没有“错误”时,它不会在屏幕上显示任何文本。
我在主循环中有一个来自此类的对象,在其中进行渲染。从类中调用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
答案 0 :(得分:1)
首先:对SDL函数(如assert()
)的返回值添加内部测试(如TTF_OpenFont
)(如果失败,则返回NULL)。
其次::使用SDL_GetError()
获取失败原因的详细信息。
第三步::在编译器上使用-g
选项,然后使用gdb
执行程序,它将提供有关程序崩溃位置的更多详细信息。
假设:
SDL_RenderPresent(renderer)
的修改