Pygame - 第一人称射手用鼠标“看”

时间:2012-09-23 22:08:36

标签: python mouse pygame pyopengl

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

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

第一次尝试控件:

(游戏循环中的代码)

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

(不要问我原因,但是y和x需要像这样反转以获得预期的外观方向;必须与相机变换实现有关,isn't mine。)

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

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

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

但是这会在下一个循环中产生一个对称的“回到开始”delta,这意味着你无法在任何地方'看'。

总结一下,我想:

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

使用Pygame或其他Python黑客攻击的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

pygame.mouse.get_rel()调用'扔掉'set_pos来电set_pos调用之后,请立即再次致电{{1}}。

答案 2 :(得分:0)

由于您使用的是pyOpenGL,请尝试gluLookAt()示例:How do I use gluLookAt properly?