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

如何在GODOT 2D像素游戏中实现点击触发多段普攻动作?

2D像素游戏多段连击攻击实现思路(Godot)

核心逻辑:通过连击计数、输入窗口控制、动画状态同步实现分段攻击


1. 基础状态管理

  • 用current_combo变量记录当前连击段数,初始值为0,上限设为你需要的最大连段数(比如3)
  • 添加连击重置计时器:每次触发攻击后启动计时器,若超出设定时长(比如0.5秒)未收到下一次攻击输入,就将current_combo重置为0
  • 用can_combo变量控制输入有效性:仅当角色处于可连击窗口时,才响应下一次攻击输入

2. 动画与输入绑定

  • 为每段攻击制作独立动画(如attack_1、attack_2、attack_3),并在动画中标记连击窗口帧(比如攻击动作挥出后的帧,允许玩家点击续连)
  • 通过AnimationPlayer播放动画,同时绑定动画信号:
    • 当动画播放到连击窗口帧时,将can_combo设为true
    • 当最后一段攻击动画结束时,关闭can_combo并启动重置计时器

3. GDScript代码示例

# 核心变量定义
var current_combo = 0
var max_combo = 3
var can_combo = true
@onready var anim_player = $AnimationPlayer
@onready var combo_reset_timer = $Timer  # 计时器时长建议设为0.5秒左右

# 监听攻击输入
func _input(event):
    if event.is_action_pressed("attack") and can_combo:
        current_combo = min(current_combo + 1, max_combo)
        play_combo_animation()
        combo_reset_timer.start()  # 重置连击计时

# 根据连击数播放对应动画
func play_combo_animation():
    can_combo = false  # 攻击启动时暂时关闭输入,直到连击窗口开启
    match current_combo:
        1:
            anim_player.play("attack_1")
        2:
            anim_player.play("attack_2")
        3:
            anim_player.play("attack_3")

# 动画信号回调:攻击1进入连击窗口
func _on_attack_1_combo_window():
    can_combo = true

# 动画信号回调:攻击2进入连击窗口
func _on_attack_2_combo_window():
    can_combo = true

# 动画信号回调:最后一段攻击结束
func _on_attack_3_finished():
    can_combo = false
    combo_reset_timer.start()

# 计时器超时回调:重置连击状态
func _on_combo_reset_timer_timeout():
    current_combo = 0
    can_combo = true

4. 进阶优化

  • 改用AnimationTree管理动画状态:通过状态机设置各攻击段的过渡条件(如输入触发+可连击状态),比直接调用AnimationPlayer更灵活,便于后续扩展
  • 同步攻击判定:在每段动画的伤害帧触发碰撞检测(比如Area2D检测或射线检测),确保攻击逻辑与动画帧精准同步
  • 移动与攻击的交互:根据游戏需求,可在攻击过程中限制角色移动,或允许移动但实时调整攻击方向

内容的提问来源于stack exchange,提问作者Hải Nguyễn Hoàng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:25:43