Перемещение объекта к определенным координатам и дальше всегда с одинаковой скоростью - PullRequest
0 голосов
/ 27 марта 2019

Привет, ребята. Я делаю игру в python tkinter, где вы управляете персонажем, который может стрелять там, где вы щелкаете.Я хочу, чтобы пуля двигалась в направлении точки, по которой игрок щелкал и дальше, всегда с одинаковой скоростью, используя методы перемещения и после, и у меня нет математических знаний, чтобы придумать уравнение, которое вычисляет расстояния x и y, необходимые для перемещения пули.по направлению к точке игрок щелкнул и дальше, пока не достигнет конца холста.Есть идеи?спасибо за ваше время и ответ

У меня уже есть класс player и tkinter и метод, который создает пулю при нажатии и передает ей координаты щелчка.Теперь мне нужно рассчитать изменение x и y после одного обновления

def fly(self):
    self.app.canvsas.move(self.bullet, x and y you calculated)
    self.app.canvas.after(some refresh time, self.fly)

1 Ответ

0 голосов
/ 27 марта 2019

Возможно, вы захотите задать для пули значения x_speed и y_speed при его запуске, а затем обновить каждый кадр, перемещая указанное количество.Допустим, вы щелкаете по (cx,cy) с начальным местоположением пули (sx,sy).Отсюда вы хотите получить угол, чтобы найти cos(angle) и sin(angle).К счастью, мы можем получить это, даже не имея угла!При прямом расстоянии от точки щелчка и начальной точки r = ((sx-cx)**2+(sy-cy)**2)**0.5 у нас будет:

cos_angle = (cx-sx)/r

sin_angle = (cy-sy)/r

, которые можно сохранить в экземпляре пули иумноженный на скорость вашей пули, чтобы определить, насколько далеко вы хотите переместить указанную пулю в направлении x и y:

def updatebulletbycallingthiseveryframe(self):
    self.x += self.bullet_speed*self.cos_angle
    self.y += self.bullet_speed*self.sin_angle

Это будет поддерживать движение пули навсегда, добавьте проверку, чтобы увидеть,выходит за пределы и удалите пулю, если это произойдет.

...