libgdx - 如何修复 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)
}
我希望拼图始终跟随鼠标指针。
解决方案
我找到了答案。显然,当旋转 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)
}
如果有人有解释,我很想听听。
推荐阅读
- python - 用自己的值有条件地更新数据框值
- php - Laravel 计划任务被多次触发
- vue.js - 调试涉及多个文件之间的 EventBus 通信的程序
- android - 手机重启(重启)后,在android中首先调用哪个接收器
- android - 颤振中有唤醒锁吗?
- java - Springs ApplicationEvents 的自定义过滤器
- java - 弹簧控制器路径不被视为常数
- git - 如何使用 ajoberstar/reckon 和 Bitbucket Pipelines 配置自动语义版本控制?
- javascript - 我在轮播中显示图像的功能有一个额外的空白图像
- java - 如何在 Struts2 中导出 CSV 文件