Я пытаюсь заставить маленький кружок двигаться по другому большему кругу, как мяч, движущийся по кругу относительно Android наклона телефона. Я делаю это в Godot, но думаю, что принцип, вероятно, одинаков для всех игровых движков. Я создаю сцену в Godot и добавляю два спрайта в виде двух кружков, как показано на следующем рисунке. Я получаю трехмерный вектор акселерометра, использую значения x и y и вычисляю угол в пластине x и y (относительно оси y, то есть Vector2 (0, 1)) и поворачиваю упомянутую сцену до этой степени с помощью анимации, используя этот код
func _process(delta: float) -> void:
var vec3 = Input.get_accelerometer()
accelVec = Vector2(-stepify(vec3.x, 0.1), -stepify(vec3.y, 0.1))
var angle = accelVec.angle_to(Vector2(0, 1))
rotateTween.interpolate_property(self, "rotation", rotation, angle, 0.2,
Tween.TRANS_LINEAR)
rotateTween.start()
return
Но проблема заключается в том, что когда значение x трехмерного вектора акселерометра изменяется с положительного на отрицательное значение, то есть когда мяч находится в верхней части круга и собирается go на другой половина круга, он фактически движется снизу круга к желаемой точке, а не сверху круга. Надеюсь, я хорошо объяснил проблему, хотя и сомневаюсь. Я добавил Gif, который показывает фактический тест на телефоне android сюда Тестирование в Android. Есть идеи, как решить эту проблему? Заранее спасибо.