长话短说,我有一个oculus dk2 vr头戴式耳机,一个蓝牙适配器和psmove运动控制器。我在虚拟现实中玩了一款“末日3”游戏,你可以用鼠标从你的视角单独控制你的瞄准。
现在我可以用内置的陀螺仪让我的psmove表现得像一只老鼠,这听起来比实际困难得多。我使用一个名为psmoveservice的应用程序,它可以通过蓝牙将psmove连接到pc,然后我使用另一个名为psmovefreepiebridge的应用程序将原始数据发送到一个名为freepie的应用程序。
Freepie基于python语法,您可以导入库。我从这段代码开始,这段代码为psmove分配了一些按钮,并让psmove像鼠标一样工作。
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在这里没有使用任何位置跟踪,它在游戏中失去了很多与瞄准的对准,特别是在改变方向之后。我可以通过瞄准枪的位置并按住一个按钮来将其对准,但我认为这有点麻烦,于是将此按钮更改为切换按钮。它工作得很完美,但问题是,有时目标不在我的视线之外,这使得当我不得不搜索我的枪在哪里时,这是相当恼人的。
我想要的是,当我按下一个按钮时,目标会移到中心,因为你主要是瞄准你看的地方,我知道你在想什么,为什么不把耳机对准十字准线,但问题是,如果你想瞄准某个东西,你会先看它,但你用眼球瞄准的时候会更精细。它也不像用枪瞄准那么有趣:)
所以我认为它会工作得很好,然后更改了我的代码,这样当我按下一个按钮时,鼠标就会移到屏幕的中心。这是代码(它还有一些其他代码来映射按钮)
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)进行通信,这就更难了。
因此,如果有人知道我需要从哪里开始,我将非常高兴:)
发布于 2018-06-02 06:10:40
我认为你可以使用pyautogui
来做这件事。
import pyautogui
pyautogui.position() # gets mouse position returns pixel value E.G: (975,400)
pyautogui.moveTo(975,400) # move mouse to this location
您可以根据需要将它们放入一个函数中,并根据需要将其映射到一个按钮。
使鼠标居中,抓住位置,将其放在一个变量中以供以后使用。
这只是个想法。
https://stackoverflow.com/questions/45108057
复制相似问题