【问题标题】:Godot: Create instanced scene (texturebutton) and make it come to the foregroundGodot:创建实例化场景(纹理按钮)并将其置于前景
【发布时间】:2022-01-23 07:56:32
【问题描述】:

我已经把这一切都整理好了,除了我的实例化按钮出现在似乎是最低层的地方。我的地图(纹理)绘制在它们上方。如何通过代码指导 Godot 在特定节点上绘制这些新按钮?

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    在 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)路由所有信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 2016-06-24
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      相关资源
      最近更新 更多