MainLoop

Inherits: Object

Inherited By: SceneTree

游戏主循环的抽象基类。

描述

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

在应用程序启动时,必须向操作系统提供一个MainLoop实现;否则,应用程序将退出。除非从命令行提供一个主Script(例如:godot -s my_loop.gd),这将自动发生(并且创建一个SceneTree),并应该是一个MainLoop实现。

下面是实现简单MainLoop的脚本例子:

  1. extends MainLoop
  2. var time_elapsed = 0
  3. var keys_typed = []
  4. var quit = false
  5. func _initialize():
  6. print("Initialized:")
  7. print(" Starting time: %s" % str(time_elapsed))
  8. func _idle(delta):
  9. time_elapsed += delta
  10. # Return true to end the main loop.
  11. return quit
  12. func _input_event(event):
  13. # Record keys.
  14. if event is InputEventKey and event.pressed and !event.echo:
  15. keys_typed.append(OS.get_scancode_string(event.scancode))
  16. # Quit on Escape press.
  17. if event.scancode == KEY_ESCAPE:
  18. quit = true
  19. # Quit on any mouse click.
  20. if event is InputEventMouseButton:
  21. quit = true
  22. func _finalize():
  23. print("Finalized:")
  24. print(" End time: %s" % str(time_elapsed))
  25. 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

bool

_idle ( float delta ) virtual

void

_initialize ( ) virtual

void

_input_event ( InputEvent event ) virtual

void

_input_text ( String text ) virtual

bool

_iteration ( float delta ) virtual

void

finish ( )

bool

idle ( float delta )

void

init ( )

void

input_event ( InputEvent event )

void

input_text ( String text )

bool

iteration ( float delta )

信号

  • on_request_permissions_result ( String permission, bool granted )

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

常量

  • 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 _finalize ( ) virtual

在程序退出前调用。


当用户在系统全局菜单(如Mac OS的菜单栏)中执行动作时被调用。


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

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


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


不应手动调用,而应重写_input_event。在Godot 4.0中会被删除。


  • void input_text ( String text )

不应手动调用,而应重写_input_text。在Godot 4.0中会被删除。


不应手动调用,而应覆盖_iteration。在Godot 4.0中会被删除。