Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
MainLoop¶
Inherits: Object
Inherited By: SceneTree
游戏主循环的抽象基类。
Description¶
MainLoop 是 Godot 项目中游戏循环的抽象基类。它被 SceneTree 继承,SceneTree 是 Godot 项目中使用的默认游戏循环的实现,不过也可以编写和使用自己的 MainLoop 子类,来代替场景树。
在应用程序启动时,必须向操作系统提供一个 MainLoop 实现;否则,应用程序将退出。这会自动发生(并创建一个 SceneTree),除非从命令行提供一个 MainLoop Script(例如 godot -s my_loop.gd
,或“主循环类型(Main Loop Type)”项目设置被覆盖。
有一个实现简单 MainLoop 的示例脚本:
class_name CustomMainLoop
extends MainLoop
var time_elapsed = 0
func _initialize():
print("Initialized:")
print(" Starting time: %s" % str(time_elapsed))
func _process(delta):
time_elapsed += delta
# 返回 true 结束主循环。
return Input.get_mouse_button_mask() != 0 || Input.is_key_pressed(KEY_ESCAPE)
func _finalize():
print("Finalized:")
print(" End time: %s" % str(time_elapsed))
using Godot;
public partial class CustomMainLoop : MainLoop
{
private double _timeElapsed = 0;
public override void _Initialize()
{
GD.Print("Initialized:");
GD.Print($" Starting Time: {_timeElapsed}");
}
public override bool _Process(double delta)
{
_timeElapsed += delta;
// 返回 true 结束主循环。
return Input.GetMouseButtonMask() != 0 || Input.IsKeyPressed(Key.Escape);
}
private void _Finalize()
{
GD.Print("Finalized:");
GD.Print($" End Time: {_timeElapsed}");
}
}
Methods¶
void |
_finalize ( ) virtual |
void |
_initialize ( ) virtual |
_physics_process ( float delta ) virtual |
|
Signals¶
on_request_permissions_result ( String permission, bool granted )
当用户对权限请求作出反应时发出。
Constants¶
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
文本服务器被更改时,收到的通知。
Method Descriptions¶
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
会让它继续到下一帧。