当我拖动我的精灵,而不是从同一位置拖动它时,它将使用当前单击的X,Y位置重新定位精灵。这是因为精灵会立即在点击的位置上绘制。
if (super.mouseDragging && System.currentTimeMillis() - super.mouseTimer >= 200) {
PosX = super.mouseX;
PosY = super.mouseY;
}
PosX/PosY
=精灵的位置。
当你点击精灵时,我怎么做到这一点,它不会用新的X,Y重新定位它,只是顺利处理拖动?我想在当前位置添加偏移但我不确定究竟是多少。
有没有正确的方法呢?
良好拖动的示例:
http://scratch.mit.edu/projects/2098337/
grabbedX = super.mouseX - PosX;
grabbedY = super.mouseY - PosY;
PosX = super.mouseX - grabbedX;
PosY = super.mouseY - grabbedY;
X: -108 Y: -82
X: 108 Y: 83
X: -108 Y: -83
X: 108 Y: 84
X: -108 Y: -84
X: 107 Y: 85
X: -107 Y: -85
X: 107 Y: 85
X: -107 Y: -85
X: 107 Y: 85
X: -107 Y: -85
if (x >= client.PosX && x <= client.PosX + 229
&& y >= client.PosY && y <= client.PosY + 70) {
this.mouseDragging = true;
this.mouseTimer = System.currentTimeMillis();
System.out.println("yes");
}
else {
System.out.println("no");
}
答案 0 :(得分:1)
你明白了。计算对象原点和单击位置之间的偏移量,然后在拖动过程中设置位置时保持偏移量。如果你不这样做,你会看到初始的“跳跃”,因为它将对象的原点设置在点击的鼠标位置(除非你碰巧在其原点抓住了对象)。
当对象被“抓住”时,我通常会这样做。计算一次,例如在您的mousePressed()
方法中计算:
Point origin = thing.getPosition();
scene.grabbedOffsetX = (mousePos.x - origin.x);
scene.grabbedOffsetY = (mousePos.y - origin.y);
然后,在拖动操作期间重绘时,会考虑先前计算的偏移量。在整个拖动操作中,偏移量保持不变。例如,您可以使用mouseDragged()
方法:
thing.setPosition(mousePos.x - grabbedOffsetX, mousePos.y - grabbedOffsetY);
repaint();