拖动JavaFX 3D节点时出现的问题

时间:2019-05-27 17:30:36

标签: java javafx mouseevent mouse javafx-3d

我已经很久没有遇到这个问题了,无论在这里有什么答案,我都一直试图解决这个问题。

这是我的上一个问题,没有解决的问题JavaFX 3D PerspectiveCamera affects drag position of a node

(问题中没有提供答案/链接)

基本上,我正在尝试拖动节点,同时将鼠标的位置保持在拖动时节点的单击位置。

最初的想法是执行event.getScreenX()或event.getSceneX()来获取mouseClicked上的初始位置,然后在拖动的鼠标中进行比较/更新。

问题在于,当我放大和缩小摄像机(camera.setTranslateZ())时,由于某种原因,值会根据缩放而增加/减小,即,当鼠标移动节点时,节点会用鼠标拖动/保持较慢相机缩小。

我还把主节点缩放了10倍,我认为这可能与此有关,因为其中一个示例似乎在改变比例和/或摄像头时就破裂了。但是,该示例也无法使用,并且无法缩放。

有人知道吗?这项任务多么简单,却很难实际完成,这实在令人沮丧。我认为随着鼠标的拖动,无论是放大鼠标拖动1像素还是缩小鼠标拖动100像素都不会导致此问题,所以我想知道是否存在某种与这个错误?任何想法都表示赞赏,谢谢。

public class Move extends Application {

double x0,xDiff;
double y0,yDiff;
@Override
public void start(Stage primaryStage) {

    Box b = new Box(100,100,1);
    b.setLayoutX(0);
    b.setLayoutY(0);
//    b.setTranslateZ(20000);

    Pane root = new Pane();
    root.getChildren().add(b);

    PhongMaterial p = new PhongMaterial();
    p.setDiffuseColor(Color.RED);
    b.setMaterial(p);

    Scene scene = new Scene(root, 2000, 1250,true);
    PerspectiveCamera camera = new PerspectiveCamera(true);
    camera.setTranslateZ(-1000);
    camera.setFarClip(2000);
    scene.setCamera(camera);
    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();

        b.setOnMousePressed(event
     ->{
            x0 = event.getSceneX();
            y0 = event.getSceneY();
            event.consume();
        });

        b.setOnMouseDragged(event
    ->{



        xDiff = event.getSceneX() - x0;
        yDiff = event.getSceneY() - y0;
        b.setLayoutX(b.getLayoutX() + xDiff);
        b.setLayoutY(b.getLayoutY() + yDiff);

        x0 = event.getSceneX();
        y0 = event.getSceneY();

});



primaryStage.setOnScroll(event
     ->{
  if (event.getDeltaY() > 0)
                 {
                    camera.setTranslateZ(camera.getTranslateZ() + 45);

                 }

                  else 
                 {

                    camera.setTranslateZ(camera.getTranslateZ() - 45);
                 }  
 });
}
    /**
     * @param args the command line arguments
     */
public static void main(String[] args) {
    launch(args);
}

}

0 个答案:

没有答案