从JMonkey窗口解锁鼠标

时间:2013-12-17 16:46:28

标签: java mouse jmonkeyengine

通常鼠标锁定在窗口上并且不可见;以第一人称射击游戏的方式控制相机。

我的理解是你从JMonkey窗口解锁鼠标并通过调用

使其可见
inputManager.setCursorVisible(true);

然而,这没有明显效果。这在以下示例程序中进行了演示:

public class Main extends SimpleApplication {

    public static void main(String[] args) {
        Main app = new Main();
        app.start();
    }

    @Override
    public void simpleInitApp() {
        Box b = new Box(Vector3f.ZERO, 1, 1, 1);
        Geometry geom = new Geometry("Box", b);

        Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
        mat.setColor("Color", ColorRGBA.Blue);
        geom.setMaterial(mat);
        inputManager.setCursorVisible(true);

        rootNode.attachChild(geom);
    }

}

调用flyCam.setDragToRotate(true);解锁鼠标但也会导致一些DragToRotate行为(毫无疑问)

3 个答案:

答案 0 :(得分:1)

对此的解决方案似乎也必须禁用flycam。所以

inputManager.setCursorVisible(true);
flyCam.setEnabled(false);

或者作为一个完整的例子

public class Main extends SimpleApplication {

    public static void main(String[] args) {
        Main app = new Main();
        app.start();
    }

    @Override
    public void simpleInitApp() {
        Box b = new Box(Vector3f.ZERO, 1, 1, 1);
        Geometry geom = new Geometry("Box", b);

        Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
        mat.setColor("Color", ColorRGBA.Blue);
        geom.setMaterial(mat);
        inputManager.setCursorVisible(true);
        flyCam.setEnabled(false);
        //flyCam.setDragToRotate(true);
        inputManager.setCursorVisible(true);
        rootNode.attachChild(geom);
    }

}

答案 1 :(得分:1)

禁用FlyCam是实现此目的的一种方法,但更好的方法是永远不要首先添加它。如果为应用程序创建新的构造函数并调用SimpleApplication的第二个构造函数,则可以传入要使用的应用程序状态列表,这些完全替换标准集,以便您可以准确选择所需的应用程序。

答案 2 :(得分:-1)

或者简单地说:

flyCam.setDragToRotate(true);

inputManager.setCursorVisible(true);

flyCam仍然可以开启