Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

news2024/11/24 20:59:06

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

GameObjectUnity 中的东西(简化)存在于你的世界中,并且可能是可见的,并且可能有受转换影响的子元素。

对于游戏对象(不是用户界面), Castle Game EngineGameObject中最接近的等价物是类。的实例可以按层次结构排列,其中每个元素都会变换(移动、旋转、缩放)子元素。CGE 最重要的类是,它是实际上可以渲染/动画/碰撞模型的后代。只需设置为在那里加载您的模型(如 glTF 文件)即可。TCastleTransformTCastleTransformTCastleSceneTCastleTransformTCastleScene.Url

我们的手册文档TCastleSceneTCastleTransform功能在“带有场景、相机、导航的视口”一章中。基本上你可以做类似的事情

<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。它有很多后代,比如

  • 明显的用户界面控件:TCastleButtonTCastleLabelTCastleRectangleControlTCastleImageControl...

  • 布局:TCastleVerticalGroupTCastleHorizontalGroup,

  • 最后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类。您可以将其附加到控制它。TCastleBehaviorTCastleTransform

完整答案:

您可以通过多种方式从代码中控制 CGE 内容:

  1. 定义一个来自的类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)”重新启动项目内的编辑器。这是一个额外的步骤,但对于复杂的行为来说是有意义的,可以更轻松地在编辑器中配置这些行为。

    该引擎还附带了一些标准行为(例如TCastleBillboardTCastleSoundSource),并且可以轻松地从编辑器中添加和配置这些行为。

  2. 您可以从视图中控制事物(请参阅视图)。像这样的视图TViewPlay(参见上面提到的模板“3D FPS Game”)有自己的方法来Update处理输入。视图可以保留对您世界中所有事物的引用,并且可以控制它们。

    例如,您可以像这样处理视图方法中的所有生物TViewPlay.Update。我们关于使用代码控制视口的手册显示了移动多辆车的示例。

  3. 您还可以分配事件,例如OnClick. 大多数 UI 控件都会公开明显的事件,例如TCastleButton.OnClick. 您可以自由地在一个中心位置处理这些事件(例如 LCLTForm后代(仅当您使用TCastleControl)或 CGETCastleView后代)或分散处理(例如,创建您自己的类的不同实例来处理每个不同生物、不同项目的事件) 。

    使用事件的方法类似于在 Lazarus LCL 或 Delphi VCL 中使用 UI。

    当您想要在一个类(视图中处理与某些 UI 相关的所有事件(例如单击游戏选项中可见的所有按钮)时,此方法是最佳选择。

  4. 在 CGE 中控制事物的另一种方法是从现有类创建类后代。在 CGE 中,您可以从几乎所有类(包括 importantTCastleTransformTCastleUserInterface)创建后代,并在那里重写虚拟方法。例如,您可以重写TCastleTransform.Update以每帧执行某些操作。

    因此,您可以定义一个类似从or派生的TMyCreature。这个类将控制它自己的变换(例如,它会改变它自己的变换以移动生物),并且它可能会加载一些子项(更多和实例)来显示生物并为其设置动画。TCastleTransformTCastleSceneTranslationTCastleTransformTCastleScene

    这是一种经典的 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
    示例_模型.gltf
    gameviewmainmenu.castle-用户界面
    ...
  code/ <- Pascal 游戏代码位于此处;由你决定如何组织这个
    游戏初始化.pas
    gameviewmainmenu.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.ExistsTCastleUserInterface.Exists。默认情况下这是true. 只需将其设置为false即可使所有组件的行为就好像该组件不属于层次结构一样。不存在的组件不可见、不碰撞、不处理任何输入、不引发任何事件等。因此 UnityGameObject.SetActive(xxx)翻译为 CGE MyTransform.Exists := xxx

您还可以控制 的TCastleTransform.CollidesTCastleTransform.PickableTCastleTransform.Visible属性TCastleTransform。这些对于使某些东西有用,例如可见但不可碰撞,或可碰撞但不可见。请注意,当Existsis 时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 中使用声音的信息,请参阅有关声音的手册章节。

Owner18. CGE和CGE有什么区别Parent

  • Owner来自于标准TComponent。请参阅手动和自动释放(Pascal 介绍)。它管理内存(当所有者在拥有的实例之前被释放时,所有者将释放拥有的实例)。

  • Parent是视觉父母。CGE UI 有TCastleUserInterface.Parent. CGE 变换有TCastleTransform.Parent.

因此ParentOwner是不同的概念,甚至在不同的类中声明。

有时,如果在特定情况下合适,则可以将两者设置为同一实例,但一般来说,这两件事只执行两个单独的功能ParentOwner例如,在 CGE 编辑器中,设计中所有内容的所有者始终是一个中心DesignOwner组件。当您自己加载设计时,您Owner显式提供实例(作为UserInterfaceLoadTransformLoad, 的参数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”)。通过ForceInLocalCoordinatestrue.

  • Unity - Scripting API: Rigidbody.AddForce → TCastleRigidBody.AddForce(两者都采用 1 个参数“Force”)。通过ForceInLocalCoordinatesfalse.

  • Unity - Scripting API: Rigidbody.AddTorque → TCastleRigidBody.AddTorque(两者都采用 1 个参数,“扭矩”,在世界坐标空间中)

上述映射适用于默认 Unity 使用情况ForceMode.Force

对于脉冲(使用 Unity API ForceMode.Impulse),我们有一个单独的方法TCastleRigidBody.ApplyImpulse

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

权限提升数据库(基于MySQL的UDF,MOF,启动项提权)

获取数据库权限 如何获取数据库的最高权限用户的密码&#xff0c;常用方法有这些 网站存在高权限SQL注入点 数据库的存储文件或备份文件 网站应用源码中的数据库配置文件 采用工具或脚本爆破 网站存在高权限SQL注入点 可以通过sqlmap拿到user表的账号密码&#xff0c;密码可能…

短视频矩阵系统源码开发分享

①账号的建立与发布频率 要根据品牌的定位和特点&#xff0c;结合平台的特点和用户需求&#xff0c;制作符合品牌及个人形象的账号名称和内容发布主旨&#xff0c;以在短视频平台建立起自身标签&#xff0c;从而提升品牌知名度和美誉度。 发文频率也很关键&#xff0c;发文频…

新增MariaDB数据库管理、支持多版本MySQL数据库共存,1Panel开源面板v1.6.0发布

2023年9月18日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.6.0版本。 在这个版本中&#xff0c;1Panel新增MariaDB数据库管理&#xff1b;支持多版本MySQL数据库共存&#xff1b;支持定时备份系统快照和应用商店中已安装应用&#xff1b;支持为防火墙…

零代码编程:用ChatGPT批量下载网站中的特定网页内容

http://blog.umd.edu/davidkass这个网站上有伯克希尔股东大会的一些文字稿&#xff0c;其标题如下&#xff1a; Notes From the Berkshire Hathaway 2020 Annual Meeting – May 2, 2020 Notes From the Berkshire Hathaway 2021 Annual Meeting – May 1, 2021 在右边的搜索…

MySQL 篇

目录 1、数据库三范式 2、数据库事务的特性 3、MySQL数据库引擎 4、说说 InnoDB 与 MyISAM 的区别 5、索引是什么&#xff1f; 6、索引数据结构 7、MySQL 索引类型有哪些&#xff1f; 8、索引有什么优缺点&#xff1f; 9、使用索引应该注意些什么&#xff1f; …

(图论) 827. 最大人工岛 ——【Leetcode每日一题】

❓ 827. 最大人工岛 难度&#xff1a;困难 给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返回执行此操作后&#xff0c;grid 中最大的岛屿面积是多少&#xff1f; 岛屿 由一组上、下、左、右四个方向相连的 1 形成。 示例 1: 输入: grid [[1, 0]…

redisplusplus笔记

redis与连接 Redis处理命令 connection主要方法及与reply关系 connection只支持移动语义&#xff0c;不支持拷贝和赋值 recv使用ReplyUPtr&#xff0c;即unique_ptr<redisReply, ReplyDeleter>,其中ReplyDeleter定义如下 struct ReplyDeleter {void operator()(redis…

从0搭建夜莺v6基础监控告警系统(二):采集数据、打通夜莺显示

文章目录 1. 写在前面1.1. categraf 采集数据1.2. 官方文档传送门 2. 配置过程2.1. 打通夜莺和 VictoriaMetrics2.2. 配置 Categraf2.3. 验证结果2.4. 配置仪表盘 3. 部署总结3.1. 操作总结3.2. 仪表盘展示 上一操作我们已经安装好了所需的基础服务&#xff0c;接下来需要打通各…

AI项目八:yolo5+Deepsort实现目标检测与跟踪(CPU版)

若该文为原创文章&#xff0c;转载请注明原文出处。 一、DeepSORT简介 DeepSORT 是一种计算机视觉跟踪算法&#xff0c;用于在为每个对象分配 ID 的同时跟踪对象。DeepSORT 是 SORT&#xff08;简单在线实时跟踪&#xff09;算法的扩展。DeepSORT 将深度学习引入到 SORT 算法中…

Android.bp常用语法和预定义属性

介绍 Android.bp是Android构建系统中用于定义模块和构建规则的配置文件&#xff0c;它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定&#xff1a; 注释&#xff1a; 单行注释使用//符号。 多行注释使用/和/包围。 和go语言相同 // 这是单行注释 /* 这是…

爆破shadow文件密码脚本(完成版)

在之前的博客Python爆破shadow文件密码脚本&#xff08;简化版&#xff09;中我们做了简化版的爆破shadow文件密码的python脚本&#xff0c;接下来在之前代码的基础上改进&#xff1a; import crypt shadow_line"root:$y$j9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA…

charles报错Not allowed GET http://xx.xx.com/xx - connection dropped

现象&#xff1a;手机抓包时&#xff0c;charles提示Not allowed GET http://xx.xx.com/xx - connection&#xff0c;请求status显示block 排查原因&#xff1a; 1、换手机连接抓包工具&#xff0c;现象也是同上&#xff0c;可以排除手机的原因 2、检索网络上关于报错的解决方…

【HCIE】08.MPLS VPN跨域AB

MPLS VPN跨域A ASBR之间交换IPV4路由&#xff0c;采用IPVR数据包转发数据。该方式易于理解 跨域的要求 两个ASBR之间不能开启LDP&#xff0c;可以开启MPLS 因为两个路由器处于不同的AS之间&#xff0c;之间的IGP是不能互通的&#xff0c;之前是没有路由的 之所以中间不能开…

Java | 网络编程

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、网络编程1.概念2.常见软件架构 &#x1f334;二、网络编程三要素1. IP2. 端口号3.协议 &#x1f334;总结 &…

Mybatis学习笔记7 参数处理专题

Mybatis学习笔记6 使用时的一些小技巧_biubiubiu0706的博客-CSDN博客 1.单个简单类型参数 2.Map参数 3.实体类参数 4.多参数 5.Param注解(命名参数) 6.Param源码分析 建表 插入点数据 新建模块 pom.xml <?xml version"1.0" encoding"UTF-8"?&…

STM32 USB CDC 虚拟串口

// 用虚拟串口(USB CDC VCP)感觉有些不稳定&#xff0c;尤其是下位机掉电后再上电&#xff0c;上位机虚拟的那个串口根本不能用&#xff0c;还有就是 // 必须等虚拟串口出来后且知道串口号上位机才可以执行打开操作// 上面是实际情况&#xff0c;但并不是STM32的USB不行&#x…

JUnit5单元测试提示“Not tests were found”错误

JUnit5单元测试提示“Not tests were found”错误&#xff0c;如下图所示&#xff1a; 或者 问题解析&#xff1a; 1&#xff09;使用Test注解时&#xff0c;不能有返回值&#xff1b; 2&#xff09;使用Test注解时&#xff0c;不能使用private关键字&#xff1b; 存在以上情…

C语言——贪吃蛇小游戏

目录 一、ncurse 1.1 为什么需要用ncurse&#xff1a; 1.2 ncurse的输入输出&#xff1a; 1.2.1 如何使用ncurse&#xff1a; 1.2.2 编译ncurse的程序&#xff1a; 1.2.3 测试输入一个按键ncurse的响应速度&#xff1a; 1.3 ncurse上下左右键获取&#xff1a; 1.3.1 如…

移动 Web 第一天

目标&#xff1a;使用位移、缩放、旋转、渐变效果丰富网页元素的呈现方式。 文章目录 01-平面转换简介平移定位居中案例-双开门旋转转换原点案例-时钟多重转换缩放案例-播放特效倾斜 02-渐变线性渐变案例-产品展示径向渐变 03-综合案例导航-频道箭头旋转频道列表 渐变按钮搜索…

什么是AJAX?如何使用原生JavaScript进行AJAX请求?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是AJAX&#xff1f;⭐如何使用原生JavaScript进行AJAX请求&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…