【发布时间】:2017-06-28 14:26:01
【问题描述】:
我正在用 java 重新制作一个棋盘游戏。我希望能够单击一个标记,然后单击某个位置,然后将该标记移动到该位置。但是,令牌移动到完全不同的位置。 在图像上,我点击了红色方块,但令牌最终从我点击的实际位置向右下方。 (令牌是圆形的东西,上面有鲜明的标志)
我打印了点击的坐标和位置,看看它们是否会有所不同,但事实并非如此。
点击部分的代码:
map.setOnMousePressed((e -> {
System.out.println(e.getX());
System.out.println(e.getY());
currentOrder.setX(e.getX());
currentOrder.setY(e.getY());
System.out.println(currentOrder.getX());
System.out.println(currentOrder.getY());
currentOrder = basics;
}));
坐标的输出:
564.0
365.3333333333333
564.0
365.3333333333333
610.0
267.3333333333333
610.0
267.3333333333333
569.3333333333334
319.3333333333333
569.3333333333334
319.3333333333333
如您所见,点击点的坐标和标记的坐标是相同的。但是,在屏幕上,他们仍然不在同一个地方。
为什么会这样?我该如何解决这个问题?
我尝试从我得到的那个中减去 translateX,我尝试从坐标中减去标记的宽度,我尝试了 getSceneX 和 getScreenX,我尝试了 setLayoutX。所有这一切都在每一种可能的组合中。它似乎都不起作用。有时它甚至给令牌一个固定的 X 位置,只有 Y 改变了。所以,没有任何工作。
我读过但没有帮助的问题:
- How to anchor text at its center in javafx?
- Get mouse position on node relative to it's coordinates and transforms
- How to get location of mouse in JavaFX?
可能还有一些我再也找不到了。
我使用this 作为参考来制作我的代码部分。
我尝试仅添加相关代码。如果需要我的代码的另一部分进行澄清,请告诉我。
【问题讨论】:
-
什么是
currentOrder? -
currentOrder 是我点击的订单。订单指的是ordertoken。当我单击令牌时,它将 currentOrder 设置为该令牌。然后,当我单击某处时,它使用我从 currentOrder 单击的令牌,然后将 currentOrder 更改回基本状态,这样当我再次单击屏幕时,它就不会再次移动。我在另一个代码中使用了一个非常基本的版本,它在那里工作。
-
我的意思是,它是什么类型的东西?哪个类定义了它的
setX和setY方法? -
抱歉。它是一个 ImageView。
-
ImageView.setX()和setY()不要做你认为他们做的事情。他们在图像视图中设置图像的x和y坐标(即它们定义ImageView视口的左上角),而不是ImageView在其容器中的位置。
标签: java image javafx coordinates