MainLoop

继承: Object

派生: SceneTree

游戏主循环的抽象基类。

描述

MainLoop 是 Godot 项目中游戏循环的抽象基类。它被 SceneTree 继承,SceneTree 是 Godot 项目中使用的默认游戏循环的实现,不过也可以编写和使用自己的 MainLoop 子类,来代替场景树。

在应用程序启动时,必须向操作系统提供一个 MainLoop 实现;否则,应用程序将退出。这会自动发生(并创建一个 SceneTree),除非从命令行提供一个 MainLoop Script(例如 godot -s my_loop.gd,或“主循环类型(Main Loop Type)”项目设置被覆盖。

有一个实现简单 MainLoop 的示例脚本:

GDScriptC#

  1. class_name CustomMainLoop
  2. extends MainLoop
  3. var time_elapsed = 0
  4. func _initialize():
  5. print("Initialized:")
  6. print(" Starting time: %s" % str(time_elapsed))
  7. func _process(delta):
  8. time_elapsed += delta
  9. # 返回 true 结束主循环。
  10. return Input.get_mouse_button_mask() != 0 || Input.is_key_pressed(KEY_ESCAPE)
  11. func _finalize():
  12. print("Finalized:")
  13. print(" End time: %s" % str(time_elapsed))
  1. using Godot;
  2. public partial class CustomMainLoop : MainLoop
  3. {
  4. private double _timeElapsed = 0;
  5. public override void _Initialize()
  6. {
  7. GD.Print("Initialized:");
  8. GD.Print($" Starting Time: {_timeElapsed}");
  9. }
  10. public override bool _Process(double delta)
  11. {
  12. _timeElapsed += delta;
  13. // 返回 true 结束主循环。
  14. return Input.GetMouseButtonMask() != 0 || Input.IsKeyPressed(Key.Escape);
  15. }
  16. private void _Finalize()
  17. {
  18. GD.Print("Finalized:");
  19. GD.Print($" End Time: {_timeElapsed}");
  20. }
  21. }

方法

void

_finalize ( ) virtual

void

_initialize ( ) virtual

bool

_physics_process ( float delta ) virtual

bool

_process ( float delta ) virtual


信号

on_request_permissions_result ( String permission, bool granted )

当用户对权限请求作出反应时发出。


常量

NOTIFICATION_OS_MEMORY_WARNING = 2009

当应用程序超过其分配的内存时,从操作系统收到的通知。

仅限 iOS 平台。

NOTIFICATION_TRANSLATION_CHANGED = 2010

当翻译可能发生变化时收到的通知。会在用户改变区域设置时触发。可以用来响应语言的变化,例如实时改变 UI 字符串。可配合内置的翻译支持使用,比如 Object.tr

NOTIFICATION_WM_ABOUT = 2011

当发出“关于”信息请求时,从操作系统收到的通知。

仅限 macOS 平台。

NOTIFICATION_CRASH = 2012

当引擎即将崩溃时,从Godot的崩溃处理程序收到的通知。

如果崩溃处理程序被启用,这只会在桌面平台上实现。

NOTIFICATION_OS_IME_UPDATE = 2013

当输入法引擎发生更新时,从操作系统收到的通知(例如,IME 光标位置或组成字符串的变化)。

仅限 macOS 平台。

NOTIFICATION_APPLICATION_RESUMED = 2014

当应用程序恢复时,从操作系统收到的通知。

仅限 Android 平台。

NOTIFICATION_APPLICATION_PAUSED = 2015

当应用程序暂停时,从操作系统收到的通知。

仅限 Android 平台。

NOTIFICATION_APPLICATION_FOCUS_IN = 2016

当应用程序获得焦点时从操作系统收到的通知,即焦点将从操作系统桌面或第三方应用程序更改为 Godot 实例的任何一个打开窗口时。

在桌面平台上被实现。

NOTIFICATION_APPLICATION_FOCUS_OUT = 2017

当应用程序失去焦点时从操作系统收到通知,即焦点将从 Godot 实例的任何一个打开窗口,更改为操作系统桌面或第三方应用程序时。

在桌面平台上被实现。

NOTIFICATION_TEXT_SERVER_CHANGED = 2018

文本服务器被更改时,收到的通知。


方法说明

void _finalize ( ) virtual

在程序退出前调用。


void _initialize ( ) virtual

在初始化时调用一次。


bool _physics_process ( float delta ) virtual

在每个物理帧中调用,并将自上一个物理帧以来的时间作为参数(delta,以秒为单位)。相当于Node._physics_process

如果实现,该方法必须返回一个布尔值。true 会结束主循环,而 false 会让它继续下一帧。


bool _process ( float delta ) virtual

使用自上一个进程帧以来的时间作为参数(单位为秒),在每个进程(空闲)帧上被调用。相当于 Node._process

如果被实现,该方法必须返回一个布尔值。true 会结束主循环,而 false 会让它继续到下一帧。

Previous Next


© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7.

Built with Sphinx using a theme provided by Read the Docs.