Создание игры с использованием Golang, поскольку она, похоже, хорошо работает для игр. Я сделал плеер всегда лицом к мыши, но хотел, чтобы скорость превратилась в некоторых персонажей, чем другие. Вот как он вычисляет круг поворота:
func (p *player) handleTurn(win pixelgl.Window, dt float64) {
mouseRad := math.Atan2(p.pos.Y-win.MousePosition().Y, win.MousePosition().X-p.pos.X) // the angle the player needs to turn to face the mouse
if mouseRad > p.rotateRad-(p.turnSpeed*dt) {
p.rotateRad += p.turnSpeed * dt
} else if mouseRad < p.rotateRad+(p.turnSpeed*dt) {
p.rotateRad -= p.turnSpeed * dt
}
}
МышьРад - радиан для поворота, чтобы смотреть в лицо мыши, и я просто добавляю скорость поворота [в данном случае, 2].
То, что происходит, когда мышь достигает левой стороны и пересекает центральную ось y, радианный угол идет от -pi к pi или наоборот. Это заставляет игрока делать полный 360.
Каков правильный способ исправить это? Я попытался сделать угол абсолютным значением, и он только сделал это в pi и 0 [в левой и правой частях квадрата по оси y].
Я приложил gif проблемы, чтобы лучше визуализировать.
Основное обобщение:
Игрок медленно вращается, чтобы следовать за мышью, но когда угол достигает pi, он изменяет полярность, которая заставляет игрока делать 360 [отсчитывает все обратные к противоположному полю полярности].
Изменение: dt - время дельта, только для правильных изменений в движении,
p.rotateRad начинается с 0 и является float64.
Github repo временно: здесь
Вам нужна эта библиотека для ее создания! [иди возьми это]