Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

CanvasLayer

继承: Node < Object

派生: ParallaxBackground

用于 2D 场景中的对象的独立渲染的节点。

描述

CanvasLayer 的直接或间接子节点中,派生自 CanvasItem 的节点会在该图层中进行绘制。图层是定义绘制顺序的数字索引。默认 2D 场景使用的索引为 0,因此索引为 -1CanvasLayer 会在下方绘制,而索引为 1CanvasLayer 会在上方绘制。无论节点在图层中的 CanvasItem.z_index 是多少,这一顺序都成立。

CanvasLayer 可以隐藏,也可以跟随视口。因此常用于血条等 HUD(位于 1 或更高的图层上)和背景(位于 -1 或更低的图层上)。

注意:嵌入式 Window 位于 1024 图层。位于 1025 或更高图层的 CanvasItem 会显示在嵌入式窗口之上。

注意:每个 CanvasLayer 都是在一个特定的 Viewport 中绘制的,不能在多个 Viewport 之间共享,见 custom_viewport。使用多个 Viewport 时,例如分屏游戏中,你需要为每个想要绘制的 Viewport 创建一个单独的 CanvasLayer

教程

属性

Node

custom_viewport

bool

follow_viewport_enabled

false

float

follow_viewport_scale

1.0

int

layer

1

Vector2

offset

Vector2(0, 0)

float

rotation

0.0

Vector2

scale

Vector2(1, 1)

Transform2D

transform

Transform2D(1, 0, 0, 1, 0, 0)

bool

visible

true

方法

RID

get_canvas ( ) const

Transform2D

get_final_transform ( ) const

void

hide ( )

void

show ( )


信号

visibility_changed ( )

当该层的可见性发生变化时触发。请参阅 visible


属性说明

Node custom_viewport

  • void set_custom_viewport ( Node value )

  • Node get_custom_viewport ( )

分配给该 CanvasLayer 的自定义 Viewport 节点。如果为 null,则使用默认的视口。


bool follow_viewport_enabled = false

  • void set_follow_viewport ( bool value )

  • bool is_following_viewport ( )

启用时,该 CanvasLayer 会使用视口的变换,所以它会随相机移动,而不是保持在屏幕上的某个固定位置。

follow_viewport_scale 配合可以实现伪 3D 效果。


float follow_viewport_scale = 1.0

  • void set_follow_viewport_scale ( float value )

  • float get_follow_viewport_scale ( )

使用 follow_viewport_enabled 时缩放图层。移入到前景的图层应具有增加的缩放,而移入到背景的图层应具有减小的缩放。


int layer = 1

  • void set_layer ( int value )

  • int get_layer ( )

画布层的索引,用于确定绘制顺序。索引值小的画布层绘制在索引值大的画布层后面。

注意:如果多个 CanvasLayer 的画布层索引相同,一个 CanvasLayer 的 CanvasItem 子节点都会绘制在另一个 CanvasLayer 的 CanvasItem 子节点之后。哪个 CanvasLayer 画在前面并不一定。


Vector2 offset = Vector2(0, 0)

图层的基本偏移量。


float rotation = 0.0

  • void set_rotation ( float value )

  • float get_rotation ( )

图层的旋转弧度。


Vector2 scale = Vector2(1, 1)

图层的缩放。


Transform2D transform = Transform2D(1, 0, 0, 1, 0, 0)

图层的变换。


bool visible = true

  • void set_visible ( bool value )

  • bool is_visible ( )

false 时,该 CanvasLayer 下的所有 CanvasItem 都会被隐藏。

CanvasItem.visible 不同,CanvasLayer 的显示与否不会传播到其内部的层。


方法说明

RID get_canvas ( ) const

返回此层使用的画布的 RID。


Transform2D get_final_transform ( ) const

返回从 CanvasLayer 坐标系到 Viewport 坐标系的变换。


void hide ( )

隐藏该 CanvasLayer 下的所有 CanvasItem。相当于将 visible 设为 false


void show ( )

显示该 CanvasLayer 下的所有 CanvasItem。相当于将 visible 设为 true