在JavaFX中,我试图通过单击并拖动它来移动节点。如果节点没有旋转,它运行良好,但是当我旋转它时,它开始表现得很奇怪。
在45°左右,当我移动它时会开始抖动,在60°时它猛烈地来回摇晃。当我开始移动它时,节点在90°处飞过屏幕。
以下是我用来旋转和移动节点的代码。它来自连接到节点的MouseListener。
if( event.getEventType() == MouseEvent.MOUSE_RELEASED) {
( this.lastEvent == MouseEvent.MOUSE_PRESSED ) {
if(getRotate() == 0) {
setRotate(90d);
} else {
setRotate(0d);
}
}
}
if( event.getEventType() == MouseEvent.MOUSE_DRAGGED ) {
if(getRotate() == 0) {
setTranslateX( getTranslateX() + event.getX() );
setTranslateY( getTranslateY() + event.getY() );
System.out.print(" trX: " + getTranslateX());
System.out.print(" evX: " + event.getX());
System.out.println(" evY: " + event.getY());
} else {
setTranslateX(getTranslateX() + event.getX() );
setTranslateY(getTranslateY() + event.getY() );
System.out.print(" trX: " + getTranslateX());
System.out.print(" evX: " + event.getX());
System.out.println(" evY: " + event.getY());
}
}
编辑:以下是一些示例输出,以及显示不同节点的图片。
未旋转时输出并缓慢向左移动:
trX: 333.0 evX: -1.0 evY: 0.0
trX: 333.0 evX: 0.0 evY: -1.0
trX: 332.0 evX: -1.0 evY: 0.0
trX: 332.0 evX: 0.0 evY: -1.0
trX: 331.0 evX: -1.0 evY: 0.0
trX: 330.0 evX: -1.0 evY: -1.0
trX: 330.0 evX: 0.0 evY: 1.0
旋转时缓慢向左移动时的输出:
trX: 102.0 evX: 142.0 evY: -245.0
trX: 489.0 evX: 387.0 evY: -102.0
trX: 978.0 evX: 489.0 evY: 286.0
trX: 1181.0 evX: 203.0 evY: 776.0
trX: 607.0 evX: -574.0 evY: 979.0
trX: -947.0 evX: -1554.0 evY: 405.0
trX: -2905.0 evX: -1958.0 evY: -1149.0
trX: -3714.0 evX: -809.0 evY: -3106.0
trX: -1417.0 evX: 2297.0 evY: -3914.0
trX: 4795.0 evX: 6212.0 evY: -1617.0
trX: 12623.0 evX: 7828.0 evY: 4595.0
trX: 15857.0 evX: 3234.0 evY: 12423.0
trX: 6668.0 evX: -9189.0 evY: 15658.0
trX: -18180.0 evX: -24848.0 evY: 6469.0
trX: -49497.0 evX: -31317.0 evY: -18378.0
trX: -62436.0 evX: -12939.0 evY: -49694.0
trX: -25681.0 evX: 36755.0 evY: -62632.0
trX: 73706.0 evX: 99387.0 evY: -25876.0
trX: 198969.0 evX: 125263.0 evY: 73512.0
trX: 250720.0 evX: 51751.0 evY: 198776.0
trX: 103694.0 evX: -147026.0 evY: 250526.0
trX: -293858.0 evX: -397552.0 evY: 103501.0
trX: -794910.0 evX: -501052.0 evY: -294051.0
trX: -1001912.0 evX: -207002.0 evY: -795103.0
trX: -413811.0 evX: 588101.0 evY: -1002104.0
外部框是“父”节点,而带有“Not a Gnome”文本的内部黑框是我正在尝试移动的节点。 鼠标事件侦听器将添加到内部节点。
答案 0 :(得分:1)
我终于想出了一个解决方案。
我不是根据鼠标基于其实例位置的位置来移动节点,而是根据场景中的坐标计算它的变化程度。
以下是更新后的代码,有关上下文的所有内容与问题中的内容相同。
./manage.py migrate