【发布时间】:2022-01-23 07:56:32
【问题描述】:
我已经把这一切都整理好了,除了我的实例化按钮出现在似乎是最低层的地方。我的地图(纹理)绘制在它们上方。如何通过代码指导 Godot 在特定节点上绘制这些新按钮?
【问题讨论】:
我已经把这一切都整理好了,除了我的实例化按钮出现在似乎是最低层的地方。我的地图(纹理)绘制在它们上方。如何通过代码指导 Godot 在特定节点上绘制这些新按钮?
【问题讨论】:
在 2D 中,默认情况下,绘制顺序是场景树顺序。首先绘制靠近三个顶部的东西。孩子们被画在他们父母Node之后/之上。
您可以通过多种方式操作此订单。例如:
Nodes 的顺序。YSort 让Sprites 和其他Node2D 根据y 位置的顺序绘制。Node2D 上使用z_index,以使事物比其他方式绘制得更远或更远。作为替代方案,您可以使用VisualServer.canvas_item_set_z_index,它也适用于Controls。CanvasItem(Node2D 或Control)上使用show_on_top 和show_behind_parent,使其显示在其父级Node 的顶部或后面。CanvasLayers 中组织您的元素,这些元素按照layer 编号的顺序绘制。通常建议将 UI 与游戏世界分开的最后一个。为您的所有 UI 项目设置一个 CanvasLayer,为您的游戏世界设置另一个 CanvasLayer。这样做的另一个特点是Camera2D 放在CanvasLayer 中不会影响其他人。因此,无论游戏世界的摄像机如何移动,UI 都可以保持原位 - 例如,这对 HUD 很有用。
我要建议的另一件事是不要直接从游戏世界操纵 UI。不仅因为它让 UI 组织起来很尴尬,而且因为它意味着更新 UI 需要修改游戏世界代码(即改变游戏的外观需要改变游戏的行为)。而是让游戏世界代码在您需要更新 UI 时发出信号,并在适合更新 UI 的地方接收这些信号。此外,您可以通过自动加载(即signal bus/event bus)路由所有信号。
【讨论】: