始终以相同的速度将物体移向特定坐标并超出坐标

Moving object towards certain coordinates and beyond always with the same speed

大家好,我正在 python tkinter 中制作一款游戏,您可以在其中控制一个能够在您点击的地方射击的角色。我希望子弹使用 move 和 after 方法始终以相同的速度朝玩家点击的点移动,并且我没有数学知识来考虑计算移动子弹所需的 x 和 y 距离的方程式朝着玩家点击的点前进,直到它到达 canvas 的尽头。有任何想法吗?感谢您的时间和回答

我已经有了播放器和 tkinter class 以及在点击时创建子弹并传递点击坐标的方法。现在我需要计算一次刷新后 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)

您可能希望在发射子弹时给子弹一个 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

可以将其保存在你的子弹实例中并乘以你的子弹速度以获得你想要在 xy 方向上移动所述子弹的距离:

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

这将使子弹永远移动,添加一个检查以查看它是否越界,如果发生这种情况则删除子弹。