当子弹拥有一定角度的时候,可以在子弹的set_speed()函数里,算出子弹x,y两个方向的速度,输入角度是degree换成弧度radian
def set_speed(self, speed, angle=0):
self.speed = speed
self.angle = angle
angle = math.pi * angle / 180
self.x_speed = speed * math.cos(angle)
self.y_speed = speed * math.sin(angle)
因为是继承了 pygame.sprite.Sprite。直接在update()函数中把位置更新行了。
#会自动调用
def update(self):
self.rect.x += self.x_speed
self.rect.y += self.y_speed
但是你会发现,子弹并不能360度发射,原因是speed的数字很小,一般在10之内,当角度也小的时候,speed*sin(ange)的数字转成整数(int)后(像素必须是int),误差很大,积累后,只能发射聊聊无几的几个。
目前的想法,不先算速度,在算位置,而是先算长度,再根据角度算位置,这样每个子弹的误差就很小了。
def set_speed(self, speed, angle=0):
self.speed = speed
self