目标:实现子弹向目标发射
子弹的发射是为了射中目标,傻乎乎的直上直下,还以为是在滚键盘呢。
向目标发射,实现的原理很简单,得到敌机的坐标pos1,得到子弹的坐标pos2,让pos2朝着po1飞行。
坐标可以直接读取 目标的rect.x rect.y来计算获取。飞行的方向,稍微复杂一点,用到高中的一些知识,已知两个坐标的坐标点,求他们的角度。有了角度,设置速度和起始点,就能朝着目标发射了。
假如 pos1 = (pos1_x, pos1_y) ,pos2 = (pos2_x,pox2_y),子弹pos1朝着 pos2的方向的角度,计算公式如下:
atan((pos2_y - pos1_y) / (pos2_x-pos1)) 得到两者的斜率,用atan得到角度,这个角度的单位是弧度。
测试代码如下:
import math
pos1_x ,pos1_y = 1, 1
pos2_x, pos2_y = 2, 2
angle = math.atan((pos2_y - pos1_y) / (pos2_x - pos1_x))
print(angle)
输出的结果是0.785398163397448 。他们的角度是45度,孤弧度是pi/4=0.785398163397448。没错了。
但是当两个坐标点的X坐标可能相等,这样无法用在分母上。做个判断在计算??
pos1_x ,pos1_y = 1, 11
pos2_x, pos2_y = 1, 2
if pos2_x == pos1_x:
if pos1_y <= pos2_y:
angle = math.pi / 2
else:
angle = - math.pi / 2
else:
angle = math.atan((pos2_y - pos1_y) / (pos2_x - pos1_x))
print(angle)
能得到结果了,符合要求。
算法没问题