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 库中找到更简单的函数来完成此任务,而且我还没有找到解决方案。

  1. 这是导致段错误的原因吗?
  2. 在 SDL2 中有没有一种更简单、更有效的方法来实现这一点?

我想要一些关于我的方法的反馈。我还是个初学者。代码在C.

谢谢,

SDL_RenderReadPixels 将结果保存到未初始化的第四个参数 (pixels)。 SDL 然后写入像素 "somewhere",这幸运地导致了分段错误。您必须为生成的像素(静态缓冲区、堆栈缓冲区、malloc 等)提供 space。

还要注意这个操作很慢。