java - 拖动 JavaFX 3D 节点的问题
问题描述
我已经有这个问题很长时间了,无论这里有什么答案,我都会尝试一直遇到问题。
这是我以前的一个问题,没有解决它JavaFX 3D PerspectiveCamera 影响节点的拖动位置
(问题中提供的答案/链接也没有)
本质上,我试图拖动一个节点,同时在拖动时将鼠标位置保持在节点的单击位置。
最初的想法是做一个 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);
}
}
解决方案
推荐阅读
- angular - 如何显示全屏模式
- ms-access - 最小化访问应用程序,然后最大化它并将焦点重新设置为访问应用程序
- linux - 如何在 bash shell 脚本中添加另一个“for”循环?
- c# - EF将列表属性映射到不同表中的单个列
- html - 属性顺序重要吗?
- php - MAMP 不启动
- sql - MS SQL:连接三个表并仅从数值计算平均值
- javascript - 刷新网络浏览器时Firebase数据不起作用
- ios - 我正在尝试从我的 ios Swift 项目中的 Firestore 数据库中获取数据
- python - Seaborn:如何使用 PairGrid 获取 distplot 的 y 轴计数