Шаг за шагом перемещайте спрайт в позицию щелчка мышью
Я пишу маленькую пиратскую игру в 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_x
new_y
= положение щелчка мышьюspeed
= постоянная скорость в зависимости от типа корабляclicked
= установитьtrue
посредствомMOUSEBUTTONDOWN
событие, чтобы гарантировать, что xshift и yshift of self определены только тогда, когда игрок нажал, а не каждый кадр снова.
Как я могу сделать так, чтобы корабль плавно перемещался из своего текущего положения в точку, по которой щелкнул игрок?