千里之行,始于足下
文章目录
- 零、 笔记
- 一、创建工具动画
- 二、角色控制逻辑
- 三、测试
- 四、免费开源资产包
零、 笔记
实现玩家角色工具切换,按下U、I、O后,分别执行砍树、浇水、锄地等动作。
一、创建工具动画
第一步,选中玩家1.tscn场景下的 AnimatedSprite2D 节点;
第二步,在底栏 SpriteFrames 从精灵表添加帧,并找到 res://资产/Sprout Lands - Sprites - Basic pack/Characters 路径下的精灵表,以创建 砍树、浇水、锄地 动画;
二、角色控制逻辑
第一步,在 项目->项目设置->输入映射 中,为砍树、浇水、锄地分别绑定U,I,O键盘键位;
第二步,选中玩家1.tscn场景下的 玩家1 节点,更新脚本;
extends CharacterBody2Dconst 速度 = 80.0var 玩家方向 : Vector2 = Vector2.DOWN # 默认朝向下方
var 工具启用 := false # 正在使用工具的标志@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2Dfunc _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):工具启用 = trueanimated_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】(不了谢谢,只想下载)
-
最后点击下图按钮完成下载(注意导入前需解压缩)