跳到主要内容

SceneTree

继承

MainLoop

简要描述

通过节点层次结构管理场景。

描述

作为最重要的类之一,SceneTree管理场景中节点的层次以及场景本身。可以添加,检索和删除节点。 整个场景树(以及当前场景)都可以暂停。 可以加载,切换和重新加载场景。

您还可以使用SceneTree将您的节点分为几组:每个节点可以分配想要创建的任意数量的组,例如 一个“敌人”团体。 然后,您可以迭代这些组甚至调用方法,并一次在组的所有成员上设置属性。

SceneTree是场景使用的默认MainLoop实现,因此负责游戏循环。

成员

类型属性名默认值
Nodecurrent_scene
booldebug_collisions_hintfalse
booldebug_navigation_hintfalse
Nodeedited_scene_root
MultiplayerAPImultiplayer
boolmultiplayer_polltrue
NetworkedMultiplayerPeernetwork_peer
boolpausedfalse
boolrefuse_new_network_connectionsfalse
Viewportroot
booluse_font_oversamplingfalse

方法

返回值类型方法名称
Variantcall_group(group: String, method: String, ...) vararg
Variantcall_group_flags(flags: int, group: String, method: String, ...) vararg
intchange_scene(path: String)
intchange_scene_to(packed_scene: PackedScene)
SceneTreeTimercreate_timer(time_sec: float, pause_mode_process: bool = true)
intget_frame() const
PoolIntArrayget_network_connected_peers() const
intget_network_unique_id() const
intget_node_count() const
Arrayget_nodes_in_group(group: String)
intget_rpc_sender_id() const
boolhas_group(name: String) const
boolhas_network_peer() const
boolis_input_handled()
boolis_network_server() const
voidnotify_group(group: String, notification: int)
voidnotify_group_flags(call_flags: int, group: String, notification: int)
voidqueue_delete(obj: Object)
voidquit(exit_code: int = -1)
intreload_current_scene()
voidset_auto_accept_quit(enabled: bool)
voidset_group(group: String, property: String, value: Variant)
voidset_group_flags(call_flags: int, group: String, property: String, value: Variant)
voidset_input_as_handled()
voidset_quit_on_go_back(enabled: bool)
voidset_screen_stretch(mode: int, aspect: int, minsize: Vector2, shrink: float = 1)

信号

  • **connected_to_server**

每当此SceneTreenetwork_peer成功连接到服务器时发出。


  • **connection_failed**

每当此SceneTreenetwork_peer无法建立与服务器的连接时发出。


  • **files_dropped**

当文件从OS文件管理器中拖放到游戏窗口中时发出。


  • **global_menu_action**

单击全局菜单项时发出。


  • **idle_frame**

SceneTree中的每个节点上调用Node._process之前立即发出。


  • **network_peer_connected**

每当此SceneTreenetwork_peer与新的对等方连接时发出。ID是新同伴的同伴ID。 当其他客户端连接到同一服务器时,客户端会收到通知。 连接到服务器后,客户端还将收到该服务器的信号(ID为1)。


  • **network_peer_disconnected**

每当此SceneTreenetwork_peer与对等方断开连接时发出。当其他客户端从同一服务器断开连接时,客户端会收到通知。


  • **node_added**

每当将节点添加到SceneTree时发出。


  • **node_configuration_warning_changed**

当节点的配置更改时发出。仅在tool模式下发射。


  • **node_removed**

每当从SceneTree中删除节点时就发出。


  • **node_renamed**

重命名节点时发出。


  • **physics_frame**

SceneTree中的每个节点上调用Node._physics_process之前立即发出。


  • **screen_resized**

当屏幕分辨率(全屏)或窗口大小(窗口)更改时发出。


  • **server_disconnected**

每当此SceneTreenetwork_peer与服务器断开连接时发出。仅在客户端上发出。


  • **tree_changed**

每当SceneTree层次结构发生更改(移动或重命名子项,等等)时,就发出。


枚举

enum GroupCallFlags:

  • **GROUP_CALL_DEFAULT = 0**

呼叫没有标志的组(默认)。

  • **GROUP_CALL_REVERSE = 1**

以相反的场景顺序呼叫组。

  • **GROUP_CALL_REALTIME = 2**

立即呼叫群组(呼叫通常在空闲状态下进行)。

  • **GROUP_CALL_UNIQUE = 4**

即使呼叫已执行多次,也只能呼叫一个群组。


enum StretchMode:

  • **STRETCH_MODE_DISABLED = 0**

不能伸展。

  • **STRETCH_MODE_2D = 1**

以更高的分辨率渲染(插值)。

  • **STRETCH_MODE_VIEWPORT = 2**

保持指定的显示分辨率。无插值。 内容可能显示为像素化。


enum StretchAspect:

  • **STRETCH_ASPECT_IGNORE = 0**

在窗口中填充内容以覆盖过多的空间。内容可能看起来很绷紧。

  • **STRETCH_ASPECT_KEEP = 1**

通过在任一轴上填充黑条来保持相同的宽高比。这样可以防止变形。

  • **STRETCH_ASPECT_KEEP_WIDTH = 2**

垂直展开。如果窗口太宽,则可能会出现左/右黑条。

  • **STRETCH_ASPECT_KEEP_HEIGHT = 3**

水平扩。如果窗口太高,则可能会出现顶部/底部的黑条。

  • **STRETCH_ASPECT_EXPAND = 4**

