我目前正在尝试编写一个小游戏,其中涉及在迷宫中移动一个点。我没有用矩形构建迷宫,而是决定简单地创建迷宫的 PNG 图像并将其作为表面加载,我还让圆点在屏幕上移动。
现在,我一直在努力确保点(更像是一个小盒子)保持某种颜色并防止它移入墙壁。我正在尝试读取运动前的像素,看看它是黑色(墙壁)还是白色(空白)。我注意到函数 SDL_RenderReadPixels
,但是我似乎无法让它工作:
int w, h, access;
void* pixels;
Uint32 format;
const char* s;
SDL_QueryTexture(map->texture, &format, &access, &w, &h);
// Access = 0; width = 900; height = 720
s = SDL_GetPixelFormatName(format);
// Format: ARGB8888
SDL_Log("%s", s);
// Now I got pitch as: 900 * 32 = 28800
w = SDL_RenderReadPixels(map->renderer, NULL, 0, pixels, 28800);
我一直遇到段错误。现在,我不完全确定这是否是实现我想要做的事情的最简单方法。我似乎也无法在 SDL2 库中找到更简单的函数来完成此任务,而且我还没有找到解决方案。
- 这会导致段错误吗?
- 在 SDL2 中是否有更简单、更有效的方法来实现这一目标?
我想要一些关于我的方法的反馈。我还是个初学者。代码在 C 中。
谢谢,
最佳答案
SDL_RenderReadPixels
将结果保存到未初始化的第四个参数(像素
)。 SDL 然后将像素写入“某处”,幸运的是这会导致段错误。您必须为结果像素提供空间(静态缓冲区、堆栈缓冲区、malloc 等等)。
另请注意,此操作非常慢。
关于c - SDL2 - 读取像素以进行碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47935420/