【发布时间】:2020-07-24 10:15:16
【问题描述】:
我的 C++/SDL2 程序使用 Sprites 类和指向 SDL_Textures 的指针的 std::map 和用于加载和渲染图像的成员函数,但是当程序运行时,加载的图像都没有出现在窗口。
我发现 Sprites 实例被赋予了指向渲染器的正确指针,IMG_LoadTexture 没有返回 0。渲染器也可以正常工作,因为像 SDL_RenderDrawLine 这样的图元绘制得很好。
有趣的是,当我想通过打印源矩形的宽度和高度来检查SDL_QueryTexture 是否给出了正确的尺寸时,程序正确地渲染了图像。打印的尺寸也正确,并且尝试打印 x 和 y 也修复了它。
为什么会这样?
这是 Sprites 类中两个重要的成员函数。
void Sprites::load(std::string id, std::string filename, int length) {
SDL_Texture* tex = IMG_LoadTexture(renderer, filename.c_str());
if (tex == 0) {
printf("Texture %s could not be loaded\n", filename.c_str());
}
sprmap[id] = tex;
lengthmap[id] = length;
printf("%s should be loaded now\n", id.c_str());
}
void Sprites::render(std::string id, float x, float y, int frame) {
SDL_Rect src;
SDL_Rect dest;
SDL_QueryTexture(sprmap[id], NULL, NULL, &src.w, &src.h);
src.w /= lengthmap[id];
printf("src x: %s, src y %s\n", std::to_string(src.x).c_str(), std::to_string(src.y).c_str());
//Images do not render when above line is omitted
src.x = frame*src.w;
dest.x = x;
dest.y = y;
dest.w = src.w;
dest.h = src.h;
SDL_RenderCopy(renderer, sprmap[id], &src, &dest);
}
【问题讨论】: