我想每帧暂停游戏执行一秒钟。 然而,比赛一直没有恢复,这是为什么呢?
我在根/世界节点中使用以下 _process 函数:
func _process(delta):
get_tree().paused = true
await get_tree().create_timer(1).timeout
get_tree().paused = false
最终我想创建更多逻辑让游戏向另一个非 Godot 进程发送和接收信息,可能使用信号量和共享内存或其他一些 IPC。所以我不会像那样使用任何基于时间的暂停。也希望在那个方向上得到一些指示。我是 Godot 的新手。
比赛永远不会恢复,这是为什么?
表达式
get_tree().create_timer(1)
会创建一个SceneTreeTimer
,它不会在游戏暂停时执行。
如果您想要一个即使在游戏暂停时也会运行的计时器,请使用
Timer
(Node
),您可以通过设置其 process_mode
将其设置为即使在游戏暂停时也运行。
我还想指出,您可以在 Godot 中创建
Thread
,并让它们与 OS.delay_msec
一起睡觉。
最终我想创建更多逻辑让游戏向另一个非 Godot 进程发送和接收信息,可能使用信号量和共享内存或其他一些 IPC
与 Godot 的进程间通信没有太多选择。部分原因是游戏不经常使用它们,部分原因是很难(如果不是不可能的话)为 Godot 支持的平台实施可移植的解决方案。
因此,Godot 没有对命名信号量、命名管道和共享内存的内置支持。注意目标平台,您可以使用 C# 或 C++ 和 GDExtension 来访问这些功能。
将自己限制在 Godot 开箱即用的范围内,您可以:
OS.execute
将数据作为命令行参数传递来启动其他进程。 Godot 中的调用线程会在执行过程中阻塞,因此它可以从其他程序取回标准输出。 如有必要,其他程序可以执行您想要的任何通信方式。TCPServer
或 UDPServer
(您可能想要检查并关闭不是来自本地主机的连接)。或者,您可以让 Godot 使用 StreamPeerTCP
或 PacketPeerUDP
连接到服务器。还有HTTPClient
如果你需要在另一端通信的是一个网络服务器。