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

在Godot 3D Doom类游戏中实现冲刺与stamina机制的问题排查

3D Doom类游戏冲刺机制 stamina 归零时无法阻止的修复方案

问题根源

  1. Stamina消耗逻辑未做帧率同步与下限限制:原代码未将消耗值乘以delta,导致消耗速度随帧率波动;且未限制value最小值为0,可能出现负数干扰判断。
  2. Player冲刺判断条件不够精准:原判断stamina >=1会遗漏0 < stamina <1的情况,且当stamina归零时,可能因节点更新顺序问题导致判断不及时。

修复步骤

1. 修正Stamina.gd的 stamina 处理逻辑

func _process(delta):
    if Input.is_action_pressed("Shift"):
        # 乘以delta保证跨帧率消耗速度一致,同时限制最小值为0
        value = max(value - 0.505 * delta, 0)

func _on_timer_timeout():
    # 限制最大值为100,避免 stamina 溢出
    if value < 100:
        value = min(value + 1, 100)

2. 调整Player.gd的冲刺判断逻辑

# 提前获取Stamina节点引用,提升性能与稳定性
@onready var stamina_control = $"../../Control"

func _process(delta):
    var current_stamina = stamina_control.stamina
    # 仅当Shift按住且stamina大于0时允许冲刺
    if Input.is_action_pressed("Shift") and current_stamina > 0:
        SPEED = sprintspeed
    else:
        SPEED = 5

额外优化建议

给Stamina的value添加属性限制,避免异常值:

@export var value: float = 100 setget set_stamina_value

func set_stamina_value(new_value: float):
    # 强制将stamina限制在0-100区间内
    value = clamp(new_value, 0, 100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:02:40