キーボードと一緒にマウスを使用して3D空間内を移動[JavaFX3D]

Giorgos Xまたは:

前書き:

それは一般的に、プログラミングで3Dグラフィックスに来るとき、私は物事が可能であればどのように動作するかについて、いくつかのより多くのexplenation必要がありますので、まず第一に、私は[...]を..私はかなり初心者ですと言う必要があります

問題:

私の問題は、私はいつも午前私が移動するために、キーボードと一緒にマウスを使用してどのように知っていないということであり、下の画像に見られるように、私が移動したときので、可能である中央のStuck

ゴール:

私の目標は、このような私は、XYZ軸に沿って私のマウスとキーボードを使って移動することができますなどなど、ボタン、円などの部品の満たされた、3D空間内を移動することが可能であることを、3D一人称のカメラを作ることです。

進捗:

私はこのように私を助けたいくつかの似たリンクを発見したものをそれでも私は、マウスを動かすとtowords特定のポイントを歩くことができるかのアイデアを把握することはできません(私は2Dimentionsでの3D投影がどのように動作するかのアイデアを得るいけないということではないが、しかし、どれだけ移動するために、キーボードと一緒にマウスを使用して) 。この時点で、私はランダムなものをしようとして立ち往生しています:

センターで立ち往生

ここでは、画像の説明を入力します。

Button NewButton1 = new Button();

NewButton1.setId("Button1");
NewButton1.setText("test");
NewButton1.setPrefWidth(150);
NewButton1.setPrefHeight(50);
NewButton1.setTranslateX(-140);
NewButton1.setTranslateY(0);
NewButton1.setTranslateZ(0);


PerspectiveCamera camera = new PerspectiveCamera(true);  

camera.setFarClip(9000);
camera.setTranslateX(0);  
camera.setTranslateY(0);  
camera.setTranslateZ(-10);  

//setting group and stage   
Group SubRootGroup = new Group();  
SubRootGroup.getChildren().addAll(NewButton1);  


SubScene1 = new SubScene(SubRootGroup, 0, 0, true, SceneAntialiasing.BALANCED);
SubScene1.setFill(Color.GRAY);
SubScene1.heightProperty().bind(TabPane1.heightProperty());
SubScene1.widthProperty().bind(TabPane1.widthProperty());
SubScene1.setCamera(camera); 


TabPane1.getTabs().get(0).setContent(SubScene1);

 TabPane1.setOnKeyPressed(e -> { switch (e.getCode()) { case W:
    SubRootGroup.setTranslateZ(SubRootGroup.getTranslateZ() + 10); break; case S:
    SubRootGroup.setTranslateZ(SubRootGroup.getTranslateZ() - 10); break; case A:
    SubRootGroup.setTranslateX(SubRootGroup.getTranslateX() - 10); break; case D:
    SubRootGroup.setTranslateX(SubRootGroup.getTranslateX() + 10); break; case Q:
    SubRootGroup.setTranslateY(SubRootGroup.getTranslateY() + 10); break; case E:
    SubRootGroup.setTranslateY(SubRootGroup.getTranslateY() - 10); break;
    }});

    SubScene1.setOnMousePressed((MouseEvent e) -> {
         pressed = true;
         newX = e.getSceneX();
         newY = e.getSceneY();
    });

    SubScene1.setOnMouseMoved((MouseEvent e) -> {
        if(pressed){
             oldX = newX;
             oldY = newY;
             newX = e.getSceneX();
             newY = e.getSceneY();
             dx = newX -oldX;
             dy = newY -oldY;

             //SubRootGroup.getRotate().add(new Rotate(45));
             SubRootGroup.setTranslateX(SubRootGroup.getTranslateX() + dx*2);// * sensitivity
             SubRootGroup.setTranslateY(SubRootGroup.getTranslateY() + dy*2);      
        }           
    });

任意の応答を事前に感謝は、任意の助けいただければ幸いです、

ジョージ。

PS。私もJavaFXのに新しいです..

Giorgos Xまたは:

イントロ:

私は、表面にSimpleFPSCameraクラスを持って来るために私を助け、特に@Birdasaurのためのみんなありがとうにしたいすべての最初の[...]

私の問題のために働いたこと回答:

ステップ1:プロジェクトにこれらの2つのクラスを追加します。

(進路変更パッケージ名の...)

ステップ2:セットアップ&編集「SimpleFPSCamera.javaレッド&グリーンによって上記の画像に見られるように」:

編集SimpleFPSCamera.java

ステップ3:それは完了です!ただ、ファイル名を指定して実行それ:

ここでは、画像の説明を入力します。

そして再び、(私を助けてくれてありがとうみんな:

更新:

回答 - JavaFXのを:クリックしたときにサブシーンは、TabPaneの内側に焦点を当てていないのだろうか?

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=230025&siteId=1