MainLoop
Inherits: Object
Inherited By: SceneTree
游戏主循环的抽象基类。
描述
MainLoop
是Godot项目中游戏循环的抽象基类。它被SceneTree继承,后者是Godot项目中使用的游戏循环的默认实现,不过也可以编写和使用自己的MainLoop
子类,而不是场景树。
在应用程序启动时,必须向操作系统提供一个MainLoop
实现;否则,应用程序将退出。除非从命令行提供一个主Script(例如:godot -s my_loop.gd
),这将自动发生(并且创建一个SceneTree),并应该是一个MainLoop
实现。
下面是实现简单MainLoop
的脚本例子:
extends MainLoop
var time_elapsed = 0
var keys_typed = []
var quit = false
func _initialize():
print("Initialized:")
print(" Starting time: %s" % str(time_elapsed))
func _idle(delta):
time_elapsed += delta
# Return true to end the main loop.
return quit
func _input_event(event):
# Record keys.
if event is InputEventKey and event.pressed and !event.echo:
keys_typed.append(OS.get_scancode_string(event.scancode))
# Quit on Escape press.
if event.scancode == KEY_ESCAPE:
quit = true
# Quit on any mouse click.
if event is InputEventMouseButton:
quit = true
func _finalize():
print("Finalized:")
print(" End time: %s" % str(time_elapsed))
print(" Keys typed: %s" % var2str(keys_typed))
方法
void | _drop_files ( PoolStringArray files, int from_screen ) virtual |
void | _finalize ( ) virtual |
void | _global_menu_action ( Variant id, Variant meta ) virtual |
void | _initialize ( ) virtual |
void | _input_event ( InputEvent event ) virtual |
void | _input_text ( String text ) virtual |
_iteration ( float delta ) virtual | |
void | finish ( ) |
void | init ( ) |
void | input_event ( InputEvent event ) |
void | input_text ( String text ) |
信号
当用户对权限请求作出反应时发出。
常量
- NOTIFICATION_WM_MOUSE_ENTER = 1002 —- 当鼠标进入游戏窗口时从操作系统收到的通知。
在桌面和网络平台上实现。
- NOTIFICATION_WM_MOUSE_EXIT = 1003 —- 当鼠标离开游戏窗口时从操作系统收到的通知。
在桌面和网络平台上实现。
- NOTIFICATION_WM_FOCUS_IN = 1004 —- 当游戏窗口获得焦点时,从操作系统收到的通知。
在所有平台上实现。
- NOTIFICATION_WM_FOCUS_OUT = 1005 —- 当游戏窗口未获得焦点时,从操作系统收到的通知。
在所有平台上实现。
- NOTIFICATION_WM_QUIT_REQUEST = 1006 —- 发出退出请求时,从操作系统收到的通知(例如用“关闭”按钮或 Alt+F4 关闭窗口)。
在桌面平台上实现。
- NOTIFICATION_WM_GO_BACK_REQUEST = 1007 —- 当发出返回请求时,从操作系统收到的通知(例如在 Android 系统上按下“返回”按钮)。
Android 平台特供。
- NOTIFICATION_WM_UNFOCUS_REQUEST = 1008 —- 当取消焦点的请求被发送时,从操作系统收到的通知(例如,另一个操作系统窗口想要得到焦点)。
目前没有支持的平台发送这个通知。
- NOTIFICATION_OS_MEMORY_WARNING = 1009 —- 当应用程序超过其分配的内存时,从操作系统收到的通知。
专用于 iOS 平台。
NOTIFICATION_TRANSLATION_CHANGED = 1010 —- 当翻译可能发生变化时收到的通知。可以由用户改变区域设置来触发。可以用来响应语言的变化,例如,实时改变 UI 字符串。在使用内置的翻译支持时很有用,比如 Object.tr。
NOTIFICATION_WM_ABOUT = 1011 —- 当发送“关于”信息的请求时,从操作系统收到的通知。
特定于 macOS 平台。
- NOTIFICATION_CRASH = 1012 —- 当引擎即将崩溃时,从Godot的崩溃处理程序收到的通知。
如果崩溃处理程序被启用,这只会在桌面平台上实现。
- NOTIFICATION_OS_IME_UPDATE = 1013 —- 当输入法引擎发生更新时,从操作系统收到的通知(例如,IME光标位置或组成字符串的变化)。
特定于macOS平台。
- NOTIFICATION_APP_RESUMED = 1014 —- 恢复应用时从操作系统收到的通知。
特定于 Android 平台。
- NOTIFICATION_APP_PAUSED = 1015 —- 暂停应用时从操作系统收到的通知。
特定于 Android 平台。
方法说明
- void _drop_files ( PoolStringArray files, int from_screen ) virtual
当文件从操作系统的文件管理器中被拖到游戏窗口中时被调用。参数是一个文件路径列表和拖动屏幕的标识符。
- void _finalize ( ) virtual
在程序退出前调用。
当用户在系统全局菜单(如Mac OS的菜单栏)中执行动作时被调用。
在每个空闲帧中调用,参数为自上一个空闲帧以来的时间(以秒为单位)。相当于Node._process。
如果实施,该方法必须返回一个布尔值。true
结束主循环,而false
让它进入下一帧。
- void _initialize ( ) virtual
在初始化时调用一次。
- void _input_event ( InputEvent event ) virtual
每当主循环接收到InputEvent时,就会调用。
- void _input_text ( String text ) virtual
废弃的回调,不做任何事情。使用_input_event来解析文本输入。在Godot 4.0中会被删除。
在每个物理帧中调用,并将自上一个物理帧以来的时间作为参数,delta
,单位为秒。相当于Node._physics_process。
如果实现,该方法必须返回一个布尔值。true
结束主循环,而false
让它进入下一帧。
- void finish ( )
不应手动调用,而应覆盖_finalize。在Godot 4.0中会被删除。
不应手动调用,而应覆盖_idle。在Godot 4.0中会被删除。
- void init ( )
不应手动调用,而应覆盖_initialize。在Godot 4.0中会被删除。
- void input_event ( InputEvent event )
不应手动调用,而应重写_input_event。在Godot 4.0中会被删除。
- void input_text ( String text )
不应手动调用,而应重写_input_text。在Godot 4.0中会被删除。
不应手动调用,而应覆盖_iteration。在Godot 4.0中会被删除。