SDL2 - 读取像素以进行碰撞检测
SDL2 - Reading pixels for collision detection
我目前正在尝试编写一个小游戏,其中涉及在迷宫中移动一个点。我决定不使用矩形构建迷宫,而是简单地创建迷宫的 PNG 图像并将其作为表面加载,并且我还让圆点在屏幕上移动。
现在,我一直在努力确保点(更像是一个小盒子)保持某种颜色并防止它移入墙壁。我正在尝试读取移动前的像素,看看它是黑色(一堵墙)还是白色(空 space)。我注意到函数 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
将结果保存到未初始化的第四个参数 (pixels
)。 SDL 然后写入像素 "somewhere",这幸运地导致了分段错误。您必须为生成的像素(静态缓冲区、堆栈缓冲区、malloc 等)提供 space。
还要注意这个操作很慢。
我目前正在尝试编写一个小游戏,其中涉及在迷宫中移动一个点。我决定不使用矩形构建迷宫,而是简单地创建迷宫的 PNG 图像并将其作为表面加载,并且我还让圆点在屏幕上移动。
现在,我一直在努力确保点(更像是一个小盒子)保持某种颜色并防止它移入墙壁。我正在尝试读取移动前的像素,看看它是黑色(一堵墙)还是白色(空 space)。我注意到函数 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
将结果保存到未初始化的第四个参数 (pixels
)。 SDL 然后写入像素 "somewhere",这幸运地导致了分段错误。您必须为生成的像素(静态缓冲区、堆栈缓冲区、malloc 等)提供 space。
还要注意这个操作很慢。