Поверните элемент в форме круга с помощью вектора акселерометра / датчика силы тяжести телефона - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь заставить маленький кружок двигаться по другому большему кругу, как мяч, движущийся по кругу относительно 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. Есть идеи, как решить эту проблему? Заранее спасибо.

...