Учитывая две позиции (self.position
и target.position
), а также текущее вращение (self.rotation
) и скорость вращения (self.rotation_speed
), я хочу наклонить self
к target
каждому тику.После обновления угла ускорение применяется к скорости, а затем позиция перемещается в своем текущем направлении (self.rotation
).
Следующий код работает почти идеально.Однако, если целью является «источник», то вращение начинает идти в противоположном направлении, чем если бы self
движется по часовой стрелке через квадрант 4 или против часовой стрелки через квадрант 1.
def _update_angle(self):
while self.rotation < -math.pi:
self.rotation += math.pi * 2
while self.rotation > math.pi:
self.rotation -= math.pi * 2
angle_delta_x = self.target.position[0] - self.position[0]
angle_delta_y = self.target.position[1] - self.position[1]
angle = -math.atan2(angle_delta_y, angle_delta_x)
if angle < self.rotation:
self.rotation -= self.rotation_speed
elif angle > self.rotation:
self.rotation += self.rotation_speed