繁体   English   中英

Java中的鼠标位置

[英]Mouse location in java

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

有关如何操作的任何提示/建议? 谢谢。

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

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

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

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

如果您的目标是将光标保持在一个位置(最好是屏幕的中心),那么您将需要调用类似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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM