Godot:创建实例化场景(texturebutton)并使其出现在前台

Godot: Create instanced scene (texturebutton) and make it come to the foreground

除了我的实例化按钮显示在最底层之外,我已经解决了所有问题。我的地图(texturerect)绘制在它们上方。如何通过代码指示 Godot 在特定节点上绘制这些新按钮?

在 2D 中,默认情况下,绘制顺序是场景树顺序。首先绘制靠近三者顶部的事物。子项绘制在其父项 Node 的顶部 after/on。

您可以通过多种方式操纵此顺序。例如:

  • 当然要更改场景树中 Node 的顺序。
  • 您可以使用 YSortSprite 和其他 Node2D 根据他们的 y 位置按顺序绘制。
  • 您可以在 Node2D 上使用 z_index 使事物比其他方式画得更远。作为替代方案,您可以使用 VisualServer.canvas_item_set_z_index ,它也适用于 Controls.
  • 您可以在 CanvasItemNode2DControl)上使用 show_on_topshow_behind_parent 使其显示在其父 Node.
  • 您可以在 CanvasLayer 中组织您的元素,这些元素按 layer 编号的顺序绘制。

这是经常被建议将UI与游戏世界分开的最后一个。为您的所有 UI 物品准备一个 CanvasLayer,为您的游戏世界准备另一个 CanvasLayer。这样做的另一个特点是 Camera2D 放在 CanvasLayer 中不会影响其他。因此 UI 可以保持原位,无论游戏世界摄像机移动如何 - 这对 HUD 很有用 - 例如。

我要建议的另一件事是不要直接从游戏世界中操纵 UI。不仅因为它使组织 UI 变得尴尬,而且因为这意味着更新 UI 需要修改游戏世界代码(即改变游戏的外观需要改变游戏的行为)。相反,让游戏世界代码在您需要更新 UI 时发出信号,并在适合更新 UI 的地方接收这些信号。此外,您可以通过自动加载路由所有信号(即 /event bus)。