1 播放逻辑调整

编辑器上取消勾选active,脚本里加上

1
2
func _ready() -> void:
animation_tree.active=true

这样只有在游戏开始时才播放,不会一直播放

2 添加攻击动画

1 添加4方向攻击动画和动画树BlendSpace2D

image-20240602162004385

2 给攻击加上混合位置

1
animation_tree.set("parameters/Attack/blend_position",input_vector)

3 使用状态机控制玩家动作

加入枚举

1
2
3
4
5
6
enum {
MOVE,
ATTACK
}

var state = MOVE

动作状态交给状态机控制

1
2
3
4
5
6
7
8
9
10
11
func _physics_process(delta: float) -> void:

match state:
MOVE:
move_state(delta)

ATTACK:
attack_state(delta)

......
#原来的移动代码

4 加入攻击动作

1 项目设置里添加输入映射

image-20240602170346062

2 调用攻击

1
2
3
4
5
6
	#调用攻击的逻辑
if Input.is_action_just_pressed("attack"):
state = ATTACK

func attack_state(delta):
animationState.travel("Attack")

5 逻辑完善

但这样会一直处于攻击状态,在动画调用完后,将状态切换回MOVE

image-20240602182734978

给所有攻击动画都设置上,但还有个问题,攻击时继承了运动时的初速度,消除它

1
2
3
4
func attack_state(delta):
# 清除记忆的速度
velocity = Vector2.ZERO
animationState.travel("Attack")