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

如何让Pygame中玩家死亡动画停留在最后一帧?

解决死亡动画无法停留在最后一帧的问题

问题根源

  1. 原代码使用pg.time.get_ticks() % (3 * death_duration)做时间计算,会让时间在0~1200ms之间循环,导致frame_index反复回到0,动画无限循环。
  2. 你尝试的last_image是函数局部变量,每次调用函数都会被重置为False,根本无法触发最后一帧的逻辑。

解决方案

通过给Player类添加实例级状态变量,持久化动画完成状态,并改用「死亡开始时间的相对时长」计算帧索引,避免时间循环。

第一步:修改Player类初始化

在__init__中添加两个状态变量:

class Player(pg.sprite.Sprite):
    def __init__(self...):
        self.last_moved = ''
        self.death_animation_completed = False  # 标记动画是否已完成
        self.death_start_time = None  # 记录死亡动画启动的时间点

第二步:重写死亡动画函数

def draw_player_death_animation(self):
    self.is_player_image = False
    self.movement_speed = 0

    # 动画已完成,直接固定显示最后一帧
    if self.death_animation_completed:
        self.last_moved = self.player_image_death_final
        return

    # 首次调用时,记录死亡动画启动时间
    if self.death_start_time is None:
        self.death_start_time = pg.time.get_ticks()

    death_duration = 400
    # 计算从死亡动画启动到现在的时长
    elapsed_time = pg.time.get_ticks() - self.death_start_time
    frame_index = elapsed_time // death_duration

    if frame_index == 0:
        self.last_moved = self.player_image_death_1
    elif frame_index == 1:
        self.last_moved = self.player_image_death_2
    elif frame_index >= 2:
        # 到达最后一帧,标记动画完成
        self.last_moved = self.player_image_death_final
        self.death_animation_completed = True

核心逻辑说明

  • 用death_animation_completed实例变量保存状态,不会随函数调用重置,一旦标记为True,后续直接显示最后一帧。
  • 用death_start_time记录动画启动时刻,计算相对时长elapsed_time,避免了取模导致的时间循环问题。
  • 当frame_index >=2时,直接触发最后一帧并锁定状态,动画不再循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:30:20