始终以相同的速度将物体移向某些坐标并超越该坐标

时间:2019-03-27 19:33:43

标签: python tkinter tkinter-canvas

大家好,我正在用python tkinter制作游戏,您可以在其中控制一个可以在单击位置拍摄的角色。我希望子弹使用move和after方法以相同的速度朝着单击的点击球员移动,并且我始终不具备数学知识,无法考虑计算移动子弹所需的x和y距离的方程式指向玩家点击的位置,直到到达画布末端为止。有任何想法吗?感谢您的时间和回答

我已经拥有播放器和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 :(得分:0)

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

这将使子弹永远移动,添加检查以检查子弹是否超出范围,并在发生这种情况时将其删除。