关于在预编码动作游戏系统之外创建战斗系统的概念性讨论与考察。
AGM+Godot 当前拥有的工具,以及 AGM 缺少哪些工具才能在不依赖高级 Godot 工具的情况下实现设计。
涵盖的主题包括但不限于:
- 战斗屏幕:战斗结束后切换到另一个场景或视觉屏幕,然后再切换回来
- 地图上,即《时空之轮》:战斗人员停留在当前场景,并移动到战斗位置
- 回合制:战斗人员轮流行动,按顺序或其他组织顺序。例如,基于“速度”值进行排序
- 实时制:战斗人员根据自己的计时器或游戏引擎的
Processtick行动。他们可以中断其他战斗人员或同时行动 - 伪回合制:回合制和实时制系统的任何混合,战斗人员必须等待另一名战斗人员完成动作
- 固定位置,或战斗线:战斗人员占据固定位置,仅通过预设动画移动
- 动态位置:战斗人员可以自由移动。位置可能重要,也可能不重要
动作游戏制作器和 Godot 系统
AGM 数据库 对所有这些至关重要。理解如何设置和修改 User Databases(用户数据库)、Project Variables(项目变量)和 Project Switches(项目开关)是制作战斗系统的必备技能。
Godot 场景树 以及 AGM Nodes(节点)如何与其配合是另一个需要理解的关键系统。AGM 通过 Scene Transition(场景转换)标签页控制场景管理。这对于 res://AGMaker/core.tscn 的功能至关重要。
如果您不熟悉场景树和 树序,则需要阅读一些 Godot 文档。[Tree](树)作为数据结构术语在 Godot 系统中频繁出现。
- 简而言之:场景树顶层的图层位于树中任何较低层级的后方。
|  |
在运行时,当前的 GameScene(游戏场景)将作为 GameScenes 的子节点添加。当发生 Action:EndScene(动作:结束场景)时,SceneTransition(场景转换)将通过链接逻辑移除当前场景并替换为下一个场景。这限制了 AGM 同一时间只能有一个活动的 GameScene。[1] 链接也可以在 EndScene 之前切换场景,因此请检查您的链接 Conditions(条件)。
- 1.0.7 版本:没有视觉脚本
Action来加载多个GameScene。这与 Godot 复合游戏设计原则相冲突。 - 1.0.7 版本:没有视觉脚本
Action来转换到特定的GameScene。必须通过SceneTransition链接的Is Change Switch Variable(是否更改开关变量)以及ProjectSwitch(项目开关)或ProjectVariable(项目变量)来操作。
GameScenes 由多个图层构成[2]。在此上下文中,图层是 Parallax2D 节点。它们在视觉脚本中享有特殊权限,拥有图层动作:
|  | ![Parallax Layer selection |
在游戏场景或视差图层之下是必需的 ObjectRoot 节点。这些节点负责 GameObjects(游戏对象)的运作。如果 GameObject 不是 ObjectRoot 的后代,它将无法正常工作。直接的 ObjectRoot 祖先节点是 Action:GenerateObject(动作:生成对象)放置新 GameObject 的位置,位于该 ObjectRoot 子节点的底部。
MenuScenes(菜单场景)旨在用作静态 GUI 元素。Control 节点不会随摄像机移动[3] 并保持相对于屏幕的位置。这些特殊场景可以通过 Action:OpenMenu(动作:打开菜单)和 Action:CloseMenu(动作:关闭菜单)操作。
|  |  |
UIObjectRoot 节点与 GameScenes 中的 ObjectRoot 相同。你应该将用于 UI 视觉脚本的 GameObjects 放在其下方。所有图形处理工作都由 CanvasLayer 完成。确保将 Control 节点作为 CanvasLayer 的子节点。你还应该考虑设置图层编号。这将覆盖场景树顺序,决定哪些内容在视觉上显示在最顶层。
OpenMenu 的顺序可能很重要。请记住树序。最新的 MenuScene 被添加到 /root/CoreScene/GameScenes 的底部。这些场景菜单在场景转换时不会关闭。相反,新的 GameScene 将作为子节点添加到它们下方的场景树中。
这就是 CanvasLayers 变得非常重要的地方。默认情况下,GameScenes 位于画布图层 0,任何不是 CanvasLayer 节点后代的元素也是如此。MenuScenes 的画布图层默认为 1,因此它们会自动渲染在 GameScenes 之上[4]
为什么这些关于节点的背景知识很重要?
因为战斗系统可以以非常奇怪的方式设置。
一些快速示例。
- 你可以创建一个由额外
Parallax2D(如上所示)组成的战斗图层。它可以启用和禁用。在其ObjectRoot下放置一个BattleSystemObject(战斗系统对象)。 - 你可以将非
Control节点放入MenuScenes,并让视觉脚本GameObjects在不同场景切换中继续运行。
理解场景树和节点是讨论如何以及在哪里放置运行战斗系统脚本的 GameObjects 的一部分。这甚至还没有涉及到非 AGM 的 Godot API 和 GDScript 选项。
GDScript 可以强制将多个
GameScenes放入场景树。不推荐这样做。 ↩︎这种英语术语令人困惑,但在 Godot 中很常见。这导致“场景”一词因过度使用而变得模糊。视觉图层、碰撞图层、物理图层、游戏场景图层、画布图层、Z-Index 图层…… ↩︎
Godot 的
Camera2D在功能上有些奇怪。游戏窗口实际上无法在 2D 游戏世界中移动。因此,Viewport(视口)类型会根据摄像机的World2D位置进行滑动(变换)。拿两张纸,一张叠在另一张上面。你的眼睛是游戏窗口。移动底部的纸张,那就是Camera2D移动视口。顶部的纸张是一个不跟随视口的 GodotCanvasLayer节点。 ↩︎如果
GameScene位于场景菜单下方(按树序),则存在 Godot_process、_input和其他场景树执行方面的影响。这可能会导致意想不到的边缘情况。截至本文发布时,我还没有时间测试它们。如果你理解了场景树,你就会理解_process沿树向下的顺序,以及_input沿树向上的顺序。 ↩︎