Godot开发框架探索#2
前言
距离上次发文又又又隔了很长一段时间。主要原因还是因为思绪在徘徊,最近纠结的点有以下几个: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的场景管理,因为节点这一设计,导致不能简单粗暴地直接给游戏“翻个面”,不过我还是把翻个面的功能加上了,其实就是切换场景时把所有场景树的子节点都释放掉,然后再加载新的场景,除了一些设计上作为“全局”的节点之外。
结语
其实好像也没有多少好说的,本来以为能多编一些,但是想说的都在源码里了。那个开源项目后面大概率会被归档,因为它的定位不太清楚,我打算等有想法了做一个更框架一点的框架,把功能细化优化。这里更多地应该是收拾收拾心路历程。
其实优柔寡断真的什么都做不了,每个引擎或框架都有自己的优缺点,而且游戏开发重点在人而非工具,与其纠结用哪个工具不如纠结游戏的玩法。
相关文章:
Godot开发框架探索#2
前言 距离上次发文又又又隔了很长一段时间。主要原因还是因为思绪在徘徊,最近纠结的点有以下几个:1.渴求一个稳定的Godot开发框架;2.要不要使用更轻量的开发框架,或者直接写引擎; 3.对自己想做的游戏品类拿不定主意。…...
deepseek实现私有知识库
前言 之前写了如何本地部署deepseek,已经可以私有化问答了,本地搭建deepseek实操(ollama搭建,docker管理,open-webui使用) 其中我觉得最厉害的还是这个模型蒸馏,使我们可以用很低的代价使用大模…...
2.10学习总结
Dijkstra算法求取最短路径 注:迪杰斯特拉算法并不能直接生成最短路径,但是算法将最短路径信息保存在dist数组和path数组中。 dist数组中保存的是起始点到数组下标对应顶点的路径长度(累加的结果)path数组中保存的是对应path数组…...
【探索未来科技】2025年国际学术会议前瞻
【探索未来科技】2025年国际学术会议前瞻 【探索未来科技】2025年国际学术会议前瞻 文章目录 【探索未来科技】2025年国际学术会议前瞻前言1. 第四届电子信息工程、大数据与计算机技术国际学术会议( EIBDCT 2025)代码示例:机器学习中的线性回…...
pytest.fixture
pytest.fixture 是 pytest 测试框架中的一个非常强大的功能,它允许你在测试函数运行前后执行一些设置或清理代码。以下是关于 pytest.fixture 的详细介绍: 一、定义与用途 pytest.fixture 是一个装饰器,用于标记一个函数为 fixture。Fixture 函数中的代码可以在测试函数运…...
大模型基本原理(四)——如何武装ChatGPT
传统的LLM存在几个短板:编造事实、计算不准确、数据过时等,为了应对这几个问题,可以借助一些外部工具或数据把AI武装起来。 实现这一思路的框架包括RAG、PAL、ReAct。 1、RAG(检索增强生成) LLM生成的内容会受到训练…...
开发完的小程序如何分包
好几次了,终于想起来写个笔记记一下 我最开始并不会给小程序分包,然后我就各种搜,发现讲的基本上都是开发之前的小程序分包,可是我都开发完要发布了,提示我说主包太大需要分包,所以我就不会了。。。 好了…...
java配置api,vue网页调用api从oracle数据库读取数据
一、主入口文件 1:java后端端口号 2:数据库类型 和 数据库所在服务器ip地址 3:服务器用户名和密码 二、映射数据库表中的数据 resources/mapper/.xml文件 1:column后变量名是数据库中存储的变量名 property的值是column值的…...
iOS三方登录 - Facebook登录
引言 在出海APP的开发中,集成主流社交平台的三方登录已成为必不可少的一环。Facebook 作为全球最大的社交网络平台之一,其提供的 Facebook 登录功能能够大大简化用户注册和登录流程,提高用户体验,减少流失率。对于开发者而言&…...
使用 OpenGL ES 渲染一个四边形
使用 OpenGL ES 渲染一个四边形 在 iOS 开发中,OpenGL ES 是一个强大的工具,用于实现高性能的 2D 和 3D 图形渲染。本文将通过一个完整的代码示例,详细解析如何使用 OpenGL ES 渲染一个简单的四边形。我们将从基础概念入手,逐步讲解代码的每个部分,帮助你理解 OpenGL ES …...
机器学习 - 理解偏差-方差分解
为了避免过拟合,我们经常会在模型的拟合能力和复杂度之间进行权衡。拟合能力强的模型一般复杂度会比较高,容易导致过拟合。相反,如果限制模型的复杂度,降低其拟合能力,又可能会导致欠拟合。因此,如何在模型…...
深入解析 Android 系统属性 跨进程 API:SystemProperties、ContentObserver 的使用
基础篇.系统属性 & 跨进程 API 📢 1. 职业规划篇 来聊聊安卓职业规划?整机开发大专能做么? 📢 2.基础篇 基础篇.前言 基础篇.编译环境搭建 基础篇.源码目录简介 基础篇.系统 mk_bp 讲解 基础篇.开机动画定制 基础篇.定制桌面壁…...
从 .NET Framework 升级到 .NET 8 后 SignalR 问题处理与解决方案
随着 .NET Framework 向 .NET 8 的迁移,许多开发者在使用 SignalR 时遇到了一些前后端连接、配置、调用等方面的问题。尤其是在处理 SignalR 实时通信功能时,升级后的一些兼容性问题可能导致应用程序无法正常工作。本文将介绍在从 .NET Framework 升级到…...
深入解析 Linux 系统中 Cron 定时任务的配置与管理
在 Linux 和类 Unix 系统中,cron 是一个非常强大的工具,用于定时执行各种任务,例如自动备份、定时运行脚本和定期清理日志文件。通过合理配置 cron,你可以让很多系统维护任务自动化,从而减轻日常管理的压力。而 cronta…...
深度学习01 神经网络
目录 神经网络 感知器 感知器的定义 感知器的数学表达 感知器的局限性 多层感知器(MLP, Multi-Layer Perceptron) 多层感知器的定义 多层感知器的结构 多层感知器的优势 偏置 偏置的作用 偏置的数学表达 神经网络的构造 神经网络的基本…...
ffmpeg基本用法
一、用法 ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... 说明: global options:全局选项,应用于整个 FFmpeg 进程,它们通常不受输入或输出部分的限制。 infile options:输入选…...
强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略
目录 一、引言二、强化学习基础回顾(一)策略(二)价值函数 三、近端策略优化(PPO)算法(一)算法原理(二)PPO 目标函数(三)代码示例&…...
【HDSF】ProtobufRpcEngine 和 ProtobufRpcEngine2
ProtobufRpcEngine2的call方法实现如下,它对历史版本的protobuf实现进行了兼容。 即同时支持protobuf 2.5.0 和protobuf 3.x版本的RPC通信。 看下具体是怎么实现的? @SuppressWarnings("deprecation")protected Writable call(RPC.Server server, String connecti…...
Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
1、提前设置热点数据永不过期 2、分布式中用redis分布式锁(锁可以在多个 JVM 实例之间协调)、单体中用synchronized(锁只在同一个 JVM 内有效) 编写服务类 import com.redisson.api.RLock; import com.redisson.api.RedissonCli…...
IntelliJ IDEA 安装与使用完全教程:从入门到精通
一、引言 在当今竞争激烈的软件开发领域,拥有一款强大且高效的集成开发环境(IDE)是开发者的致胜法宝。IntelliJ IDEA 作为 JetBrains 公司精心打造的一款明星 IDE,凭借其丰富多样的功能、智能精准的代码提示以及高效便捷的开发工…...
自动化xpath定位元素(附几款浏览器xpath插件)
在 Web 自动化测试、数据采集、前端调试中,XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大,但面对复杂 DOM 结构时,XPath 仍然更具灵活性。因此,掌握 XPath,不仅能提高自动化测试的稳定性,还能在爬…...
PromptSource官方文档翻译
目录 核心概念解析 提示模板(Prompt Template) P3数据集 安装指南 基础安装(仅使用提示) 开发环境安装(需创建提示) API使用详解 基本用法 子数据集处理 批量操作 提示创建流程 Web界面操作 手…...
2025年软件测试五大趋势:AI、API安全、云测试等前沿实践
随着软件开发的不断进步,测试方法也在演变。企业需要紧跟新兴趋势,以提升软件质量、提高测试效率,并确保安全性,在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…...
js的DOM一遍过
一、获取元素 1.根据id获取 document.getElementById(id);2.根据标签名获取 使用 getElementsByTagName() 方法可以返回带有指定标签名的对象的集合。 document.getElementsByTagName(标签名);获取某个元素(父元素)内部所有指定标签名的子元素。 element.getElementsByTag…...
Machine Learning:Introduction
文章目录 Machine LearningTrainingStep 1.Contract Function with Unknown ParametersStep 2.Define Loss from Training DataStep 3.Optimization Linear ModelPiecewise Linear CurveBeyond Piecewise Liner?FunctionLossOptimization Model Deformation Machine Learning …...
Excel 笔记
实际问题记录 VBA脚本实现特殊的行转列 已知:位于同一Excel工作簿文件中的两个工作表:Sheet1、Sheet2。 问题:现要将Sheet2中的每一行,按Sheet1中的样子进行转置: Sheet2中每一行的黄色单元格,为列头。…...
基于 GEE 利用插值方法填补缺失影像
目录 1 完整代码 2 运行结果 利用GEE合成NDVI时,如果研究区较大,一个月的影像覆盖不了整个研究区,就会有缺失的地方,还有就是去云之后,有云量的地区变成空值。 所以今天来用一种插值的方法来填补缺失的影像…...
如何设置爬虫的IP代理?
在爬虫开发中,设置IP代理是避免被目标网站封禁、提升爬取效率和保护隐私的重要手段。以下是设置爬虫IP代理的详细方法和注意事项: 一、获取代理IP 免费代理IP: 可以通过一些免费的代理IP网站获取代理IP,但这些IP的稳定性和速度通…...
如何在浏览器中搭建开源Web操作系统Puter的本地与远程环境
文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 前言 嘿,小伙伴们!是不是每次开机都要像打地鼠一样不停地点击各种网盘和应用程序的登录按钮,感觉超级麻烦?更让…...
使用EVE-NG-锐捷实现单臂路由
一、基础知识 1.三层vlan vlan在三层环境中通常用作网关vlan配上ip网关内部接口ip 2.vlan创建步骤 创建vlan将接口划分到不同的vlan给vlan配置ip地址 二、项目案例 1、项目拓扑 2、项目实现 PC1配置 配置PC1IP地址为192.168.1.10/24网关地址为192.168.1.1 ip 192.168.1…...
