gpt4 book ai didi

c++ - SDL_GetRelativeMouseState 奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 04:01:47 24 4
gpt4 key购买 nike

我在 SDL 2.0.3 中有一个应用程序,它在进入主游戏循环之前进入相对鼠标模式。此外,函数 mouse_input 在每一步被调用:

int mdltx = 0, mdlty = 0;

void mouse_input () {
auto r = SDL_GetRelativeMouseState(&mdltx, &mdlty);

if (mdltx != 0 || mdlty != 0)
cout << "(" << mdltx << "," << mdlty << ")" << endl;

// Update mouse key presses
mpul = !!(r&SDL_BUTTON(1)) | ((!!(r&SDL_BUTTON(3)))<<1);
}

根据documentation of SDL_GetRelativeMouseState :

(...) x and y are set to the mouse deltas since the last call to SDL_GetRelativeMouseState() or since event initialization.

出于调试目的,我添加了输出行,因为在应用程序中产生的效果非常尴尬。事实证明,每次我移动鼠标(并且仅当我移动鼠标时),控制台都会打印出不合理范围内的值。下面是一个简单的鼠标移动示例。受影响的轴似乎是正确的(水平移动会将 mdlty 设置为 0,垂直移动会将 mdltx 设置为 0),但数字可能会比屏幕分辨率高得多,并且无论我移动鼠标的方向如何,它们都是正数。


(342,216)

(47290,0)

(23696,0)

(23730,0)

(23764,0)

(23799,0)

(71190,0)

(117970,83397)

(23491,41802)

(23457,0)

(23423,83811)

(0,41871)

(23389,208322)

(23355,82847)

(0,41320)

(46812,0)


我一直在网上寻找有同样问题的人,但没有成功。另请注意,此应用程序之前是为 SDL 1 制作的,依赖于 SDL_GetMouseStateSDL_WarpMouse,但后者的功能在某些平台上似乎没有任何作用。我正在 Arch Linux + LXDE 安装下开发应用程序,它似乎只是忽略了鼠标扭曲。这是发生其他奇怪行为的同一台机器。

问题是:为什么会发生这种情况,我如何在考虑兼容性的情况下修复它,同时保持相对鼠标模式的优势?我什至怀疑这是否是 SDL 本身的问题。

最佳答案

对于遇到此问题的其他人,设置可能会有所帮助:

SDL_SetHintWithPriority(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "1", SDL_HINT_OVERRIDE);
SDL_SetRelativeMouseMode(SDL_TRUE);

这似乎为您提供了相对的鼠标输出,其中屏幕中心为 (0,0)。

但是对我来说,它目前没有正确地重置光标坐标,所以虽然每一帧都将其重置为 (0,0),但它会直接跳转到前一个坐标 += 移动。

不过,这似乎比替代方案要好得多。

关于c++ - SDL_GetRelativeMouseState 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25576438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com