Godot4.3类星露谷游戏开发之【工具切换】

千里之行,始于足下

零、 笔记

实现玩家角色工具切换,按下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("空闲" + 获取方向后缀())

三、测试

打开 测试_基本地形 场景,运行场景,测试工具使用;

测试
测试完成!

四、免费开源资产包

某开源网站精灵图资源包链接: 点击此处

  1. 进入链接后点击下图按钮
    下载

  2. 然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载)
    No thanks,just take me to the downloads

  3. 最后点击下图按钮完成下载(注意导入前需解压缩)
    下载