godot2D游戏教程系列一(6)

  • 前言:
      • 我们到主场景移动玩家节点,观察屏幕边界的x轴坐标
      • 然后我们到史莱姆的脚本中添加判断,如果史莱姆的移动世界坐标x坐标小于-254的时候就删除掉这个史莱姆节点(因为史莱姆是水平向左移动的,所以x轴坐标会越来越小)
      • 如何检查史莱姆被子弹打到了呢?我们在史莱姆场景的右侧的节点面板找到area_entered信号事件,这个是检测area的碰撞,上一个我们之前做的信号事件是检查body的碰撞,而我们的子弹是area所以我们这里的信号事件是检查area的碰撞
      • 我们还需要区别史莱姆和子弹场景,因为这2个都是area,如果不做区分就会导致其他史莱姆互相碰撞的消亡。我们使用到godot的分组group功能
      • 我们先来到子弹场景的右侧节点面板的分组面板
      • 我们新建一个名为bullet的子弹场景分组
      • 然后我们就可以在代码里面写area碰撞是否是子弹场景的,然后呢播放史莱姆死亡动画,因为我们这里史莱姆播放死亡动画是只有一次的,所以我们可以不用创建一个变量去进行播放,我们可以直接拖拽史莱姆场景的动画精灵节点到代码里面去使用,但是这个是基于名称而存在的,所以很方便也很脆弱,你名字一改,那么这个动画播放代码就失效
      • 然后这里史莱姆死亡之后动画还在播放,于是我们就需要,当史莱姆死亡的时候就不能播放动画了,所以我们还需要判断一个变量就是,史莱姆是否已经死亡,以及死亡之后需要消毁节点不再重复播放动画
      • 当我们打中史莱姆的时候,史莱姆被子弹摧毁了,但是我们子弹也要被摧毁(当然我们优化可以给子弹加什么特殊效果比如说贯穿,这样子就不用设置销毁了)
      • 然后我们需要源源不断的生成史莱姆敌人,每隔一段时间生成,我们可以和生成子弹一样使用timer也可以使用新建一个GameManager游戏管理器我们在主场景添加一个新的代码脚本
      • 然后我们在主场景下添加一个timer节点
      • 这个时间节点我们设置wait time为3秒,这样子就是每3秒生成一个史莱姆,然后我们需要注意要勾选下方的那个Autostart,这样子在游戏开始时候自动启动
      • 然后我们到timer节点的信号面板选择time out信号事件新建函数,重命名为_spawn_slime,记得这个函数要在GameManager这个脚本代码里面进行创建
      • 然后我们需要获取到史莱姆场景,所以我们新建一个变量去获取它,然后进行设置
      • 然后我们需要先创建史莱姆场景保存到临时变量,然后生成出来在一个范围的y轴上随机生成出来,然后链接到主场景树中,显示出来

      • 然后我们做进一步的优化,让史莱姆的生成速度根据游戏时间的流逝进行加快,每过1秒倒计时减少0.2秒并且最低生产速度设置为1秒,记得要在检查器中设置好timer变量哦

      • 补丁:源源不断的史莱姆怪物,需要进行删除,不然会造成卡顿,我们使用另外一种方案,检测史莱姆的坐标,如果史莱姆的坐标超过屏幕范围就进行摧毁

      • 我们先来到史莱姆的场景,找到它的动画精灵节点,添加新动画,设置为12帧并且关掉循环播放

      • 实现史莱姆死亡动画

      • 实现过程:

      • 首先为史莱姆添加死亡动画:在史莱姆场景的 ​​AnimatedSprite2D​​ 中创建新的死亡动画,设置为 12 帧并关闭循环播放,确保动画仅在死亡时执行一次。

      • 随后实现子弹命中判定:由于子弹与史莱姆均为 ​​Area2D​​,通过史莱姆的 ​​area_entered​​ 信号检测碰撞。为避免史莱姆之间互相触发,使用 Godot 的分组(Group)机制,将子弹场景加入 ​​bullet​​ 分组,在代码中仅对来自子弹分组的碰撞做出响应。命中后播放死亡动画,并通过死亡状态变量防止重复触发;同时在击中时销毁子弹节点。

      • 接着实现史莱姆的持续生成:在主场景中创建 ​​GameManager​​ 脚本并添加 ​​Timer​​ 节点,设置自动启动,每隔固定时间实例化一个史莱姆。通过预加载史莱姆场景,在指定范围内随机生成其位置并加入场景树。进一步根据游戏时间动态缩短生成间隔,并设置最小生成时间上限,以逐步提升游戏难度。

      • 最后进行性能优化:为防止史莱姆无限累积导致卡顿,在史莱姆脚本中检测其世界坐标,当史莱姆移动到屏幕外(X 坐标小于指定阈值)时自动销毁节点,确保场景中敌人数量始终可控。

      • 完成目标

      • 我是根据b站上的视频进行学习,并且总结写下笔记,然后做此分享。笔记非常详细以至于你可以通过查看文章进行快速学习并且制作出游戏出来。当然视频学习的链接我也放在下面了:

      • 视频学习:https://www.bilibili.com/video/BV1fuCrYFEoG?spm_id_from=333.788.videopod.sections\&vd_source=078d5d025b9cb472d70d8fda1a7dc5a6

      • 制作完成的成果,可以点击进去进行在线游玩:https://yunbiansanbu.itch.io/my-frist

      • 音频/美术资源包下载:https://pan.quark.cn/s/570e6714e5ea

相关推荐
hssfscv2 小时前
Javaweb学习笔记——后端实战6登录功能1
笔记·后端·学习
Yu_Lijing2 小时前
基于C++的《Head First设计模式》笔记——组合模式
c++·笔记·设计模式·组合模式
Engineer邓祥浩2 小时前
设计模式学习(17) 23-15 访问者模式
学习·设计模式·访问者模式
好奇龙猫2 小时前
【日语学习-日语知识点小记-日本語体系構造-JLPT-N2前期阶段-第一阶段(6):单词语法】
学习
举手2 小时前
UDP Echo Server(学习版)
linux·服务器·网络·网络协议·学习·udp
恋猫de小郭2 小时前
Meta ShapeR :基于随机拍摄视频的 3D 物体生成,未来的 XR 和机器人基建支持
android·flutter·3d·ai·音视频·xr
YCL大摆子2 小时前
Agent学习——1 day
学习
ouliten2 小时前
C++笔记:std::tuple
c++·笔记
炽烈小老头2 小时前
【每天学习一点算法 2026/01/20】汉明距离
学习·算法