Wie kann ich eine Verbindung mit den Keyboard/Mouse-Ereignissen mit Scene Builder herstellen? Mein Code sieht so aus:Connection Controller mit Szenenerzeuger-Ereignissen
@FXML
public void onKeyPressed() {
group.getScene().setOnKeyPressed(event -> {
double change = 10.0;
if(event.isShiftDown()) { change = 50.0; }
KeyCode keycode = event.getCode();
if(keycode == KeyCode.W) { perspectiveCamera.setTranslateZ(perspectiveCamera.getTranslateZ() + change); }
if(keycode == KeyCode.S) { perspectiveCamera.setTranslateZ(perspectiveCamera.getTranslateZ() - change); }
if(keycode == KeyCode.A) { perspectiveCamera.setTranslateX(perspectiveCamera.getTranslateX() - change); }
if(keycode == KeyCode.D) { perspectiveCamera.setTranslateX(perspectiveCamera.getTranslateX() + change); }
});
}
@FXML
public void onMousePressed() {
group.getScene().setOnMousePressed((MouseEvent me) -> {
mousePosX = me.getSceneX();
mousePosY = me.getSceneY();
mouseOldX = me.getSceneX();
mouseOldY = me.getSceneY();
});
}
@FXML
public void onMouseDragged() {
group.getScene().setOnMouseDragged((MouseEvent me) -> {
mouseOldX = mousePosX;
mouseOldY = mousePosY;
mousePosX = me.getSceneX();
mousePosY = me.getSceneY();
mouseDeltaX = (mousePosX - mouseOldX);
mouseDeltaY = (mousePosY - mouseOldY);
double modifier = 10.0;
double modifierFactor = 0.1;
if (me.isControlDown()) {
modifier = 0.1;
}
if (me.isShiftDown()) {
modifier = 50.0;
}
if (me.isPrimaryButtonDown()) {
cameraTransformer.ry.setAngle(((cameraTransformer.ry.getAngle() + mouseDeltaX * modifierFactor * modifier * 2.0) % 360 + 540) % 360 - 180); // +
cameraTransformer.rx.setAngle(((cameraTransformer.rx.getAngle() - mouseDeltaY * modifierFactor * modifier * 2.0) % 360 + 540) % 360 - 180); // -
} else if (me.isSecondaryButtonDown()) {
double z = perspectiveCamera.getTranslateZ();
double newZ = z + mouseDeltaX * modifierFactor * modifier;
perspectiveCamera.setTranslateZ(newZ);
} else if (me.isMiddleButtonDown()) {
cameraTransformer.t.setX(cameraTransformer.t.getX() + mouseDeltaX * modifierFactor * modifier * 0.3); // -
cameraTransformer.t.setY(cameraTransformer.t.getY() + mouseDeltaY * modifierFactor * modifier * 0.3); // -
}
});
}
ich in der gleichen Art und Weise in der Regel immer tun und es funktioniert, aber jetzt diese Platte mit nicht. Wo mache ich Fehler?
Danke, seine Arbeit jetzt sah ich, auch u hinzugefügt 2 weitere Argumente für den Szenenkonstruktor "true, SceneAntialiasing.BALANCED" nach dem Hinzufügen dieser habe ich unerwünschte Wirkung, hochgeladen auf meine Frage, was verursacht dies? – yerpy
Depth buffer ist erforderlich, wenn Sie mehr Objekte für die tiefe sortierte Darstellung haben, denn jetzt brauchen Sie sie nicht, also können Sie sie auf false setzen und sehen, dass das Artefakt verschwindet. Was das Antialiasing betrifft, beeinflusst es die Glätte der gerenderten Szene. Versuche es auch zu deaktivieren. –
Weiß nicht warum, aber ich habe dieses Problem, während ich die Maus drücke, was kann Ursache sein? Habe bearbeitet. – yerpy