千里之行,始于足下
零、 笔记
制作浇水后,开始随着时间不断成长的小麦,并产生掉落物,如下图所示;
一、小麦
第一步,在 res://scenes/物品/ 路径 下,以小麦( Sprite2D )为根节点创建 小麦.tscn 场景;
节点树如下:
- 小麦(Sprite2D)
- 受击组件(场景实例):详见 Godot4.3类星露谷游戏开发之【可砍伐的树】
- CollisionShape2D)
- 受击组件(场景实例):详见 Godot4.3类星露谷游戏开发之【可砍伐的树】
第二步,选中 小麦(Sprite2D) 节点,从路径 res://assets/Sprout Lands - Sprites - Basic pack/Objects/ 导入 Basic_Plants.png ,并更改 Animation 参数以选中 发芽的小麦 ;
2D中效果如下:
第三步,选中 CollisionShape2D 节点,在检查器中新建 RectangleShape 长方形区域,并在2D中调整至合适大小;
二、生长组件
第一步,在 res://scenes/组件/ 路径 下,以 生长组件(Node) 为根节点,创建 生长组件.tscn 场景;
第二步,选中 生长组件(Node) 节点附加脚本 ;
extends Node
## 作物生长
## 使得农作物随着时间不断切换Sprite2D图片的frame属性
signal 作物成熟
signal 阶段变更
enum 生长阶段 {
种子,
发芽,
成长,
生育,
成熟,
收获,
}
@export var 当前生长阶段: 生长阶段 = 生长阶段.发芽
var 开始时间: int = 0
var 已浇水: bool = false
func _ready() -> void:
TimeManager.游戏格式化时间更新.connect(植物生长)
# 经过天数决定植物生长阶段
func 植物生长(时间数组: Array[int]) -> void:
if not 已浇水 :
return
if 开始时间 == 0:
开始时间 = 时间数组[0]
当前生长阶段 = 生长阶段.发芽
var 经过时间: int = 时间数组[0] - 开始时间
var 当前阶段索引: int = 经过时间 + 1
var 新阶段 = 生长阶段.values()[当前阶段索引]
if 新阶段 != 当前生长阶段:
当前生长阶段 = 新阶段
阶段变更.emit()
if 当前生长阶段 == 生长阶段.收获:
作物成熟.emit()
第三步,回到 小麦.tscn 场景,将 生长组件.tscn 作为其场景实例;
三、掉落的麦子
第一步,在路径 res://scenes/物品/ 下,以 麦子(Sprite2D) 为根节点,新建 麦子.tscn 场景如下;
节点树如下:
- 麦子(Sprite2D)
- 可收集组件(场景实例):详见 Godot4.3类星露谷游戏开发之【可收集物品】
- CollisionShape2D
- 可收集组件(场景实例):详见 Godot4.3类星露谷游戏开发之【可收集物品】
第二步,选中 麦子(Sprite2D) 节点,在检查器中新建 AtlasTexture 并编辑区域,选取 麦子果实 ;
2D中效果如下:
第三步,选中 CollisionShape2d 节点,在检查器中新建 CircleShape 并在2D中调整至合适大小;
四、搭建测试环境
第一步,将路径 res://scenes/测试/ 下的 测试_昼夜循环.tscn 复制为 测试_生长的小麦.tscn ;
第二步,变更根节点名称为 测试_生长的小麦 ,添加 小麦.tscn场景实例至合适位置,并删除 昼夜循环组件 节点;
五、测试
运行 测试_生长的小麦 场景,测试浇水后小麦的生长;
测试完成!
六、免费开源资产包
-
进入链接后点击下图按钮;
-
然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载);
-
最后点击下图按钮完成下载(注意导入前需解压缩)。