Unity 收取“运行费”引众怒,开源免费3D游戏引擎CGE(Castle Game Engine)吸引开发者关注
特征
- 1. 总结
- 2. 跨平台
- 3. 可视化编辑器
- 4.视口与场景,相机,导航和其他组件
- 5. 数据格式
- 5.1. glTF
- 5.2. X3D
- 5.3. 精灵表
- 5.4. 脊柱
- 6. 图形效果
- 7. 图片
- 8. 用户界面组件
- 8.1. 文本和字体
- 9. 网络
- 10. 优化和分析
- 11. 声音
- 12. 物理
- 13. 平铺集成
- 14. 粒子
- 15. 使用现代 Pascal 的原生和快速代码
- 16. 构建工具和持续集成
- 17. 免费开源软件
组件
定义数据的多种方法
图形效果
跨平台
干净快速的代码
开源且对持续集成友好
2. 跨平台
真正的跨平台,您可以在(几乎)任何平台上工作并编译到任何平台。
-
桌面(Linux,Windows,macOS,FreeBSD)。只需安装引擎,编译器(如FPC)并运行应用程序即可。
编辑 编辑 -
移动(Android,iOS)具有众多Android服务和iOS服务,以与特定于平台的功能集成。
编辑 编辑 -
控制台(任天堂开关)。
编辑 -
Raspberry Pi(它只是Arm CPU上的桌面Linux)。
编辑 编辑 -
即将推出(路线图):
-
Oculus (VR) (我们有硬件可以测试)
-
WebGL(FPC可以编译成WebAssembly)
-
XBox(我们有要测试的硬件)。
-
-
引擎代码是可移植的,原则上“只适用于”FPC或Delphi支持的任何操作系统和CPU。
3. 可视化编辑器
用于直观设计游戏 3D 和 2D 世界以及围绕它的用户界面的编辑器。
-
使用新项目的模板 - 空、3D、2D。它们很好地展示了发动机的可能性,并被设计为您的应用提供了一个良好的起点。
编辑 -
允许轻松构建所有平台的项目。
编辑 编辑 -
使用文件浏览器,预览数据(3D模型,图像,声音文件)。
-
使用简单的方法来执行代码编辑器(Lazarus,Visual Studio Code或任何其他您喜欢的内容)来编辑代码。
编辑 编辑 -
设计被(反)序列化为 JSON。任何组件都可以(反)序列化,以及它发布的属性。
-
设计可以使用 或 相互引用,以像其他引擎的预制件一样使用它们。请参阅示例/advanced_editor/advanced_loading_designs。
TCastleTransformDesignTCastleDesign -
您可以定义编辑器中可用的自定义项目特定组件。
4.视口与场景,相机,导航和其他组件
带有场景,相机,导航的视口允许定义3D和2D世界。
-
灵活的变换和场景层次结构,您可以在编辑器中设计,或使用强大的 OOP API 从 Pascal 代码进行控制。
编辑 -
强大的加载和渲染许多模型格式,如glTF,X3D,精灵表。
TCastleScene -
其他可见对象,如、、、。也非常适合快速制作 3D 和 2D 世界的原型。
TCastleBoxTCastleSphereTCastleTextTCastleImageTransform -
灵活的相机支持,可以有多个摄像头,将子摄像头连接到摄像头,并将摄像头作为其他对象(如骨骼)的子项放置。
-
简单的导航组件,如果您希望允许用户以标准方式在 3D 或 2D 世界中导航。这些包括典型的 2D 和 3D 导航方法(如、、)以及带有头像的第三人称导航 ()。
TCastleWalkNavigationTCastleExamineNavigationTCastle2DNavigationTCastleThirdPersonNavigation -
每个转换都可以通过行为(的后代)进行增强,例如 、 。创建特定游戏所需的行为很容易,并鼓励您创建,请参阅手册中的行为。
TCastleBehaviorTCastleBillboardTCastleSoundSource -
TCastleTransformReference以有效地多次引用相同的转换。例如,实例化数千棵树很棒。 -
使用组件的灯 , , .请参阅手册中的照明。
TCastlePointLightTCastleDirectionalLightTCastleSpotLight编辑 -
用于可视化地形 () 的组件,并从平滑噪声 () 或图像 () 或它们的组合 () 生成地形数据。请参阅示例/地形。
TCastleTerrainTCastleTerrainNoiseTCastleTerrainImageTCastleTerrainCombine编辑 编辑 编辑 编辑 编辑 -
我们的是一个2D用户界面控件,您可以自然地多次使用,以同时观察来自不同相机的相同或不同的3D / 2D世界。
TCastleViewport编辑 编辑
5. 数据格式
您可以使用各种格式来定义 3D 和 2D 数据。
5.1. glTF
我们支持来自Khronos的标准模型格式:glTF。
-
与Blender的完美集成,可以导出到glTF。
-
互联网上有很多glTF模型,例如在Sketchfab上。
-
蒙皮动画。
-
基于物理的渲染。
-
元数据支持(例如,可以来自Blender自定义属性)。
5.2. X3D
我们支持Web3D的标准模型格式:X3D和VRML。
-
支持X3D 4.0,具有基于物理的渲染以及形状,纹理,动画等的许多可能性。
-
这是一组 X3D 节点。我们实现了 X3D 节点的扩展集。
TCastleScene -
您可以构建和处理 X3D 节点的场景图。模型的程序生成,模型的任何预/后处理都是可能的。
-
我们可以将 X3D 图形保存回 X3D 格式的文件,请参见 。
TCastleSceneCore.SaveSaveNode -
您可以编写模型转换实用程序。我们的view3dscene允许将各种模型转换为X3D。
5.3. 精灵表
我们支持精灵表。
-
城堡游戏引擎(),Starling和Cocos2D格式。
.castle-sprite-sheet -
自己的精灵表编辑器,可从纹理图集直观地创建精灵表。
编辑 -
请参阅平台游戏示例 - 使用精灵表完成平台游戏。也于 itch.io 发布。
编辑
5.4. 脊柱
我们支持脊柱骨骼2D动画。
-
我们在城堡游戏引擎中有自己的Spine导入器,可以读取Spine JSON(不依赖于任何官方的Spine运行时)。
-
Spine动画和渲染功能被转换为标准引擎动画节点(与glTF和X3D使用的节点相同),因此它们在引擎中保持一致,动画交叉淡入淡出等。
-
脊椎皮肤被支持。
-
支持从各种Spine版本加载Spine JSON文件,包括Spine 4。
-
支持具有所有高级选项(例如剥离空白、旋转)的脊柱纹理图集。
-
替代方法:城堡游戏引擎的Spine运行时是加载和渲染Spine模型的替代方法。它通过将一些工作“卸载”到Spine C运行时来支持一些附加功能。
6. 图形效果
-
合成着色器以定义增强现有引擎渲染的着色器效果。请参阅示例/viewport_and_scenes/shader_effects示例。您可以使用OpenGL着色语言轻松编写自己的效果。
编辑 编辑 -
凹凸贴图(法线贴图)使用基本、视差、陡峭视差和自阴影算法。
编辑 编辑 编辑 编辑 -
动画混合/交叉淡入淡出 (, )。
TCastleSceneCore.DefaultAnimationTransitionTPlayAnimationParameters.TransitionDuration -
平面上的简易镜子。
编辑 编辑 -
Easy mirrors on curved surfaces (using generated cubemaps).
-
Physically-Based Rendering used by default for glTF and X3D 4.0 models using .
TPhysicalMaterialNode -
Alternative unlit shading also available, with glTF and X3D 4.0 models using .
TUnlitMaterialNode -
Alternative "classic" Phong shading is also available using or .
TMaterialNodeGltfForcePhongMaterials -
Shadow maps (with auto-detection of limits, correct shadows from multiple light sources).
编辑 编辑 编辑 -
阴影体积(具有z失败/ z通道自动检测,轮廓检测)。
编辑 -
屏幕效果(后期处理)API,用于使用着色器定义后期处理效果。请参阅屏幕效果规范,可以在任何 UI 控件上添加屏幕效果:只需将其作为 的子项即可。请参阅示例/screen_effects_demo/。
TCastleScreenEffects编辑 -
色彩空间(伽玛校正)。
-
轻松设计背景(天空/地面渐变,天空盒),雾。
-
多重采样(全屏抗锯齿),只需设置.
TCastleWindow.AntiAliasing -
在某些情况下,遮挡剔除可以大大加快渲染速度。
-
OpenGL和OpenGLES使用的现代方法:
-
使用现代OpenGL(OpenGL 3.3“核心”配置文件)。
-
如果有必要,可以使用古老的OpenGL(甚至1.1)。支持古老的、有缺陷的系统或虚拟机。有关如何测试它的信息,请参阅。
TGLFeatures.RequestCapabilities -
我们可以利用一些OpenGL ES 3.0功能(用于阴影贴图,3D纹理,遮挡剔除......),但任何OpenGL ES 2.0系统都可以工作。
-
在桌面上,我们可以同时使用OpenGL(默认)和OpenGLES。在移动设备上,自然只有OpenGLES。
-
简单的OpenGL调试(允许从GL获得丰富的日志和异常)。
TGLFeatures.Debug
-
7. 图片
轻松显示显示图像作为用户界面或在视口中。
-
由于与Vampyre Imaging Library的集成,支持多种图像格式(如PNG,JPG,RGBE)。
-
完全支持 KTX 和 DDS,支持 GPU 纹理压缩、立方体贴图等。
-
自动纹理压缩和缩小。
8. 用户界面组件
-
用户界面库提供适用于所有平台(如按钮、标签、图像)的跨平台 UI 控件。
-
可以调整它们的外观以匹配您的游戏风格。
-
您的游戏被组织成视图。每个视图都可以有一个设计(在编辑器中创建)和一个关联的单元,您可以在其中处理各种事件,例如按键。
-
自动 UI 缩放,以调整到任何屏幕分辨率和带有锚点的纵横比。
-
强大的掩码:手册、API 参考、示例。
8.1. 文本和字体
-
在用户界面和 3D 中呈现文本,使用可自定义的字体。
-
字体可以从常见格式(如 TTF 或 OTF)或图像 () 加载。
TCastleFontTCastleBitmapFont -
本地化(包括自动翻译用户界面和 s)。
resourcestring -
UTF-8 支持通过引擎 API 的所有字符串,特别是呈现文本。
9. 网络
该引擎使用URL,允许下载URL的内容,并且可以与各种网络库集成。
-
所有路径都表示为具有一些特殊 CGE 协议的 URL,请参阅 nerworking。
-
应用程序数据始终可以使用像castle-data:/xxx这样的URL访问。
-
您可以使用 异步下载 URL。
TCastleDownload -
与印地集成。
-
与 RNL 集成的示例在我们的非地震演示中。
10. 优化和分析
我们拥有广泛的优化文档和许多功能,可帮助您加快游戏速度。
-
在任何调试游戏中,F8 下可用的检查器都会显示 FPS 配置文件。
-
内置简单的分析器。
TCastleProfiler -
内置帧分析器。
TCastleFrameProfiler -
内置纹理内存刻画器。
TextureMemoryProfiler -
DynamicBatching可用于批处理多个形状,以节省绘制调用。
11. 声音
您可以播放声音,空间(3D)或不播放。
-
支持各种声音后端:OpenAL或FMOD,在多平台上。
-
完成声音流,以高效播放音乐曲目。
-
所有声音后端都支持 WAV 和 OggVorbis 文件格式。
-
声音组件,也可以在编辑器中进行设计和测试。
TCastleSoundTCastleSoundSource -
基于优先级的自动声源管理。
12. 物理
你可以使用物理。
-
在对象上定义刚体和碰撞体。
-
允许重力和碰撞自动产生影响。
-
在冲突或触发器上注册事件。
-
我们在引擎盖下使用卡夫物理引擎。
-
即将推出(路线图):使用代码或CGE编辑器设计碰撞体,刚体和接头。见预告片,第一公关。
-
您可以轻松执行冲突查询以确定...无论您需要什么。只需设置为至少使冲突查询将场景视为不仅仅是一个边界框。然后使用类似 or 的例程来查询某些内容是否发生冲突。请注意,到目前为止,这并没有使用“适当的”物理引擎(如卡夫或计划的 Bullet),而是使用自定义八叉树实现,但这在未来会改变。
TCastleSceneCore.Spatial[ssDynamicCollisions]Viewport.Items.WorldRayCastViewport.Items.WorldBoxCollision
13. 平铺集成
您可以使用平铺设计游戏地图。
-
可以将切片地图(TMX 文件)加载到视口中用于 2D 或 3D 显示。
TCastleTiledMap -
视口显示意味着它们可以与它上面的其他场景组合,例如地图上单位的精灵表。
-
我们支持各种地图类型(正交、等轴测、六边形)、图层(您可以控制显示哪些图层)、动画等。
-
请参阅有关平铺地图的手册。
-
请参阅示例/平铺/strategy_game_demo,了解使用平铺地图的CGE中的完整策略游戏。
14. 粒子
粒子系统还不是城堡游戏引擎核心单元的一部分。但是,您可以使用其他开源组件将此功能添加到引擎:
-
粒子发射器:用于 3D 和 2D 的粒子系统,支持直接在 CGE 编辑器中进行编辑。粒子是用 GPU 加速度(变换反馈)计算的。作者:Trung Le (Kagamma)。
编辑 -
Effekseer Integration:与Effekseer集成,Effekseer是一个功能齐全的开源粒子效果创建工具。同样由Trung Le(Kagamma)创作。
编辑
15. 使用现代 Pascal 的原生和快速代码
引擎以及您的游戏都是使用现代对象 Pascal 编写的。
-
我们支持 FPC 和 Delphi 编译器,请参阅支持的编译器和 IDE。
-
Pascal作为一种编程语言是
-
优雅(类型安全、OOP、泛型),
-
功能齐全(可以使用现有的大型代码库,例如Pascal和C,C++库将您的游戏与数据库,AI,网络连接起来),
-
本机(编译为开箱即用快速运行的本机代码)。
注意与库交互 使用C++类(以及其他只有C++编译器才能理解的功能) 您通常需要编写一个“包装器”库,以纯 C 格式公开等效的 API。 这与尝试使用C++库完全相同,例如来自 C#。
-
-
用于构建引擎的相同编程语言用于您的应用程序 - 这导致简单(很容易贡献)和速度。
-
快速执行。它是一种编译为快速本机代码的语言,同时保持优雅和类型安全。
-
快速编译。
-
本机调试。它只是一个使用本机调试器的本机应用程序。调试是Lazarus IDE不可或缺的一部分。
16. 构建工具和持续集成
用于从命令行或批处理模式管理项目的构建工具(适用于持续集成)。构建工具,就像编辑器一样,从CastleEngineManifest.xml文件中读取项目信息。
-
构建工具可以构建、打包、运行应用程序并自动生成压缩纹理(以及更多)。
-
您可以针对任何受支持的目标平台进行构建。您可能需要安装交叉编译器(例如使用fpcupdeluxe),某些平台可能还需要其他工具(请参阅Android等文档)。
-
我们可以构建现成的应用程序,例如适用于Android的APK / AAB,适用于iOS的IPA。
-
具有 CGE 和先决条件(FPC、Android 构建工具、纹理处理工具)的 Docker 镜像,可轻松构建 CGE 应用程序。
-
使用以下方法自动构建 CGE 项目的现成说明:
-
GitHub 操作
-
GitLab CI
-
詹金斯
免费享受现代持续集成,无论您如何托管代码!
-
17. 免费开源软件
该引擎在“具有静态链接例外的LGPL”许可证上获得许可,类似于FPC和Lazarus标准库。
-
简而言之,这意味着您可以使用它创建商业闭源应用程序,而不会出现任何问题。
相关文章:
Unity 收取“运行费”引众怒,开源免费3D游戏引擎CGE(Castle Game Engine)吸引开发者关注
特征 1. 总结2. 跨平台3. 可视化编辑器4.视口与场景,相机,导航和其他组件5. 数据格式 5.1. glTF5.2. X3D5.3. 精灵表5.4. 脊柱6. 图形效果7. 图片8. 用户界面组件 8.1. 文本和字体9. 网络10. 优化和分析11. 声音12. 物理13. 平铺集成14. 粒子15. 使用现代…...
Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃
目前在大数据生态中,调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目,其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说,能够支持的可调度的任务类型同样是一个非常重要的因素…...
线性代数的本质(四)——行列式
文章目录 行列式二阶行列式 n n n 阶行列式行列式的性质克拉默法则行列式的几何理解 行列式 二阶行列式 行列式引自对线性方程组的求解。考虑两个方程的二元线性方程组 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1 \\ a_{21}x_…...
适合初学者快速入门的Numpy实战全集
适合初学者快速入门的Numpy实战全集 Numpy是一个用python实现的科学计算的扩展程序库,包括: 1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C和Fortran代码的工具包;…...
rabbitmq 面试题
1.交换机类型 RabbitMQ是一个开源的消息队列系统,它支持多种交换机类型,用于在消息的生产者和消费者之间路由和分发消息 Direct Exchange(直接交换机):Direct交换机是最简单的交换机类型之一。它将消息按照消息的Rout…...
比较Visual Studio Code中的文件
目录 一、比较两个文件 1.1VS code中的文件大致分为两类: 1.2如何比较VS code中的两个文件? 二、并排差异模式:VS code中的一种差异模式 三、内联差异模式:VS code中的另一种差异模式 四、VS code忽略在行首或者行尾添加或删除…...
誉天在线项目-UML状态图+泳道图
什么是UML UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言。它提供了一组图形符号和规范,用于描述和设计软件系统的结构、行为和交互。 UML图形符号包括类图、用例图、时序图、活动图、组件图、部署图等,每…...
【linux基础(六)】Linux中的开发工具(中)--gcc/g++
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:Linux从入门到开通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学更多操作系统知识 🔝🔝 Linux中的开发工具 1. 前言2.…...
u盘上面 安装 ubuntu 系统
u盘上面 安装 ubuntu 系统 下载 一个 Ubuntu 22.04.3 LTS 桌面版 https://ubuntu.com/download/desktop 找到一个U盘 参考文章: 把 Ubuntu 装到U盘里随身携带,并同时支持 BIOS 和 UEFI 启动 https://www.luogu.com.cn/blog/GGAutomaton/portable-ubu…...
【推荐】SpringMVC与JSON数据返回及异常处理机制的使用
🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《【推荐】Spring与Mybatis集成整合》 ⛺️ 生活的理想,为了不断更新自己 ! 1.JSON 在SpringMVC中,JSON数据返回通常是通过使用ResponseBody注解将Java对象转换为JSO…...
SpringBoot新增拦截器详解
目录 一、拦截器使用 二、SpringMvc拦截器接口 三、SpringBoot集成拦截器 拦截器(Interceptor)通常是指在软件开发中用于处理请求和响应的中间件组件。拦截器的主要目的是在请求进入某个处理流程或在响应返回给客户端之前执行一些额外的操作或逻辑。 …...
Golang开发--select
在Go语言中,select语句用于在多个通道操作中进行选择。select语句使得程序可以同时等待多个通道的操作,并在其中任意一个通道就绪时执行相应的操作。以下是select语句的详细描述: select { case <-ch1:// 当ch1通道可读时执行的操作 case…...
贝塞尔曲线的一些资料收集
一本免费的在线书籍,供你在非常需要了解如何处理贝塞尔相关的事情。 https://pomax.github.io/bezierinfo/zh-CN/index.html An algorithm to find bounding box of closed bezier curves? - Stack Overflow https://stackoverflow.com/questions/2587751/an-algo…...
计算机网络原理 运输层
一,运输层协议概述 1,进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。当网络边缘部分的两台主机使用网络核心部分的功能进行…...
【JavaEE】多线程案例-阻塞队列
1. 前言 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是: 在队列为空时,获取元素的线程会等待队列变为非空当队列满时,存储元素的线程会等待队列可用 阻塞队列常用于生产者和消费者的场…...
【物联网】简要介绍最小二乘法—C语言实现
最小二乘法是一种常用的数学方法,用于拟合数据和寻找最佳拟合曲线。它的目标是找到一个函数,使其在数据点上的误差平方和最小化。 文章目录 基本原理最小二乘法的求解应用举例使用C语言实现最小二乘法总结 基本原理 假设我们有一组数据点 ( x 1 , y 1 …...
慢查询SQL如何优化
一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录,它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…...
UART 通信-使用VIO进行板级验证
串口系列知识分享: (1)串口通信实现-串口发送 (2)串口通信发送多字节数据 (3)串口通信实现-串口接收 (4)UART 通信-使用VIO进行板级验证 (5)串口接收-控制LED闪烁 (6)使用串口发送实现ACX720开发板时钟显示 (7)串口发送+RAM+VGA传图 文章目录 前言一、uart串口协…...
linux 查看可支持的shell
查看可支持的shell linux中支持多种shell类型,所以在shell文件的第一行需要指定所使用的shell #!/bin/bash 指定该脚本使用的是/bin/bash,这样的机制使得我们可以轻松地引用任何的解释器 查看该linux系统支持的shell cat /etc/shells/bin/sh/bin/bash/us…...
微服务简介
微服务简介 微服务架构是一种软件架构模式,它将一个大型应用程序拆分为一组小型、独立的服务,每个服务都有自己的业务逻辑和数据存储。这些服务可以独立开发、部署和扩展,通常使用HTTP或其他轻量级通信协议进行通信。 以下是微服务架构的一…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
ffmpeg(三):处理原始数据命令
FFmpeg 可以直接处理原始音频和视频数据(Raw PCM、YUV 等),常见场景包括: 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装(如封装为 MP4、TS) 处理原始 YUV 视频…...
