You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame实现坦克无敌状态下的精灵闪烁/半透明效果

PyGame 坦克免疫状态下的半透明白色叠加闪烁效果实现

要实现50%不透明度的白色叠加层闪烁,需要结合状态标记、时间控制和绘制逻辑三部分完成,以下是具体改造方案:

1. 扩展Tank类的属性

在Tank类中添加控制闪烁的必要变量:

class Tank(GamePhysicsObject):
    def __init__(self):
        # 原有属性保留
        self.time_since_death = pygame.time.get_ticks()
        self.immune = False
        self.immune_time = 3000
        # 新增闪烁控制属性
        self.flashing = False  # 是否处于闪烁状态
        self.flash_tick = pygame.time.get_ticks()  # 记录闪烁切换的时间点
        self.flash_visible = True  # 当前叠加层是否显示

2. 实现start_flashing函数

该函数用于开启闪烁状态并初始化相关变量:

def start_flashing(self):
    """开启坦克的免疫闪烁效果"""
    self.flashing = True
    self.flash_tick = pygame.time.get_ticks()
    self.flash_visible = True

3. 在post_update中处理闪烁逻辑与停止机制

更新post_update方法,加入闪烁状态的时间控制,同时在免疫结束时停止闪烁:

def post_update(self):
    current_time = pygame.time.get_ticks()
    # 处理免疫超时
    if current_time - self.time_since_death > self.immune_time:
        self.immune = False
        self.flashing = False  # 停止闪烁
    # 处理闪烁状态切换(每300ms切换一次显示状态,可按需调整)
    if self.flashing:
        if current_time - self.flash_tick > 300:
            self.flash_visible = not self.flash_visible
            self.flash_tick = current_time

4. 修改坦克的绘制逻辑

在绘制原始坦克精灵后,额外绘制半透明白色叠加层:

def draw(self, screen):
    # 先绘制原始坦克精灵
    super().draw(screen)
    # 如果处于闪烁状态且当前需要显示叠加层
    if self.flashing and self.flash_visible:
        tank_rect = self.rect
        # 创建和坦克同尺寸的半透明白色表面
        white_overlay = pygame.Surface((tank_rect.width, tank_rect.height), pygame.SRCALPHA)
        # 设置白色+50%不透明度(alpha值128,范围0-255)
        white_overlay.fill((255, 255, 255, 128))
        # 将叠加层绘制到坦克位置
        screen.blit(white_overlay, tank_rect.topleft)

补充优化

如果坦克是不规则形状,可通过mask裁剪叠加层,保证仅在坦克区域显示白色效果:

# 替换上述绘制叠加层的代码
white_overlay = pygame.Surface((tank_rect.width, tank_rect.height), pygame.SRCALPHA)
white_overlay.fill((255, 255, 255, 128))
# 用坦克的mask裁剪叠加层
white_overlay.blit(self.mask.to_surface(), (0,0), special_flags=pygame.BLEND_RGBA_MULT)
screen.blit(white_overlay, tank_rect.topleft)

内容的提问来源于stack exchange,提问作者Bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:05:30