Шаг за шагом перемещайте спрайт в позицию щелчка мышью

Я пишу маленькую пиратскую игру в Pygame. Если вы играли в морские сражения в Empires Total War, у вас есть представление о том, чего я хотел бы достичь:

Корабль'спрайт находится в позиции(x1|y1), Игрок теперь нажимает на позиции(x2|y2) на экране. Спрайт теперь должен принимать(x2|y2) как его новая позиция - идти туда шаг за шагом, а не мгновенно сиять там.

Я понял, что это как-то связано с диагональю прямоугольника ,,,(x1|y1)(x1|y2)(x2|y2)(x2|y1) но я просто могуЯ не могу понять это, особенно если не учитывать скорость, независимо от того, какой угол имеет диагональ, и учитывая, чтоx а такжеy значения либо (корабль или клик) могут быть больше или меньше, чем соответствующие другие.

Этот небольшой фрагмент - моя последняя попытка написать рабочую функцию:

def update(self, new_x, new_y, speed, screen, clicked):

    if clicked:
        self.xshift = (self.x - new_x)
        self.yshift = ((self.y - new_y) / (self.x - new_x))

    if self.x > (new_x + 10):
        self.x -= 1
        self.y -= self.yshift
    elif self.x > new_x and self.x < (new_x + 10):
        self.x -= 1
        self.y -= self.yshift
    elif self.x < (new_x - 10):
        self.x += 1
        self.y += self.yshift
    elif self.x < new_x and self.x < (new_x - 10):
        self.x += 1
        self.y += self.yshift
    else:
        self.x += 0
        self.y += 0

    screen.set_at((self.x, self.y), (255, 0, 255))

"корабль" здесь просто розовый пиксель. Реакция, которую он показывает на мои клики на экране, заключается в том, чтобы приблизиться к моему клику, но остановиться на кажущемся случайном расстоянии от точки, которую я нажал.

Переменные:

new_xnew_y = положение щелчка мышью

speed = постоянная скорость в зависимости от типа корабля

clicked = установитьtrue посредствомMOUSEBUTTONDOWN событие, чтобы гарантировать, что xshift и yshift of self определены только тогда, когда игрок нажал, а не каждый кадр снова.

Как я могу сделать так, чтобы корабль плавно перемещался из своего текущего положения в точку, по которой щелкнул игрок?

Ответы на вопрос(1)

Ваш ответ на вопрос