结合前面的贝塞尔曲线的实现方式,在enemyplane.py文件里添加
def set_BSpline_path(self,points):
self.path_type = 'BSpline'
self.points = points
data = np.array(points)
tck,u = interpolate.splprep(data.transpose(), s=0)
t = 1 / self.max_point
unew = np.arange(0, 1.01, t)
out = interpolate.splev(unew, tck)
self.path_points=out
使得self.path_points的点为运算后的点,值得注意的是,out的数组形式是out[0]保存的是一组x值,out[1]保存的是一组y值。
所以在update()函数里,点的传递方式为out[0][],out[1][]
elif self.path_type == 'BSpline':
if self.current_point == self.max_point:
self.current_point = 0
self.rect.x = self.path_points[0][self.current_point]
self.rect.y = self.path_points[1][self.current_point]
self.current_point += 1
<