首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >0如何将一个按钮分配给鼠标位置,并通过按下另一个按钮将鼠标带回该位置(用于VR目的/python/freepie)

0如何将一个按钮分配给鼠标位置,并通过按下另一个按钮将鼠标带回该位置(用于VR目的/python/freepie)
EN

Stack Overflow用户
提问于 2017-07-15 00:50:33
回答 1查看 351关注 0票数 0

长话短说,我有一个oculus dk2 vr头戴式耳机,一个蓝牙适配器和psmove运动控制器。我在虚拟现实中玩了一款“末日3”游戏,你可以用鼠标从你的视角单独控制你的瞄准。

现在我可以用内置的陀螺仪让我的psmove表现得像一只老鼠,这听起来比实际困难得多。我使用一个名为psmoveservice的应用程序,它可以通过蓝牙将psmove连接到pc,然后我使用另一个名为psmovefreepiebridge的应用程序将原始数据发送到一个名为freepie的应用程序。

Freepie基于python语法,您可以导入库。我从这段代码开始,这段代码为psmove分配了一些按钮,并让psmove像鼠标一样工作。

代码语言:javascript
复制
def update():
   #define globals

   #define constants
   mag = 1000
   dz = 0.005
   i=0
   j=0

   #bind left mouse to cross button
   #Right mouse to circle button
   #Middle mouse to move
   mouse.leftButton = joystick[j].getDown(14)
   mouse.rightButton = joystick[j].getDown(13)
   mouse.middleButton = joystick[j].getDown(19)

   #Mouse movement using Gryoscope
   # Only moves when the trigger is held down
   mdX = -1 * filters.deadband(filters.delta(freePieIO[i].yaw),dz) * mag
   mdY = -1 * filters.deadband(filters.delta(freePieIO[i].pitch),dz) *   mag
   if joystick[j].getDown(20):
      mouse.deltaX = mdX
      mouse.deltaY = mdY


if starting:
   freePieIO[0].update += update

现在,当然,因为psmove在这里没有使用任何位置跟踪,它在游戏中失去了很多与瞄准的对准,特别是在改变方向之后。我可以通过瞄准枪的位置并按住一个按钮来将其对准,但我认为这有点麻烦,于是将此按钮更改为切换按钮。它工作得很完美,但问题是,有时目标不在我的视线之外,这使得当我不得不搜索我的枪在哪里时,这是相当恼人的。

我想要的是,当我按下一个按钮时,目标会移到中心,因为你主要是瞄准你看的地方,我知道你在想什么,为什么不把耳机对准十字准线,但问题是,如果你想瞄准某个东西,你会先看它,但你用眼球瞄准的时候会更精细。它也不像用枪瞄准那么有趣:)

所以我认为它会工作得很好,然后更改了我的代码,这样当我按下一个按钮时,鼠标就会移到屏幕的中心。这是代码(它还有一些其他代码来映射按钮)

代码语言:javascript
复制
def update():
   #define globals

   #define constants
   mag = 1000
   dz = 0.005
   i=0
   j=0

   #bind left mouse to trigger button
   #Right mouse to circle
   #Middle mouse to triangle
   #up arrow key to square
   #down arrow key to cross
   #B Key to select ps button
   #N key to select button
   #Esc key to start button

   mouse.leftButton = joystick[j].getDown(20)
   mouse.rightButton = joystick[j].getDown(13)
   mouse.middleButton = joystick[j].getDown(12)
   keyboard.setKey(Key.UpArrow, joystick[j].getDown(15))
   keyboard.setKey(Key.DownArrow, joystick[j].getDown(14))
   keyboard.setKey(Key.B, joystick[j].getDown(16))
   keyboard.setKey(Key.N, joystick[j].getDown(0))
   keyboard.setKey(Key.Escape, joystick[j].getDown(3))

   #Mouse movement using Gryoscope
   # move button centers aim
   mdX = -1 * filters.deadband(filters.delta(freePieIO[i].yaw),dz) * mag
   mdY = -1 * filters.deadband(filters.delta(freePieIO[i].pitch),dz) * mag
   mouse.deltaX = mdX
   mouse.deltaY = mdY

      if joystick[j].getDown(19):    
          import ctypes

          ctypes.windll.user32.SetCursorPos(1000, 500)

if starting:
   freePieIO[0].update += update

现在,用于将鼠标设置到屏幕中心的命令是setcursor命令,它工作得很好,只是在游戏中不起作用。

通过一些研究,我意识到游戏并不使用窗口的鼠标位置,而是使用鼠标驱动程序的原始数据,或者类似的东西。

所以我想我只能通过使用一个代码来解决这个问题,当我按下一个按钮时,它会记住鼠标的位置,然后当我按下另一个按钮时,它会回到那个位置。我可以弄清楚按钮映射,记忆和返回到我不能记住的特定位置的代码。

要么是这样,要么是与其中一个驱动程序(鼠标驱动程序,directinput)进行通信,这就更难了。

因此,如果有人知道我需要从哪里开始,我将非常高兴:)

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 06:10:40

我认为你可以使用pyautogui来做这件事。

代码语言:javascript
复制
import pyautogui

pyautogui.position() # gets mouse position returns pixel value E.G: (975,400)
pyautogui.moveTo(975,400)   # move mouse to this location

您可以根据需要将它们放入一个函数中,并根据需要将其映射到一个按钮。

使鼠标居中,抓住位置,将其放在一个变量中以供以后使用。

这只是个想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45108057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档