【发布时间】: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