根据x,y坐标求角度时一定要用math.atan2(y,x),不能用math.atan(y/x)。只有前者能准确还原x,y坐标,后者有时会方向错误。
def update_normal(self):
vel_x = self.speed * math.cos(self.speed_angle)
vel_y = self.speed * math.sin(self.speed_angle)
self.rect.x+=vel_x
self.rect.y+=vel_y
if self.rect.x<=0 or self.rect.x>=WIDTH-self.rect.width:
self.rect.x=np.clip(self.rect.x,1,WIDTH-self.rect.width-1)
self.speed_angle=math.atan2(vel_y,-vel_x)
if self.rect.y<=0 or self.rect.y>=HEIGHT-self.rect.height:
self.rect.y=np.clip(self.rect.y,1,HEIGHT-self.rect.height-1)
self.speed_angle=math.atan2(-vel_y,vel_x)