MainLoop¶
继承: Object
继承人: SceneTree
类别: 核心
简要说明¶
游戏主循环的抽象基类。
方法¶
无效 |
_drop_files ( PoolStringArray files, int from_screen ) virtual |
无效 |
_finalize ( ) virtual |
无效 |
_initialize ( ) virtual |
无效 |
_input_event ( InputEvent event ) virtual |
无效 |
_input_text ( String text ) virtual |
_iteration ( float delta ) virtual |
|
无效 |
finish ( ) |
无效 |
init ( ) |
无效 |
input_event ( InputEvent event ) |
无效 |
input_text ( String text ) |
常量¶
NOTIFICATION_WM_MOUSE_ENTER = 1002 ---鼠标进入游戏窗口时收到操作系统的通知。
在桌面和Web平台上实现。
NOTIFICATION_WM_MOUSE_EXIT = 1003 ---鼠标离开游戏窗口时收到操作系统的通知。
在桌面和Web平台上实现。
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 ---输入法引擎更新时从操作系统收到的通知(例如,更改输入法光标位置或组合字符串)。
特定于MacOS平台。
描述¶
MainLoop
是Godot项目的游戏循环的抽象基类。它在继承人 SceneTree 这是godot项目中使用的默认游戏循环实现,尽管也可以编写和使用自己的 MainLoop
子类而不是场景树。
应用程序启动时, MainLoop
必须向操作系统提供实现;否则,应用程序将退出。这是自动发生的(和 SceneTree 创建)除非 Script 从命令行提供(例如 godot -s my_loop.gd
,然后应该是 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
当文件从OS文件管理器中拖动并放到游戏窗口中时调用。这些参数是文件路径的列表和产生拖动的屏幕的标识符。
void _finalize ( ) virtual
在程序退出前调用。
以自上次空闲帧以来的时间作为参数调用每个空闲帧(秒)。相当于 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中移除。
以最后一个物理帧以来的时间作为参数调用每个物理帧(以秒为单位)。相当于 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中移除。