godot2D游戏教程系列二(14)

前言:

完成目标:

实现草丛"外观随机 + 动画速度随机",让每一片草看起来更自然。


一、随机动画速度

  • 在 Tween 动画代码中加入速度比例参数
  • 每个草丛实例生成时随机一个速度值
  • 让摇摆快慢不同

效果:草丛不再同步晃动,更真实。


二、随机草丛外观

  • 给 Sprite2D 单独添加脚本 random_region
  • 使用 Rect2(位置 + 大小)控制显示区域
  • 创建一个 Rect2 数组,作为候选草丛区域
  • 在检查器中添加 3 个元素
  • 设置大小统一为 48×32
  • 分别填写三个草丛在素材图中的位置
  • 运行时随机选一个 Rect2
  • 赋值给 region_rect 属性

效果:每个草丛都会随机显示不同样式。


三、控制出现概率

  • 想让第一种草更多出现
  • 就在数组里多添加几个相同的 Rect2
  • 等于提高它被选中的概率

四、固定随机结果(可选)

  • 设置随机数种子(seed)
  • 每次运行生成相同草丛分布

最终效果:

  • 草丛外观随机
  • 摇摆速度不同
  • 可以控制出现比例
  • 可选择固定或完全随机

草地从"复制粘贴感"升级为"自然生态感"。

实现过程

  • 我们来实现随机化草丛的外观,不同的外观和不同的动画速度比例,然后我们来到草丛场景的脚本代码中。
  • 我们在我们的补间动画那里加行代码控制草丛摇晃速度的比例
  • 我们随机从这前三片中选取一片作为草丛的外观
  • 我们专门给2d精灵节点添加一个新的脚本代码,把脚本重命名为random_region
  • 怎么改呢?这里就要用到我们的rect属性,这个rect属性的类型叫做rect2,它内部封装了两个vector2值,第一个vector2用于表示位置,第二个vector2用于表示大小,我们编辑区域的时候这个rect就会做记录。这样我们就可以创建一个rect2数组,用于多个草地的候选区。然后我们可以随机选择其中一个,并将其分配给sprite2d节点的rect属性
  • 我们在代码中创建这个数组然后公开到检查器中,并且在检查器中进行创建3个元素
  • 然后我们的草丛区域是48*32所以就通通修改大小
  • 然后针对三个草丛的不同位置进行修改
  • 小提示,我们鼠标悬停到检查器的属性就可以看到那个属性在脚本代码中的实际名称是什么,比如说这个rect属性的实际名称是region_rect
  • 然后我们创建一个赋值的代码。将这个rect属性进行赋值组内随机的一个草丛外观
  • 然后我们在使用游戏启动时候进行设置
  • 然后我们希望默认的第一个草丛占据大多数,我们就可以将数组再增加2个元素,然后这2个元素也设置为默认第一个草丛的参数就好了
  • 然后我们希望每次都能生成相同的草丛就需要我们,为随机数生成过程设置固定的种子值
相关推荐
喜欢打篮球的普通人44 分钟前
MiniMind 学习笔记(十八):速通强化学习——从 MDP 到 PPO 的概念与算法地图
笔记·深度学习·学习
志尊宝1 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记
老王爱玩车2 小时前
动态内存管理
c语言·开发语言·学习·面试
海绵宝宝转agent2 小时前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi0112 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
yi0112 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
北风toto3 小时前
数据库笔记:Armstrong 公理系统与集合论的深度辨析
数据库·笔记
EasyBr指纹浏览器3 小时前
我的开源项目:小红书笔记归档,把来源和缺项一起留下
笔记·小红书·开源工具·素材管理·内容归档
海海不掉头发3 小时前
图论及其应用_课堂笔记整理_CSDN博客
笔记·图论
志尊宝3 小时前
Vue3 零基础每日笔记(075):图片懒加载与骨架屏
javascript·vue.js·笔记