SDL2 - 读取碰撞检测像素

时间:2017-12-22 03:17:03

标签: c sdl-2

我目前正在尝试编写一个小游戏,其中包括在迷宫周围移动一个点。我决定简单地创建迷宫的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库中找到更容易实现此功能的功能,而且我还没有找到解决方案。

  1. 是否有原因导致seg故障?
  2. 我是否有更简单,更有效的方法在SDL2中实现这一目标?
  3. 我想就我的方法提供一些反馈。我还是个初学者。代码在C。

    谢谢,

1 个答案:

答案 0 :(得分:3)

SDL_RenderReadPixels将结果保存到第四个参数(pixels),这是未初始化的。然后SDL将像素写入“某处”,这很容易导致分段错误。您必须为结果像素提供空间(静态缓冲区,堆栈缓冲区,malloc,任何东西)。

另请注意,此操作非常慢。