如何修复 touchDragged 中的拖动运动?

How to fix dragged movement in touchDragged?

我正在创建一个 jigsaw puzzle game,您可以在其中拖放拼图。 我想通过双击添加 90 度的增量旋转。移动旋转的拼图时,拖动时出现奇怪的移动。

例如顺时针旋转 90 度后,再移动拼图块将不会跟随鼠标移动,而是在鼠标移动时向外螺旋旋转。

每次旋转都有自己奇怪的运动,但旋转 360 度时运动又是 o.k。

这是为什么?

问题似乎是听众 x 和 y 输入引起的。 public void touchDragged (InputEvent event, float x, float y, int pointer)

我认为在轮换演员时还需要做其他事情,但我不知道是什么...

拼图 act​​or 继承了 Group 并拥有自己的覆盖侦听器。

override fun doubleTap() {
        super.doubleTap()
        /*addAction(Actions.rotateBy(-90f, .25f))*/
        rotateBy(-90f)
    }

我希望拼图始终跟随鼠标指针。

我找到了答案。 显然,当旋转 Actors 时,其坐标系会随之旋转。

我用这段代码解决了问题:

override fun touchDragged(event: InputEvent?, eventOffsetX: Float, eventOffsetY: Float, pointer: Int) {
    val cos = cos(self.rotation * MathUtils.degreesToRadians)
    val sin = sin(self.rotation * MathUtils.degreesToRadians)

    val tox = (eventOffsetX - self.grabOffsetX)
    val toy = (eventOffsetY - self.grabOffsetY)

    var deltaX = 0f
    var deltaY = 0f

    if (abs(cos) == 1f) {
        deltaX = tox * cos
        deltaY = toy * cos
    } else {
        deltaX = toy * -sin
        deltaY = tox * sin
    }

    self.moveBy(deltaX, deltaY)
}

如果有人有解释,我很想听听。