【问题标题】:C++ SDL2 Get Mouse Coordinates Without DelayC++ SDL2 无延迟地获取鼠标坐标
【发布时间】:2014-08-11 05:09:56
【问题描述】:

我正在使用 Code::Blocks 中的 SDL2 库用 C++ 制作 2D 鸟瞰射击游戏 strong>,使用 MinGW 编译,在 Windows 7 上运行。

一切都进行得很顺利,但是我遇到了一个大问题,我还没有找到任何可行的解决方案。作为一名射手,鼠标涉及很多,但我永远无法将鼠标位置返回到正确的帧......它似乎总是落后大约 2-5 帧。

例如,我需要一个十字准线图像始终在(不可见的)鼠标上。我知道我可以只使用 CreateCursor 之类的鼠标功能之一,但我仍然需要准确的坐标,这样目标才不会关闭。我正在使用一个基本的脚本这样:

bool quit = false;
SDL_Event e;
int xMouse, yMouse;

while(quit == false)
{
    while(SDL_PollEvent(&e) != 0)
    {
        if(e.type == SDL_MOUSEMOTION)
        {
            SDL_GetGlobalMouseState(&xMouse,&yMouse);
        }
    }
}

现在,如果我在 (xMouse-10, yMouse-10) (用于原点的减法) 处渲染了十字准线图像,它将始终拖在光标后面。此外,一旦鼠标已经停止移动,坐标将需要几帧才能停止移动。

提供一种更好的精确鼠标跟踪方法。

附:我对 C++ 和 SDL 还很陌生,所以如果您愿意,请提供任何其他建议。

【问题讨论】:

  • 您使用的是什么操作系统?如果您使用的是 Windows 8.0,它可能与 this 有关。
  • 您是否尝试过在不检查 SDL_MOUSEMOTION 事件的情况下调用 SDL_GetGlobalMouseState(&xMouse,&yMouse);?因此,只需在每次执行主循环时获取鼠标位置,然后检查是否能解决问题。
  • @lmNt 这个我试过了,还是有延迟。

标签: c++ mouseevent mouse sdl sdl-2


【解决方案1】:

这有点远,但在我的 Linux SDL2 项目中,我有类似的鼠标延迟,这是由于在我的渲染器上设置了 SDL_RENDERER_PRESENTVSYNC 标志造成的。删除该标志修复了滞后。可能值得一试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2020-12-18
    • 2010-09-09
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多