我目前正在尝试编写一个小游戏,其中包括在迷宫周围移动一个点。我没有用矩形构建迷宫,而是决定简单地创建迷宫的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库中找到更容易实现此功能的功能,而且我还没有找到解决方案。
我希望对我的方法有一些反馈。我还是个初学者。代码在C中。
谢谢,
SDL_RenderReadPixels
将结果保存到第四个参数(pixels
),这是未初始化的。然后SDL将像素写入“某处”,这很容易导致分段错误。您必须为结果像素提供空间(静态缓冲区,堆栈缓冲区,malloc,任何东西)。
另请注意,此操作非常慢。