6

我不是在写一个游戏,而是一个使用 Pygame 的科学渲染器。我希望这些控件能够像在第一人称射击游戏中一样工作,以便用户可以使用一组熟悉的控件进行导航。

我试图编写代码以使其具有与例如天际或半条命中的“外观”功能相同的属性,但鼠标不会移动光标 - 它可以让你环顾四周,无限循环。点击应该没有效果。

控件的第一次尝试:

(游戏循环内的代码)

delta_y, delta_x = pygame.mouse.get_rel()
rotation_direction.x = float(delta_x)
rotation_direction.y = float(delta_y)

(不要问我为什么,但是 y 和 x 需要像这样反转以获得预期的外观方向;一定与相机变换实现有关,这不是我的。)

但是,这会导致光标位于窗口顶部,当光标到达屏幕边缘时,窗口停止旋转;即代码报告屏幕上的实际位置。

我试图在每个游戏循环中“重置”鼠标位置(顺便说一下,隐藏鼠标):

pygame.mouse.set_pos([150, 150])
pygame.mouse.set_visible(False)

但这会在下一个循环中生成一个对称的“回到起点”增量,这意味着您无法“查看”任何地方。

总而言之,我想:

  • 检测从设备报告的实际鼠标运动
  • 不移动/显示任何操作系统光标
  • 不在“屏幕边缘”剪辑

使用 Pygame 或其他 Python hack 的最佳方法是什么?

4

3 回答 3

5

http://www.pygame.org/docs/ref/mouse.html

如果鼠标光标被隐藏,并且输入被抓取到当前显示器,则鼠标将进入虚拟输入模式,其中鼠标的相对移动将永远不会被屏幕边框停止。查看功能pygame.mouse.set_visible- 隐藏或显示鼠标光标和pygame.event.set_grab文档) - 控制与其他应用程序共享输入设备以进行配置。

于 2012-09-23T22:41:51.593 回答
0

尝试pygame.mouse.get_rel()在呼叫后立即再次set_pos呼叫以“丢弃”set_pos呼叫执行的任何相对移动。

于 2012-09-23T22:40:51.320 回答
0

由于您使用的是 pyOpenGL,请尝试gluLookAt()示例:如何正确使用 gluLookAt?

于 2012-09-24T01:28:26.680 回答