沿两个方向扩展,保持相同的纵横比。这样可以防止变形,同时避免黑条。


常量

成员说明

  • Node current_scene
setterset_current_scene(value)
getterget_current_scene
  • bool debug_collisions_hint
Defaultfalse
setterset_debug_collisions_hint(value)
getteris_debugging_collisions_hint
  • bool debug_navigation_hint
Defaultfalse
setterset_debug_navigation_hint(value)
getteris_debugging_navigation_hint
  • Node edited_scene_root
setterset_edited_scene_root(value)
getterget_edited_scene_root
  • MultiplayerAPI multiplayer
setterset_multiplayer(value)
getterget_multiplayer
  • bool multiplayer_poll
Defaulttrue
setterset_multiplayer_poll_enabled(value)
getteris_multiplayer_poll_enabled
  • NetworkedMultiplayerPeer network_peer
setterset_network_peer(value)
getterget_network_peer
  • bool paused
Defaultfalse
setterset_pause(value)
getteris_paused
  • bool refuse_new_network_connections
Defaultfalse
setterset_refuse_new_network_connections(value)
getteris_refusing_new_network_connections
  • Viewport root
getterget_root
  • bool use_font_oversampling
Defaultfalse
setterset_use_font_oversampling(value)
getteris_using_font_oversampling

方法说明

  • call_group call_group(group: String, method: String, ...) vararg

在给定组的每个成员上调用方法


  • call_group_flags call_group_flags(flags: int, group: String, method: String, ...) vararg

遵循给定的GroupCallFlags,在给定组的每个成员上调用method


  • change_scene change_scene(path: String)

将运行场景加载到PackedScene中并创建新实例后,将运行场景更改为给定path处的场景。

成功返回OK,如果无法将path加载到PackedScene中,则返回ERR_CANT_OPEN,如果无法实例化该场景,则返回ERR_CANT_CREATE


  • change_scene_to change_scene_to(packed_scene: PackedScene)

将运行场景更改为给定PackedScene的新实例。

成功返回OK,如果无法实例化场景,则返回ERR_CANT_CREATE


  • create_timer create_timer(time_sec: float, pause_mode_process: bool = true)

返回一个SceneTreeTimer,它将在此SceneTree中给定的时间(秒)后SceneTreeTimer.timeout。如果将pause_mode_process设置为false,则暂停SceneTree也将暂停计时器。

通常用于创建单触发延迟计时器,如以下示例所示:

func some_function():
print("start")
yield(get_tree().create_timer(1.0), "timeout")
print("end")

  • get_frame get_frame() const

返回当前的帧号,即自应用程序启动以来的总帧数。


  • get_network_connected_peers get_network_connected_peers() const

返回此SceneTreenetwork_peer的所有已连接对等方的对等ID。


  • get_network_unique_id get_network_unique_id() const

返回此SceneTreenetwork_peer的唯一对等ID。


  • get_node_count get_node_count() const

返回此SceneTree中的节点数。


  • get_nodes_in_group get_nodes_in_group(group: String)

返回分配给给定组的所有节点的列表。


  • get_rpc_sender_id get_rpc_sender_id() const

返回最近收到的RPC调用的发件人的对等ID。


  • has_group has_group(name: String) const

如果给定的组存在,则返回true


  • has_network_peer has_network_peer() const

如果设置了network_peer,则返回true


  • is_input_handled is_input_handled()

如果最新的InputEvent被标记为使用set_input_as_handled处理,则返回true


  • is_network_server is_network_server() const

如果此SceneTreenetwork_peer处于服务器模式(正在侦听连接),则返回true


  • notify_group notify_group(group: String, notification: int)

将给定的通知发送到group的所有成员。


  • notify_group_flags notify_group_flags(call_flags: int, group: String, notification: int)

将给定的通知发送给group的所有成员,并遵守给定的GroupCallFlags


  • queue_delete queue_delete(obj: Object)

将要删除的给定对象排队,将对Object.free的调用延迟到当前帧之后。


  • quit quit(exit_code: int = -1)

退出应用程序。进程exit_code可以选择作为参数传递。 如果此参数为0或更大,它将在退出应用程序之前覆盖定义的OS.exit_code


  • reload_current_scene reload_current_scene()

重新加载当前活动的场景。

成功返回OK;如果尚未定义current_scene,则返回ERR_UNCONFIGURED;如果无法将current_scene加载到PackedScene中,则返回ERR_CANT_OPEN;如果无法在场景中返回,则返回ERR_CANT_CREATE实例化。


  • set_auto_accept_quit set_auto_accept_quit(enabled: bool)

如果true,应用程序将自动接受退出。

对于移动平台,请参阅set_quit_on_go_back


  • set_group set_group(group: String, property: String, value: Variant)

在给定组的所有成员上将给定的属性设置为value


  • set_group_flags set_group_flags(call_flags: int, group: String, property: String, value: Variant)

将给定组的所有成员上的给定属性设置为value,并遵守给定的GroupCallFlags


  • set_input_as_handled set_input_as_handled()

将最新的InputEvent标记为已处理。


  • set_quit_on_go_back set_quit_on_go_back(enabled: bool)

如果true为真,则应用会在返回时自动退出(例如,在Android上)。

要在禁用此选项时处理“返回”按钮,请使用MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST


  • set_screen_stretch set_screen_stretch(mode: int, aspect: int, minsize: Vector2, shrink: float = 1)

将屏幕拉伸配置为给定的StretchModeStretchAspect,最小尺寸和缩小比率。