3

我正在使用 SDL2 开发 Windows 应用程序。我想更改光标显示。我使用示例创建了光标,完全复制, SDL_CreateCursor 然后SDL_SetCursorSDL_MOUSEMOTION事件中调用,但似乎没有运气。

所以我只是跳入:

SDL_Cursor * cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); 
SDL_SetCursor(cursor); 

官方 wikiSDL_CreateSystemCursor向 TODO 状态报告的地方。我查看了源代码,它似乎已经实现并且可以创建一个有效的游标。但是,光标显示也没有改变。

我应该怎么办?

4

2 回答 2

0

你真的应该发布你的实际代码,但我会在黑暗中试一试,看看我是否能猜出你做错了什么。您说“我使用从 SDL_CreateCursor 完全复制的样本创建了光标,然后在 SDL_MOUSEMOTION 事件中调用 SDL_SetCursor,但似乎没有运气。” 后来你继续说它似乎短暂地闪烁到正确的图像。

尝试在偶数循环之前更改 SDL 光标。这不是您每次鼠标移动时都想运行的东西,而是您在初始化时更改的东西。将代码移至事件循环之前和 SDL_Init 之后。

如果这不起作用,请在此处发布您的代码,以便我们实际看到您在做什么。

于 2013-03-25T00:18:56.227 回答
0

GitHub 上有各种问题(例如这个问题)讨论了与 SDL 的光标设置功能相关的错误。

您可以改为手动创建自定义光标,如下所示:

声明鼠标对象。

int x = 0, y = 0; // The x and y position of the mouse 
Uint32 mouse = SDL_GetMouseState(&x, &y); // Relative to window. 
// Use SDL_GetGlobalMouseState(&x, &y); to get mouse position relative to desktop.

不断更新游戏循环中的 x 和 y 坐标。

mouse = SDL_GetMouseState(&x, &y)

更新您选择的精灵以跟随鼠标的 x 和 y 坐标。

我建议您在实施此操作时将默认光标保持可见,以便您可以了解任何滞后/偏移并进行相应调整。当您感到高兴时,您可以使用以下行来隐藏默认光标:

SDL_ShowCursor(SDL_DISABLE);

您可以在此处阅读有关SDL_GetMouseState()的更多信息。

于 2021-09-10T21:46:35.140 回答