c - SDL2 - 读取像素以进行碰撞检测

标签 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. 这会导致段错误吗?
  2. 在 SDL2 中是否有更简单、更有效的方法来实现这一目标?

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

谢谢,

最佳答案

SDL_RenderReadPixels 将结果保存到未初始化的第四个参数(像素)。 SDL 然后将像素写入“某处”,幸运的是这会导致段错误。您必须为结果像素提供空间(静态缓冲区、堆栈缓冲区、malloc 等等)。

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

关于c - SDL2 - 读取像素以进行碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47935420/

相关文章:

c - 不使用双指针交换字符串

c - 将模数转换器ADC(0804)的数字数据存储在8051中

cmake - 如何检查 CMakeLists.txt 中的 SDL2_ttf?

macos - SDL2_mixer框架OSX gcc编译器错误

c - 我应该在初始化失败后使用 SDL_Quit() 吗?

c - 如何在 Windows 中从源代码编译 curl?

c - 我可以在一个订单中有多少个连续的嵌套指针(指向指针的指针)?做引用有限制吗?

c - 我的 C 程序错误地计算字符数

python - SDL2 像素图形流水线

c++ - SDL2 似乎每 50 毫秒才轮询一次输入