Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册
Unity 开发人员的城堡游戏引擎概述
- 一、简介
- 2. Unity相当于什么GameObject?
- 3. 如何设计一个由多种资产、生物等组成的关卡?
- 4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”相当于什么?
- 5.Unity子目录相当于什么Assets?
- 6. 支持哪些模型格式?
- 7. 支持FBX模型格式吗?
- 8. 我应该使用 TCastleWindow 还是 TCastleControl?
- 9. 在哪里Time.timeScale?
- 10. 在哪里Time.deltaTime?
- 11. 使组件处于非活动状态
- 12. 用户界面缩放
- 13.统一服务
- 14. 着色器
- 15. 视口
- 16. 预制件
- 17. 播放声音
- Owner18. CGE和CGE有什么区别Parent?
- 19.UnityWebRequest(WWW)在哪里?
- 20.物理力API
一、简介
如果您了解其他游戏引擎(例如Unity),本页将尝试解释某些概念如何映射到Castle Game Engine。如果您有任何疑问,请记得在论坛、Discord 聊天或其他地方提问。
2. Unity相当于什么GameObject
?
GameObject
Unity 中的东西(简化)存在于你的世界中,并且可能是可见的,并且可能有受转换影响的子元素。
对于游戏对象(不是用户界面), Castle Game EngineGameObject
中最接近的等价物是类。的实例可以按层次结构排列,其中每个元素都会变换(移动、旋转、缩放)子元素。CGE 最重要的类是,它是实际上可以渲染/动画/碰撞模型的后代。只需设置为在那里加载您的模型(如 glTF 文件)即可。TCastleTransform
TCastleTransform
TCastleScene
TCastleTransform
TCastleScene.Url
我们的手册文档TCastleScene
和TCastleTransform
功能在“带有场景、相机、导航的视口”一章中。基本上你可以做类似的事情
<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#f7f7f8"><span style="color:#333333"><code>MyScene.Url := <span style="color:#dd2200"><span style="color:#dd1144">'</span><span style="color:#dd1144">castle-data:/my_model.gltf</span><span style="color:#dd1144">'</span></span>;
MyScene.Translation := Vector3(<span style="color:#009999">1</span>, <span style="color:#009999">2</span>, <span style="color:#009999">3</span>);
MyScene.PlayAnimation(<span style="color:#dd2200"><span style="color:#dd1144">'</span><span style="color:#dd1144">run</span><span style="color:#dd1144">'</span></span>, true);</code></span></span></span></span>
层次结构TCastleTransform
放置在 a 中TCastleViewport
,它是 2D 用户界面元素( 的后代TCastleUserInterface
)。
对于作为用户界面元素的对象,最重要的基类是TCastleUserInterface
。它有很多后代,比如
-
明显的用户界面控件:
TCastleButton
、TCastleLabel
、TCastleRectangleControl
、TCastleImageControl
... -
布局:
TCastleVerticalGroup
,TCastleHorizontalGroup
, -
最后
TCastleViewport
是一个关键的 UI 组件,它是实际渲染TCastleTransform
.
请参阅用户界面文档。
3. 如何设计一个由多种资产、生物等组成的关卡?
在最简单的情况下,您为每个 3D 模型创建一个TCastleScene
实例。您可以使用CGE 编辑器直观地执行此操作,也可以通过代码执行此操作。
要将多个TCastleScene
实例分组(并转换为一个组),您可以使用其他TCastleTransform
实例。它TCastleScene
也是一个TCastleTransform
后代,所以它也可以有孩子。
遵循模板“3D FPS Game”(通过运行我们的编辑器创建它,选择“New Project”,然后选择“3D FPS Game”作为起点)。data/gameviewplay.castle-user-interface
在生成的项目中,在编辑器中打开设计,以实际了解我的意思(在这个和之前的答案中)。
我们使用CGE 编辑器的目标是提供与 Unity 和其他游戏引擎编辑器类似的体验。因此,您可以将 3D 模型拖放到设计中,然后拖动它们来设计关卡。
4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”相当于什么?
简短回答:
相当于在行为中记录的MonoBehaviour
类。您可以将其附加到控制它。TCastleBehavior
TCastleTransform
完整答案:
您可以通过多种方式从代码中控制 CGE 内容:
-
定义一个来自的类
TCastleBehavior
(请参阅behaviors),并将其实例添加到TCastleTransform
。喜欢<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#f7f7f8"><span style="color:#333333"><code> <span style="color:#000000"><strong>type</strong></span>TMyBehaviorClass = <span style="color:#000000"><strong>class</strong></span>(TCastleBehavior)<strong>public</strong><span style="color:#000000"><strong>procedure</strong></span> Update(<span style="color:#000000"><strong>const</strong></span> SecondsPassed: Single; <span style="color:#000000"><strong>var</strong></span> RemoveMe: TRemoveType); <strong>override</strong>;<span style="color:#000000"><strong>end</strong></span>;</code></span></span></span></span>
然后从代码中添加这样的行为实例:
<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#f7f7f8"><span style="color:#333333"><code> <span style="color:#000000"><strong>var</strong></span>MyBehavior: TMyBehaviorClass;<span style="color:#000000"><strong>begin</strong></span>MyBehavior := TMyBehaviorClass.Create(SomOwner);MyBehavior.Xxx := ...; <span style="color:#999988"><em>// configure necessary parameters</em></span>MyTransform.AddBehavior(MyBehavior);<span style="color:#000000"><strong>end</strong></span>;</code></span></span></span></span>
请参阅我们的模板“3D FPS Game”(通过运行我们的编辑器创建它,选择“New Project”,然后选择“3D FPS Game”作为起点),它准确地展示了这种方法。它定义了一个简单的
TEnemy
类,该类定义了敌人的逻辑,并且是TCastleBehavior
后代。它控制着敌人的行动。它还允许通过检查来检查(例如,当射击射线时)“我是否击中了敌人”SomeTransform.FindBehavior(TEnemy) <> nil
。虽然上面的示例显示了使用代码附加行为,但您也可以
TEnemy
在编辑器中添加。有关如何在编辑器中注册类的信息,请参阅编辑器和自定义组件TEnemy
文档。这需要使用菜单选项“Project -> Restart Editor (With Custom Components)”重新启动项目内的编辑器。这是一个额外的步骤,但对于复杂的行为来说是有意义的,可以更轻松地在编辑器中配置这些行为。该引擎还附带了一些标准行为(例如
TCastleBillboard
,TCastleSoundSource
),并且可以轻松地从编辑器中添加和配置这些行为。 -
您可以从视图中控制事物(请参阅视图)。像这样的视图
TViewPlay
(参见上面提到的模板“3D FPS Game”)有自己的方法来Update
处理输入。视图可以保留对您世界中所有事物的引用,并且可以控制它们。例如,您可以像这样处理视图方法中的所有生物
TViewPlay.Update
。我们关于使用代码控制视口的手册显示了移动多辆车的示例。 -
您还可以分配事件,例如
OnClick
. 大多数 UI 控件都会公开明显的事件,例如TCastleButton.OnClick
. 您可以自由地在一个中心位置处理这些事件(例如 LCLTForm
后代(仅当您使用TCastleControl
)或 CGETCastleView
后代)或分散处理(例如,创建您自己的类的不同实例来处理每个不同生物、不同项目的事件) 。使用事件的方法类似于在 Lazarus LCL 或 Delphi VCL 中使用 UI。
当您想要在一个类(视图)中处理与某些 UI 相关的所有事件(例如单击游戏选项中可见的所有按钮)时,此方法是最佳选择。
-
在 CGE 中控制事物的另一种方法是从现有类创建类后代。在 CGE 中,您可以从几乎所有类(包括 important
TCastleTransform
和TCastleUserInterface
)创建后代,并在那里重写虚拟方法。例如,您可以重写TCastleTransform.Update
以每帧执行某些操作。因此,您可以定义一个类似从or派生的类
TMyCreature
。这个类将控制它自己的变换(例如,它会改变它自己的变换以移动生物),并且它可能会加载一些子项(更多和实例)来显示生物并为其设置动画。TCastleTransform
TCastleScene
Translation
TCastleTransform
TCastleScene
这是一种经典的 OOP 方法。这就像虚幻引擎一样,允许您定义自己的角色类来覆盖基类。
您甚至可以将自定义类注册为在编辑器中可用,以直观地添加/配置它们。
5.Unity子目录相当于什么Assets
?
您应该将游戏数据放置在data
项目的子目录中。请参阅有关“数据”目录的手册。它将自动打包并在您的游戏中可用。
子目录中的所有内容都data
可以在运行时加载。Assets/Resources/
从这个意义上说,如果你关心细节的话,它实际上类似于Unity的子目录。
不属于您的游戏数据的内容(例如源代码)不应放置在data
子目录中。源代码应该位于数据之外。只有编译器必须能够找到它(您可以使用标准 Lazarus项目选项和/或(用于构建跨平台项目)<compiler_options>在 CastleEngineManifest.xml 中指定源位置)。按照惯例,大多数 CGE 示例将 Pascal 源代码放置在code
子目录中(或顶级项目目录中),但这实际上只是一个惯例。
一个较大的CGE项目的布局可能是这样的:
my_project/ <- 项目根目录CastleEngineManifest.xml <- 此清单文件由 CGE 构建工具和 CGE 编辑器使用data/ <- 游戏数据存放在这里;由你决定如何组织这个CastleSettings.xml <- 定义 UI 缩放、默认字体示例_图像.png示例_模型.gltfgameviewmainmenu.castle-用户界面...code/ <- Pascal 游戏代码位于此处;由你决定如何组织这个游戏初始化.pasgameviewmainmenu.pas <- 帕斯卡单位(按照惯例)对应于 gameviewmainmenu.castle-user-interface...... <- 还有其他子目录和文件吗?由你决定。考虑 docs/ 和 README.md。
6. 支持哪些模型格式?
请参阅支持的模型格式。简而言之:glTF 是最好的:) 此文档页面还链接到各种创作工具“如何导出数据”的说明。
使用view3dscene测试您的模型以查看支持的内容。如果您在CGE 编辑器中双击模型,它将自动启动 view3dscene。
7. 支持FBX模型格式吗?
不,我们可能永远不会这样做(除非间接通过一些通用转换库)。FBX 是 Autodesk 的专有模型格式。请不要使用 FBX,它是专有的(Autodesk FBX 规范故意“保密”,并且 Autodesk 只通过其付费 SDK 批准使用 FBX),而且也不是那么好。使用 glTF。
如果您有 FBX 格式的现有模型,您可以将它们转换为 glTF(使用 FBX2glTF 的 Godot Engine 分支)。如果您有模型的源版本,您可能可以将它们从创作软件重新导出到 glTF。您还可以使用Blender或许多其他工具在模型格式之间进行转换。
8. 我应该使用 TCastleWindow 还是 TCastleControl?
答案的简短摘要:使用 TCastleWindow。如果您想要的只是一款跨平台游戏,其中所有内容均使用 Castle Game Engine 渲染。如果您来到这里并且想要“只是使用 CGE 制作游戏”,请使用TCastleWindow
.
详细信息: https://castle-engine.io/manual_lazarus_control.php概述了差异:
-
TCastleControl 意味着引擎渲染在 Lazarus 形式内。也就是说,TCastleControl 是一个常规的 Lazarus 控件,可以放置在更大的窗体上。您可以使用Lazarus设计器来放置LCL控件,并且可以使用CGE编辑器来设计CGE控件(在TCastleControl内)。
-
TCastleWindow 意味着引擎渲染是一个单独的窗口,并且我们没有使用 LCL。您可以使用CGE编辑器来设计控件。因此,您无法访问 LCL 控件,但作为交换,您可以获得完美的跨平台代码(Android、iOS、Switch 仅适用于 TCastleWindow)。
在这两种情况下,您都可以使用 Lazarus 作为 IDE — 来编写代码、调试等。在这两种情况下,您都可以使用 CGE 编辑器来设计 CGE 控件(位于 TCastleControl 或 TCastleWindow 内部)。
9. 在哪里Time.timeScale
?
等效的方法是设置MyViewport.Items.TimeScale
.
它特定于给定的世界,这是TCastleAbstractRootTransform
可用的实例MyViewport.Items
。简单的游戏只有一个视口,一个TCastleViewport
实例。的多个实例TCastleViewport
是可能的,然后可以共享同一个世界,或显示不同的世界(只需在Items
之间分配)。
可以通过额外的时间缩放TCastleScene.TimePlayingSpeed
。这在给定TCastleScene
实例中是本地的。
10. 在哪里Time.deltaTime
?
在Container.Fps.SecondsPassed
. 请参阅查看事件以获取最简单的用法示例。
在您重写TCastleUserInterface.Update
(包括TCastleView.Update
)或TCastleTransform.Update
方法时,您还有一个SecondsPassed
包含该值的显式参数。TCastleTransform.Update
时间已经缩放(如果您使用上面MyViewport.Items.TimeScale
提到的)。
11. 使组件处于非活动状态
TCastleTransform
和都TCastleUserInterface
具有布尔Exists
属性:TCastleTransform.Exists
, TCastleUserInterface.Exists
。默认情况下这是true
. 只需将其设置为false
即可使所有组件的行为就好像该组件不属于层次结构一样。不存在的组件不可见、不碰撞、不处理任何输入、不引发任何事件等。因此 UnityGameObject.SetActive(xxx)
翻译为 CGE MyTransform.Exists := xxx
。
您还可以控制 的TCastleTransform.Collides
、TCastleTransform.Pickable
和TCastleTransform.Visible
属性TCastleTransform
。这些对于使某些东西有用,例如可见但不可碰撞,或可碰撞但不可见。请注意,当Exists
is 时false
,它会“覆盖”它们,并且不存在的对象永远不会碰撞并且永远不可见。
12. 用户界面缩放
我们有 UI 缩放功能,可以智能地适应任何屏幕尺寸,其工作原理类似于 Unity 画布缩放。它允许假设特定的窗口大小进行设计,只要设置合理的锚点,设计在各种屏幕分辨率(即使具有不同的宽高比)下看起来都是合理的。它只是缩放坐标 - 实际渲染是针对最终分辨率完成的,因此它看起来总是“清晰”。
缩放是使用CastleSettings.xml文件配置的。默认 CGE 编辑器“新项目”模板将 UI 缩放设置为使用 1600x900 的参考窗口大小进行调整。
13.统一服务
广告、分析、应用内购买等移动服务可作为Android 服务或iOS 服务提供。您可以在CastleEngineManifest.xml中声明它们,然后使用我们的构建工具构建项目。这些允许将您的代码与各种第三方服务(来自 Google、Apple 等)集成,或使用需要特殊权限(例如振动)的移动 API。
“服务”是指“在构建阶段添加的二进制或源代码形式的项目的一部分”。
-
Android 服务可能包含 Java 代码、Android 预编译库、Gragle 配置等。
-
iOS 服务可能包含 Objective-C 代码、iOS 预编译库、CocoaPods配置等。
-
在其他平台上,到目前为止我们不需要类似的概念。例如,通过公开 FMOD 或 Steam API 等的普通 Pascal 单元,始终可以将 CGE 与桌面上的第三方服务集成。也就是说,有一天我们可能会为其他平台添加“服务”。
14. 着色器
您当然可以替换或增强我们引擎使用的着色器。
我们有合成着色器,类似于 Unity3d“表面着色器”,但增强了:)我对此感到非常自豪,它确实允许轻松编写一段着色器代码并将其添加到某些形状中,并且(与 Unity3d“表面着色器”相比)着色器”)它有一些很酷的新功能,例如组合多种效果的能力(因此您可以编写一个着色器效果,也许添加另一种着色器效果),或者更改灯光或纹理的着色或制作程序生成(在 GPU 上)纹理。
请参阅examples/viewport_and_scenes/shader_effects,了解 Pascal 中的简单演示,该演示将用 GLSL 编码的效果附加到从 glTF 加载的场景。当然,着色器统一变量可以在运行时从 Pascal 设置,因此您可以在运行时以零成本配置着色器。
请参阅https://github.com/castle-engine/demo-models,子目录compositing_shaders中的纯 X3D节点演示Effect
(您可以从 CGE 加载它们;只是这些演示是Effect
通过 X3D 代码创建节点,而不是通过 Pascal 代码) )。
合成着色器文档(特别是本文档)描述了这些着色器效果的工作原理。
15. 视口
在 Unity 中,典型的世界是 3D 的层次结构GameObject
。
-
在这个世界的某个地方,您有一个
Camera
组件,它确定相机参数(如投影)和视口大小。关联的变换GameObject
决定了相机的位置和旋转。 -
您可以
Camera
在不同的游戏对象上拥有多个组件以拥有多个视口。 -
在这个世界的某个地方,您有一个画布,可以充当按钮和图像等 2D 控件的位置。
在 CGE 中,情况有点不同。Viewport( TCastleViewport
)是一个2D控件,它可以在里面渲染3D世界。
-
您设计组件的层次结构
TCastleUserInterface
。它们都具有相同的属性来控制位置和大小,使用锚点,使用FullSize
(填充父级等)。 -
有许多
TCastleUserInterface
后代,例如按钮、图像和视口。 -
在视口 (
TCastleViewport
) 实例中,您可以放置 3D 世界(在 中Viewport.Items
)。 -
视口始终与 中的一台摄像机连接
Viewport.Camera
。该摄像机确定投影设置以及观看者的位置和旋转。
上面描述了编辑器模板中的典型设计。要查看其实际效果,请使用“3D FPS Game”等模板在编辑器中创建一个“新项目” ,然后在编辑器中打开设计。data/gameviewplay.castle-user-interface
简而言之,在 Unity 中,“视口”、“相机”和“UI”只是 3D 世界中的东西。在 CGE 中,“视口”(以及相应的“相机”)包含您的 3D 世界,而“视口”是您 UI 的一部分。
有效,
-
在 CGE 中,“视口”可以像任何其他 2D 控件一样定位/调整大小。有关显示 4 个视口的示例,请参阅Examples/viewport_and_scenes/multiple_viewports 。
-
CGE 中视口的 Z 顺序(前面/后面)很简单,它的工作方式就像所有其他 2D 控件一样。您可以轻松地将其他 2D 控件放置在视口的前面或后面(如果视口有背景,后者很有用
Transparent
)。 -
在 CGE 中,每个“视口”可能显示一个完全不同的、不相关的 3D 世界。视口还可以共享世界(从不同的相机显示相同的世界),只需将它们设置为相同的
Viewport.Items
值即可。
16. 预制件
预制件是一种在文件中存储游戏对象层次结构并附加 Unity 组件的方法。
CGE 中通常的等效方法是创建一个xxx.castle-transform
文件,您可以在其中创建根为TCastleTransform
或 的设计TCastleScene
。这允许您构建TCastleTransform
/TCastleScene
实例的转换层次结构。然后,您可以将其xxx.castle-transform
作为单个内容多次加载。请参阅Examples/advanced_editor,该文件data/soldier_with_cape.castle-transform
中有此方法的最简单示例。
Unity UI 元素的预制件相当于 UI 设计文件,xxx.castle-user-interface
上面已经提到过。
17. 播放声音
Unity AudioSource的等价物是我们的TCastleSoundSource
. 这是一种行为,您将其附加到父级TCastleTransform
,它可以播放空间化声音。请注意,对于非空间声音,您也可以直接调用TSoundEngine.Play
,这更简单,并且不需要实例TCastleSoundSource
。
Unity AudioClip的等价物是我们的TCastleSound
.
有关如何在 CGE 中使用声音的信息,请参阅有关声音的手册章节。
Owner
18. CGE和CGE有什么区别Parent
?
-
Owner
来自于标准TComponent
。请参阅手动和自动释放(Pascal 介绍)。它管理内存(当所有者在拥有的实例之前被释放时,所有者将释放拥有的实例)。 -
Parent
是视觉父母。CGE UI 有TCastleUserInterface.Parent
. CGE 变换有TCastleTransform.Parent
.
因此Parent
和Owner
是不同的概念,甚至在不同的类中声明。
有时,如果在特定情况下合适,则可以将两者设置为同一实例,但一般来说,这两件事只执行两个单独的功能Parent
。Owner
例如,在 CGE 编辑器中,设计中所有内容的所有者始终是一个中心DesignOwner
组件。当您自己加载设计时,您Owner
显式提供实例(作为UserInterfaceLoad
, TransformLoad
, 的参数ComponentLoad
),然后您自己指定父级,但将设计添加到层次结构中(例如MyParentUi.InsertFront(MyLoadedUi)
)。
19.UnityWebRequest(WWW)在哪里?
使用TCastleDownload
. 与 类似UnityWebRequest
,该类可以发送 HTTP 请求(GET、POST 等)并可以异步下载数据。它被设计为一种简单但功能强大的网络通信方式。Z-Gantt时间进度计划甘特图软件
CGE示例/网络演示了它。
20.物理力API
这是各种物理力方法(请参阅物理)从 Unity 映射到 CGE 的方式:
-
Unity - Scripting API: Rigidbody.AddForceAtPosition →
TCastleRigidBody.AddForceAtPosition
(两者都在世界坐标空间中采用 2 个参数“力,位置”) -
Unity - Scripting API: Rigidbody.AddRelativeForce →
TCastleRigidBody.AddForce
(两者都采用 1 个参数“Force”)。通过ForceInLocalCoordinates
=true
. -
Unity - Scripting API: Rigidbody.AddForce →
TCastleRigidBody.AddForce
(两者都采用 1 个参数“Force”)。通过ForceInLocalCoordinates
=false
. -
Unity - Scripting API: Rigidbody.AddTorque →
TCastleRigidBody.AddTorque
(两者都采用 1 个参数,“扭矩”,在世界坐标空间中)
上述映射适用于默认 Unity 使用情况ForceMode.Force
。
对于脉冲(使用 Unity API ForceMode.Impulse
),我们有一个单独的方法TCastleRigidBody.ApplyImpulse
。
相关文章:
Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册
Unity 开发人员的城堡游戏引擎概述 一、简介2. Unity相当于什么GameObject?3. 如何设计一个由多种资产、生物等组成的关卡?4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”…...
卷运维不如卷网络安全
最近发现很多从事运维的选择了辞职,重新规划自己的职业发展方向。运维工程师这个岗位在IT行业里面确实是处于最底层的,不管什么环节出现问题,基本都是运维背锅。背锅也就罢了,薪资水平也比不上别的岗位。 一般运维的薪资水平大多数…...
Digger PRO - Voxel enhanced terrains
资源链接在文末 Digger PRO 是一个简单但强大的工具,可以直接从 Unity 编辑器或游戏中创建天然洞穴和悬岩。会让你感觉自己手中握有一个体素地形,且毫无瑕疵。它实际上保持着最新、最快且可靠的 Unity 地形系统,并在你需要的地方无缝创建洞穴/悬岩峭壁网格。Digger 内…...
文字处理工具 word 2019 mac中文版改进功能
Microsoft Word 2019 是微软公司的文字处理软件,是 office 2019 套件中的一部分。它是一个功能强大、易于使用的工具,可以帮助用户创建各种类型的文档,包括信函、简历、报告、手册等。 Word 2019 提供了许多功能和改进,包括更好的…...
LeetCode 54. 螺旋矩阵
题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 1、求出当前矩阵左上角的元素和右下角的元素。 2、根据这两个元素来确定我们需要遍历的具体位置。 3、当遍历完一圈的时候更新左上角元素和右下角元素。 细节: 当遍历最…...
每天几道Java面试题:集合(第四天)
目录 第四幕 、第一场)大厦楼下门口第二场)大门口 友情提醒 背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第四幕 、 第一场)大厦楼下门口 【面试者老王,门卫甲…...
【论文解读】Faster sorting algorithm
一、简要介绍 基本的算法,如排序或哈希,在任何一天都被使用数万亿次。随着对计算需求的增长,这些算法的性能变得至关重要。尽管在过去的2年中已经取得了显著的进展,但进一步改进这些现有的算法路线的有效性对人类科学家和计算方法…...
latexocr安装过程中遇到的问题解决办法
环境要求:需要Python版本3.7,并安装相应依赖文件 具体的详细安装步骤可见我上次写的博文:Mathpix替代者|科研人必备公式识别插件|latexocr安装教程 ‘latexocr‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的相关解决办…...
如何判断linux 文件(或lib)是由uclibc还是glibc编译出来的?
工作中使用的编译环境有2套编译器,一个是glibc,一个是uclibc。 有些项目使用的glibc编译的lib,和使用uclibc编译的工程,在一起就会出现reference的编译错误如下: 那和如何来判断一个文件是由哪个编译器编译的呢&#…...
WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台
自国家于2022年发布的《关于加强数字政府建设的指导意见》以来,我国数字政府建设已经迈入了一个全新的里程碑,迎来了全面改革和深化升级的全新阶段。 WorkPlus作为自主可控、可信安全、专属定制的数字化平台,扮演着政务机关、政府单位以及各…...
ARM Linux DIY(十二)NES 游戏
文章目录 前言交叉编译工具链使能 Cnes 游戏模拟器移植游戏手柄调试 前言 很多小伙伴为了不让自己的 V3s 吃灰,进而将其打造成游戏机。 我们 DIY 的板子具备屏幕、扬声器、USB Host(可以接游戏手柄),当然也要凑一凑热闹。 交叉编…...
MOEA算法的背景知识
MOEA算法 多目标进化算法优化MOEA工作原理举个例子 为什么单一策略可能会导致种群中的个体过于相似?种群在MOEA里面做什么?举例说明 多目标进化算法优化MOEA Multi-objective evolutionary algorithm optimization (MOEA) 多目标进化算法优化࿰…...
【rtp-benchmarks】读取本地文件基于uvgRtp实现多线程发送
input 文件做内存映射 : get_mem D:\XTRANS\soup\uvg-rtp-dev\rtp-benchmarks\util\util.cc 文件中读取chunksize 到 vector 里作为chunks 创建多个线程进行发送 std::vector<std::thread*> threads;...
fire-voc 火光 烟火 火灾 目标检测数据集
一年中最容易引发火灾的季节是在冬季,主要原因有这样几点。 1、秋冬季节,随着用火、用电、用气增加,加上天气干燥,棉花、木材 、衣物等物体内含有的水分也较低。2、秋冬季风力较大,一旦有火苗冒起就很容易随风蔓延,是火灾的高发期。3、春季也是火灾多发季节&#x…...
【力扣1462】课程表(拓扑排序+bitset优化到O(n))
题目描述: 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。 有的课会有直接的先修课程&am…...
【AI】机器学习——支持向量机(非线性及分析)
5. 支持向量机(线性SVM) 文章目录 5.4 非线性可分SVM5.4.1 非线性可分问题处理思路核技巧核函数特点 核函数作用于SVM 5.4.2 正定核函数由 K ( x , z ) K(x,z) K(x,z) 构造 H \mathcal{H} H 空间步骤 常用核函数 5.5 SVM参数求解算法5.6 SVM与线性模型关系 5.4 非线性可分SVM …...
2023-09-20 LeetCode每日一题(拿硬币)
2023-09-20每日一题 一、题目编号 LCP 06. 拿硬币二、题目链接 点击跳转到题目位置 三、题目描述 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。 示…...
Java21的新特性
Java语言特性系列 Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java20的新特性Java21的新特性Java22…...
测试-----selenuim webDriver
文章目录 1.页面导航2.元素定位3. 浏览器操作4.获取元素信息5. 鼠标的操作6. 键盘操作7. 元素等待8.下拉框9.弹出框10.滚动条11.frame处理12.验证码处理(cookie) 1.页面导航 首先是导入对应的包 :from selenium import webdriver然后实例化:driver web…...
21天学会C++:Day12----初始化列表
CSDN的uu们,大家好。这里是C入门的第十一讲。 座右铭:前路坎坷,披荆斩棘,扶摇直上。 博客主页: 姬如祎 收录专栏:C专题 目录 1. 初始化列表 1.1 引入 1.2 初始化列表 1.3 初始化列表的注意事项 1.…...
OpenAI开发系列(二):大语言模型发展史及Transformer架构详解
全文共1.8w余字,预计阅读时间约60分钟 | 满满干货,建议收藏! 一、介绍 在2020年秋季,GPT-3因其在社交媒体上病毒式的传播而引发了广泛关注。这款拥有超过1.75亿参数和每秒运行成本达到100万美元的大型语言模型(Large …...
Gson - 一个Java序列化/反序列化库
官网 GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back 项目简介 一个Java序列化/反序列化库,用于将Java对象转换为JSON和返回JSON。 Gson is a Java library that can be used to convert Java…...
6-1 汉诺塔
汉诺(Hanoi)塔问题是一个经典的递归问题。 设有A、B、C三个塔座;开始时,在塔座A上有若干个圆盘,这些圆盘自下而上,由大到小地叠在一起。要求将塔座A上的圆盘移到塔座B上,并仍按同样顺序叠放。在…...
Linux之initd管理系统(海思、ZYNQ、复旦微)添加密码登录验证
设置root用户密码:passwd命令设置密码,即修改/etc/passwd文件 一、串口提示输入用户名密码方法 修改 /etc/inittab 方法一: 增加: ::askfirst:-/bin/login 注释: #::respawn:/sbin/getty -L ttyS000 115200 vt…...
怎么更改代理ip,代理ip如何切换使用?
我们要如何使用HTTP代理,对它进行切换使用呢? 如果你购买了青果网络的HTTP代理,可以在文档这边获取使用方法: 可以在这里调试: 也可以在这里选择key提取。 如果有的朋友们想利用利用python,每隔30秒使用API…...
【C++从0到王者】第三十三站:AVL树
文章目录 前言一、AVL 树的概念二、AVL树的实现1. AVL树的结点定义2. AVL树的插入之插入部分3. AVL树的插入之平衡因子的改变4. AVL树的插入之左旋5. AVL树的左旋抽象图6.AVL树的右旋抽象图7. AVL树的双旋8. AVL树的右左双旋9. AVL树的右左双旋的本质10. AVL树的左右双旋11. AV…...
手机机型响应式设置2
window.screen.height:屏幕高度 window.innerHeight:视口高度(去除浏览器头尾的高度) document.body.clientHeight:内容高度 vh:网页视口高度的1/100 vw:网页视口宽度的1/100 vmaxÿ…...
uni-app 之 解决u-button始终居中问题
uView中u-button始终居中问题如何解决的简单方法? 1:给该元素margin-right: 0;可以达到向右靠齐; 2:给该元素的父元素设置float: right image.png <u-button style"width: 50px; margin-left: 0;" plain"t…...
Python日期处理库:掌握时间的艺术
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 日期和时间在计算机编程…...
JOSEF约瑟 智能电流继电器KWJL-20/L KWLD26 零序孔径45mm 柜内导轨式安装
KWJL-20智能电流继电器 零序互感器: KWLD80 KWLD45 KWLD26 KWJL-20 一、产品概述 KWJL-20系列智能剩余电流继电器(以下简称继电器)适用于交流电压至660V或更高的TN、TT、和IT系统,频率为50Hz。通过零序电流互感器检测出超过…...
wordpress调用文章分类/搜索热度查询
表是5字段int类型,第一个字段是主健,自增字段 表结构: id int Uncheckedbillno bigint Uncheckedopid int Checkedbillopid int Checkedtag int Checked 存储过程: CREATE proc [dbo].[inbill]bills bigint,bille bigint,bil…...
网站添加对联广告代码/媒体发稿费用
2019独角兽企业重金招聘Python工程师标准>>> 摘要 原文:Brendan Greggs Blog :《Golang bcc/BPF Function Tracing》,31 Jan 2017引子:gdb、go execution tracer、GODEBUG、gctrace、schedtrace一、gccgo Function Counting二、Go…...
网站建设发票/制作公司官网多少钱
目录 摘要 I ABSTRACT II 第一章 设计任务及方案分析 1 1.1 设计任务及要求 1 1.2 设计总体方案及方案论证 1 1.3 温度测量的方案与分析 1 1.31芯片选择 1 1.32实现方法简介 2 1.33 方案设计 2 第二章 芯片简介 4 2.1 STC89C52芯片简介 4 2.11引脚功能说明 4 2.2 DS18B20简介 7…...
海沧网站建设/资源网
本文来源为node.js社区附上链接 http://cnodejs.org/topic/5231a630101e574521e45ef8 require 用来加载代码,而 exports 和 module.exports 则用来导出代码。但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 exports 和 module…...
腾冲做兼职的网站/上海企业优化
在RouterUtil类中,public static boolean processInsert方法里改成如下:// 如果主键不在插入语句的fields中,则需要进一步处理 TableConfig tableConfig schema.getTables().get(tableName); if (!tableConfig.isAutoIncrement()) {boolean processedIn…...
深圳国资委/seo流量的提升的软件
这里写目录标题下面是目录可跳转对应页面学习;1.MySQL环境1.1.环境安装1.2.安装位置1.3.修改字符集1.4.配置文件2.MySQL逻辑架构MySQL逻辑架构逻辑架构分层MySQL逻辑架构3.存储引擎下面是目录可跳转对应页面学习; 1. 简介 1.1 安装1.2 MySQL逻辑架构 1.…...