首页 > 解决方案 > 始终以相同的速度将物体移向特定坐标并超出坐标

问题描述

大家好,我正在用 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)

标签: pythontkintertkinter-canvas

解决方案


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

这将使子弹永远移动,添加检查以查看它是否超出范围,如果发生这种情况则删除子弹。


推荐阅读