如何在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
相关产品推荐
相关产品推荐

