使用鼠标和键盘 [JavaFX3D] 在 3D 中移动 Space
Moving in 3D Space using mouse along with keyboard [JavaFX3D]
简介:
首先,我应该说,在编程中涉及 3D 图形时,我是一个新手,一般来说..所以如果可能的话,我需要更多关于事情如何工作的解释 [...]
问题:
我的问题是,我不知道如何使用鼠标和键盘一起移动,因为当我如下图所示移动时,我总是 卡在中间
目标:
我的目标是制作一个 3D 第一人称相机,能够在 3D 中移动 space,充满按钮、圆圈等组件,例如我可以用鼠标导航和沿 XYZ 轴的键盘。
进度:
我找到了一些类似的链接,对我有帮助 !但我仍然无法理解如何移动我的鼠标并走到一个特定的点(不是我不知道 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 新手..
Fxyz3D 有一个 SimpleFPSCamera class 听起来正是您入门所需要的。看一看。
简介:
首先,我要感谢大家帮助我,特别是@Birdasaur 让 SimpleFPSCamera 浮出水面 class [...]
解决我的问题的答案:
第 1 步:将这 2 个 class 添加到您的项目中:
(当然要改包名..)
第 2 步: 设置和编辑“SimpleFPSCamera.java”,如上图中红色和绿色所示:
第 3 步:完成!只是 运行 它:
再次感谢大家帮助我 (:
更新:
Answered - JavaFX: SubScene won't focus inside TabPane when clicked?
简介:
首先,我应该说,在编程中涉及 3D 图形时,我是一个新手,一般来说..所以如果可能的话,我需要更多关于事情如何工作的解释 [...]
问题:
我的问题是,我不知道如何使用鼠标和键盘一起移动,因为当我如下图所示移动时,我总是 卡在中间
目标:
我的目标是制作一个 3D 第一人称相机,能够在 3D 中移动 space,充满按钮、圆圈等组件,例如我可以用鼠标导航和沿 XYZ 轴的键盘。
进度:
我找到了一些类似的链接,对我有帮助
困在中心
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 新手..
Fxyz3D 有一个 SimpleFPSCamera class 听起来正是您入门所需要的。看一看。
简介:
首先,我要感谢大家帮助我,特别是@Birdasaur 让 SimpleFPSCamera 浮出水面 class [...]
解决我的问题的答案:
第 1 步:将这 2 个 class 添加到您的项目中:
(当然要改包名..)
第 2 步: 设置和编辑“SimpleFPSCamera.java”,如上图中红色和绿色所示:
第 3 步:完成!只是 运行 它:
再次感谢大家帮助我 (:
更新:
Answered - JavaFX: SubScene won't focus inside TabPane when clicked?