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

游戏Stamina机制逻辑异常求助:冲刺消耗与速度恢复问题

问题分析与修复方案

原代码问题

if keys_pressed.get(K_SPACE) and stamina > 0:
    speed += 150
    for i in range(stamina):
        stamina -= 1
    if stamina == 0:
        speed -= 150
        for i in range(stamina):
            stamina += 1

核心逻辑错误

  • 耐力瞬间耗尽:for循环会在单帧内遍历所有当前耐力值,导致一按空格就直接把耐力扣光,完全不符合“按住时间越长消耗越多”的需求
  • 耐力无法恢复:当stamina为0时,range(stamina)等价于range(0),循环不会执行,所以耐力根本加不回去
  • 速度逻辑混乱:一按空格就加150,紧接着扣完耐力又减150,等于冲刺速度没生效;且没有处理松开空格或耐力耗尽后的速度重置

修复后的代码

假设你使用Pygame框架,基于帧循环的正确逻辑如下(需结合你的基础速度、耐力上限等参数调整):

# 先定义基础参数(根据你的游戏需求调整)
base_speed = 500  # 玩家正常移动速度
stamina_max = 50  # 耐力最大值
stamina = stamina_max  # 当前耐力
stamina_drain_rate = 2  # 每帧消耗的耐力值
stamina_regen_rate = 1  # 每帧恢复的耐力值

# 帧循环内的逻辑
keys_pressed = pygame.key.get_pressed()

if keys_pressed[K_SPACE] and stamina > 0:
    # 按住空格且有耐力时,保持冲刺速度,逐帧消耗耐力
    speed = base_speed + 150
    stamina -= stamina_drain_rate
    # 防止耐力低于0
    if stamina < 0:
        stamina = 0
else:
    # 松开空格或耐力耗尽时,恢复基础速度,逐帧恢复耐力
    speed = base_speed
    if stamina < stamina_max:
        stamina += stamina_regen_rate
        # 防止耐力超过最大值
        if stamina > stamina_max:
            stamina = stamina_max

修复逻辑说明

  • 逐帧消耗/恢复:每帧只处理固定数值的耐力变化,符合“按住时间越长消耗越多”的需求
  • 速度状态同步:冲刺时保持加速状态,松开或耐力耗尽立刻切回基础速度
  • 边界值控制:限制耐力在0到最大值之间,避免出现负数或溢出的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:13