c++ - SDL2_image 渲染 - 只有在打印源 SDL_Rect 的属性时才能正确渲染图像
问题描述
我的 C++/SDL2 程序使用Sprites
带有指向 s 的指针的 std::mapSDL_Texture
和用于加载和渲染图像的成员函数的类,但是当程序运行时,窗口中没有显示任何加载的图像。
我发现 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);
}
解决方案
推荐阅读
- c++ - Openh264 编码器增加 IDR 或 I 帧的数量
- python - numpy.memmap 在有足够的可用内存时返回不足的内存
- angular - 孩子及其孩子没有被重新渲染
- python - 只允许从 python3 上下文执行 requirements.txt
- c++ - VTK:尝试使用 vtkrubberbandpick 和 vtkHardwareSelector 选择区域中的可见单元格
- c++ - c++/CLI 代码中的内存泄漏
- c++ - 取消引用时销毁对象
- r - 使用stargazer输出从R markdown编织pdf doc
- postgresql - 我找不到我的 pid 文件来删除它,以便我可以再次启动 postgresql?
- spring-boot - 如何从命令行执行 Cucumber Spring Boot Packaged Jar?