千里之行,始于足下
零、 笔记
实现玩家角色工具切换,按下U、I、O后,分别执行砍树、浇水、锄地等动作。
一、创建工具动画
第一步,选中玩家1.tscn场景下的 AnimatedSprite2D 节点;
第二步,在底栏 SpriteFrames 从精灵表添加帧,并找到 res://资产/Sprout Lands - Sprites - Basic pack/Characters 路径下的精灵表,以创建 砍树、浇水、锄地 动画;
二、角色控制逻辑
第一步,在 项目->项目设置->输入映射 中,为砍树、浇水、锄地分别绑定U,I,O键盘键位;
第二步,选中玩家1.tscn场景下的 玩家1 节点,更新脚本;
extends CharacterBody2D
const 速度 = 80.0
var 玩家方向 : Vector2 = Vector2.DOWN # 默认朝向下方
var 工具启用 := false # 正在使用工具的标志
@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D
func _ready():
# 连接动画结束信号
animated_sprite_2d.animation_finished.connect(_on_animation_finished)
func _physics_process(delta: float) -> void:
if 工具启用:
velocity = Vector2.ZERO # 使用工具时停止移动
move_and_slide()
return
# 正常移动逻辑
var 向量 = Input.get_vector("左", "右", "上", "下")
处理动画(向量)
velocity = 速度 * 向量
move_and_slide()
# 检测工具按键(U=砍树,I=浇水,O=锄地)
if Input.is_action_just_pressed("砍树"):
使用工具("砍树")
elif Input.is_action_just_pressed("浇水"):
使用工具("浇水")
elif Input.is_action_just_pressed("锄地"):
使用工具("锄地")
func 处理动画(向量: Vector2):
# 更新玩家朝向
if 向量 != Vector2.ZERO:
玩家方向 = 向量
# 根据方向设置动画
var 方向后缀 = 获取方向后缀()
if 向量 != Vector2.ZERO:
animated_sprite_2d.play("行走" + 方向后缀)
else:
animated_sprite_2d.play("空闲" + 方向后缀)
func 使用工具(action: String):
if 工具启用:
return
# 构建动画名称(例如:"砍树_下")
var anim_name = action + 获取方向后缀()
if animated_sprite_2d.sprite_frames.has_animation(anim_name):
工具启用 = true
animated_sprite_2d.play(anim_name)
func 获取方向后缀() -> String:
# 根据最后朝向返回方向后缀
if 玩家方向.x > 0: return "_右"
if 玩家方向.x < 0: return "_左"
if 玩家方向.y > 0: return "_前"
return "_后" # 默认朝向下方
func _on_animation_finished():
# 当动作动画播放完毕时恢复状态
工具启用 = false
# 保持最后朝向的静止动画
animated_sprite_2d.play("空闲" + 获取方向后缀())
三、测试
打开 测试_基本地形 场景,运行场景,测试工具使用;
测试完成!
四、免费开源资产包
某开源网站精灵图资源包链接: 点击此处
-
进入链接后点击下图按钮
-
然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载)
-
最后点击下图按钮完成下载(注意导入前需解压缩)