首页 > 解决方案 > 如何修复 touchDragged 中的拖动移动?

问题描述

我正在创建一个拼图游戏,您可以在其中拖放拼图。我想通过双击以 90 度的增量添加旋转。移动旋转的拼图块时,拖动时会发生奇怪的移动。

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

每次旋转都有自己奇怪的运动,但是当旋转 360 度时,运动又可以了。

为什么是这样?

似乎听众 x 和 y 输入导致了问题。public void touchDragged (InputEvent event, float x, float y, int pointer)

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

继承 Group 并拥有自己的覆盖侦听器的拼图演员。

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

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

标签: libgdx

解决方案


我找到了答案。显然,当旋转 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)
}

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


推荐阅读