java中的鼠标位置

use*_*664 10 java frame-rate

我正在用Java开发第一人称射击游戏,我想实现鼠标移动旋转玩家的控件.但是在Java中,我只能通过使用MouseListener事件来获取鼠标坐标,因此一旦鼠标光标离开监视器边缘,坐标将停止变化,我将无法转动播放器的视图.

关于如何做的任何提示/建议?谢谢.

Cro*_*sby 5

我尝试java.awt.Robot按照 AerandiR 的建议使用 a ,但是我遇到了一些问题,其他人也可能会遇到它们,所以我会详细说明。

如果您的目标是将光标保持在一个位置(最好是屏幕的中心),那么您将需要robot.mouseMove(width/2, height/2);mouseMoved()方法的末尾调用类似的东西。使用此实现,每次鼠标移离中心时,Robot都会将其移回中心。

但是,当Robot鼠标重新居中时,玩家将回到原来的位置。实际上,玩家会在原始位置和转向位置之间断断续续。

为了解决这个问题,不要定义你的玩家打开鼠标现在和它所在位置之间的差异有多远,而是将其定义为到中心的距离。

像这样: turnAmountX += e.getX() - width/2;

现在,如果将Robot鼠标重新居中,e.getX() - width/2将始终产生零。

回顾:

    void mouseMoved(MouseEvent e) {
        turnAmountX += e.getX() - width/2;
        turnAmountY += e.getY() - height/2;
        robot.mouseMove(this.getLocationOnScreen().x + width/2, 
            this.getLocationOnScreen().y + height/2;
    }
Run Code Online (Sandbox Code Playgroud)


Aer*_*diR 4

在某些游戏中,每次发生鼠标移动事件时,光标都会移回到屏幕中间,并且视图会随着鼠标事件的相应幅度和方向而移动。您可以通过在将光标居中之前计算光标位置到屏幕中心的偏移来获得该向量。要将光标移回屏幕中心,您可以尝试使用java.awt.Robot类。

由于您正在构建第一人称射击游戏,因此您可能需要隐藏中心锁定的光标,并在玩家想要瞄准的地方绘制自己的十字准线。这还涉及根据先前鼠标移动事件的运行总数来跟踪光标应位于的位置。

如果您想实现视图将继续相对于鼠标的起始位置移动(即使鼠标停止移动),您可以保留所有先前鼠标移动向量的移动总和,并相应地移动视图一次每一帧。然而,这可能更适用于飞行模拟器之类的东西,而不是第一人称射击游戏。