import pygame import math class Shield(pygame.sprite.Sprite): def __init__(self, player): super().__init__() self.player = player self.radius = 16 self.arc_angle = 90 self.start_angle = 0 self.shield_image = pygame.Surface( (self.radius*2, self.radius*2), pygame.SRCALPHA) self.color = (0, 255, 0) self.update_shield_image() def update_shield_image(self): self.shield_image.fill((0, 0, 0, 0)) # 透明背景 pygame.draw.arc(self.shield_image, self.color, self.shield_image.get_rect(), math.radians( self.start_angle), math.radians(self.start_angle + self.arc_angle), self.radius) def generate(self): self.player_group = pygame.sprite.Group() self.player_group.add(self.player) # 根据玩家的位置和护盾角度调整护盾的位置和角度 self.rect = self.shield_image.get_rect(center=self.player.rect.center) self.rect.x -= self.radius self.rect.y -= self.radius self.rotate_shield() def rotate_shield(self): rotated_image = pygame.transform.rotate( self.shield_image, self.player.toword_angle) self.image = pygame.Surface(rotated_image.get_size(), pygame.SRCALPHA) self.image.blit(rotated_image, (0, 0)) self.mask = pygame.mask.from_surface(self.image) def damage(self): self.arc_angle -= 90 self.start_angle += 90 if self.arc_angle <= 0: self.kill() else: self.update_shield_image() self.rotate_shield()