MainLoop

继承: Object

继承人: SceneTree

类别: 核心

简要说明

游戏主循环的抽象基类。

方法

无效

_drop_files ( PoolStringArray files, int from_screen ) virtual

无效

_finalize ( ) virtual

bool

_idle ( float delta ) virtual

无效

_initialize ( ) virtual

无效

_input_event ( InputEvent event ) virtual

无效

_input_text ( String text ) virtual

bool

_iteration ( float delta ) virtual

无效

finish ( )

bool

idle ( float delta )

无效

init ( )

无效

input_event ( InputEvent event )

无效

input_text ( String text )

bool

iteration ( float delta )

常量

  • 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))

方法说明

当文件从OS文件管理器中拖动并放到游戏窗口中时调用。这些参数是文件路径的列表和产生拖动的屏幕的标识符。

  • void _finalize ( ) virtual

在程序退出前调用。

以自上次空闲帧以来的时间作为参数调用每个空闲帧(秒)。相当于 Node._process .

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

  • void _initialize ( ) 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中移除。

不应手动调用,重写 _input_event 相反。将在Godot 4.0中移除。

  • void input_text ( String text )

不应手动调用,重写 _input_text 相反。将在Godot 4.0中移除。

不应手动调用,重写 _iteration 相反。将在Godot 4.0中移除。