mini-ai/day2/Shield.py

47 lines
1.6 KiB
Python

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()