大家好,我正在用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)
答案 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
可以将其保存在项目符号实例中,然后乘以项目符号的速度,以获取要沿x
和y
方向移动所述项目符号的距离:
def updatebulletbycallingthiseveryframe(self):
self.x += self.bullet_speed*self.cos_angle
self.y += self.bullet_speed*self.sin_angle
这将使子弹永远移动,添加检查以检查子弹是否超出范围,并在发生这种情况时将其删除。