Godot开发框架探索#2

devtools/2025/2/12 0:18:49/

前言

        距离上次发文又又又隔了很长一段时间。主要原因还是因为思绪在徘徊,最近纠结的点有以下几个:1.渴求一个稳定的Godot开发框架;2.要不要使用更轻量的开发框架,或者直接写引擎;

3.对自己想做的游戏品类拿不定主意。

        先说第一个,出于个人强迫症要挟,开发时希望能有一个规范的蓝本可以按部就班,这样做起来才会安心。但是现在觉得游戏开发没有什么定式,更不应该按部就班;第二点,尝试了很多遍其他轻量级开发框架后,比如FNA,甚至直接SDL写起,发现非常折磨,更别说写引擎;加上第三点,我认为每个游戏开发者能找到最适合自己的游戏品类最好不过,而个人自研引擎最好按照特定的游戏品类设计,否则很难找出与市面上现存的通用引擎相比的优势,这样一来反而浪费精力。在几番周转后又又又回到了Godot。

        上面说的跟这篇文章谈论的内容其实一点关系没有。这里我将分享最近尝试实现的一些关于Godot开发的想法,它们一部分已经被我整理成了Godot插件:

MOWEIII/GoDogKit: Classes Library used for Godot C#.https://github.com/MOWEIII/GoDogKit        感兴趣的可以看看,虽然目前不太完善,我稍后会解释为什么。

又是全局?

        我设计全局类的初衷其实只是为了简化开发速度,比如有一个AudioStream,它作为一种资源类型,需要相关节点才能作用,也就是AudioStreamPlayer,所以我就有了这种想法:既然这种资源很大概率只会用于对应的某种节点,那么可不可以简化创建节点到赋值资源这个过程。虽然这个过程确实是非常简单,但是在多次实践中,发掘零散的节点管理同样也会引发一些问题,除了这里的音频之外,还有一个重灾区就是输入,如果只是简单地在每个节点的输入处理函数中编写输入逻辑,那么很容易造成难以发现的混乱,比如需要同时处理UI输入逻辑和玩家移动逻辑的情况,如果游戏暂停,玩家移动也暂停,但因为节点的层次结构问题,UI没有被暂停,所以需要对处理输入的节点更加关注。这样一来,全局输入节点似乎是好的选择,不过我也还在思考怎么样实现。

场景管理

        Godot有些东西藏得确实隐晦,文档中也说不了那么详细,又或许是我理解有误,场景切换就是一个小坑。那几个Godot的场景切换API其实都是针对场景树的“当前场景CurrentScene”而言的,换句话说所谓的切换场景其实只是把当前场景释放掉,然后添加新的那个场景,乍一看没什么问题,但是一旦把节点置于那个“当前场景”之外,切换时就不会释放了。

        因为使用Unity的习惯,总觉得切换场景是非常干净利落的,可以很好释放资源。但是在Godot中仅仅只是释放某个特殊一点的节点,而非整个场景树。这就造成了一些可能的小问题,比如什么不小心把一些节点添加到场景树根目录,然后切换场景后发现它们还在。

        所以也许是我误会了Godot的场景管理,因为节点这一设计,导致不能简单粗暴地直接给游戏“翻个面”,不过我还是把翻个面的功能加上了,其实就是切换场景时把所有场景树的子节点都释放掉,然后再加载新的场景,除了一些设计上作为“全局”的节点之外。

结语

        其实好像也没有多少好说的,本来以为能多编一些,但是想说的都在源码里了。那个开源项目后面大概率会被归档,因为它的定位不太清楚,我打算等有想法了做一个更框架一点的框架,把功能细化优化。这里更多地应该是收拾收拾心路历程。

        其实优柔寡断真的什么都做不了,每个引擎或框架都有自己的优缺点,而且游戏开发重点在人而非工具,与其纠结用哪个工具不如纠结游戏的玩法。


http://www.ppmy.cn/devtools/158062.html

相关文章

基于Spring Boot的历史馆藏系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

十四. Redis 新功能

十四. Redis 新功能 文章目录 十四. Redis 新功能1. ACL2. IO多线程3. 工具支持 Cluster4. 其它新功能-介绍5. 最后: 1. ACL ACL 参考官网:https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ ACL 基本介绍: Re…

ArrayList和LinkedList有什么区别?在什么情况下使用ArrayList更高效?

ArrayList和LinkedList在Java中是两种常用的数据结构,分别基于数组和链表实现。它们在性能、内存使用和适用场景上各有特点。 ArrayList与LinkedList的主要区别 数据结构: ArrayList:基于动态数组实现,元素存储在连续的内存空间…

矩阵NFC碰一碰发视频的源码技术开发攻略,支持OEM

引言 在短视频与营销深度融合的当下,矩阵碰一碰发视频功能为商家的营销推广带来了新的活力。通过简单的碰一碰操作,就能快速发布视频到多个平台,极大地提高了营销效率。本文将深入剖析矩阵碰一碰发视频的源码技术开发,带你一步步…

【R】Dijkstra算法求最短路径

使用R语言实现Dijkstra算法求最短路径 求点2、3、4、5、6、7到点1的最短距离和路径 1.设置data,存放有向图信息 data中每个点所在的行序号为起始点序号,列为终点序号。 比如:值4的坐标为(1,2)即点1到点2距离为4;值8的坐标为(6,7)…

前端开发架构师Prompt指令的最佳实践

前端开发架构师Prompt 提示词可作为系统提示词使用,可基于用户的需求输出对应的编码方案。 本次提示词偏向前端开发的使用,如有需要可适当修改关键词和示例。 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 (1)OSPFv2 验证的类型和意义。 (2)配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 (3)配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

Repo vs Git:区别与优缺点

repo 和 git 是两个不同的工具,但 repo 是基于 git 之上的 多仓库管理工具,适用于需要管理 多个 Git 仓库的项目。 1. Repo 和 Git 的区别 特性GitRepo作用版本控制系统,用于管理单个代码仓库基于 Git 的多仓库管理工具,适用于大…