等待计时器后游戏未暂停 - Godot 4

问题描述 投票:0回答:1

我想每帧暂停游戏执行一秒钟。 然而,比赛一直没有恢复,这是为什么呢?

我在根/世界节点中使用以下 _process 函数:

func _process(delta):
    get_tree().paused = true
    await get_tree().create_timer(1).timeout
    get_tree().paused = false

最终我想创建更多逻辑让游戏向另一个非 Godot 进程发送和接收信息,可能使用信号量和共享内存或其他一些 IPC。所以我不会像那样使用任何基于时间的暂停。也希望在那个方向上得到一些指示。我是 Godot 的新手。

timer delay godot gdscript pause
1个回答
0
投票

比赛永远不会恢复,这是为什么?

表达式

get_tree().create_timer(1)
会创建一个
SceneTreeTimer
,它不会在游戏暂停时执行。

如果您想要一个即使在游戏暂停时也会运行的计时器,请使用

Timer
Node
),您可以通过设置其
process_mode
将其设置为即使在游戏暂停时也运行。

我还想指出,您可以在 Godot 中创建

Thread
,并让它们与
OS.delay_msec
一起睡觉。


最终我想创建更多逻辑让游戏向另一个非 Godot 进程发送和接收信息,可能使用信号量和共享内存或其他一些 IPC

与 Godot 的进程间通信没有太多选择。部分原因是游戏不经常使用它们,部分原因是很难(如果不是不可能的话)为 Godot 支持的平台实施可移植的解决方案。

因此,Godot 没有对命名信号量、命名管道和共享内存的内置支持。注意目标平台,您可以使用 C# 或 C++ 和 GDExtension 来访问这些功能。

将自己限制在 Godot 开箱即用的范围内,您可以:

  • 让 Godot 使用
    OS.execute
    将数据作为命令行参数传递来启动其他进程。 Godot 中的调用线程会在执行过程中阻塞,因此它可以从其他程序取回标准输出。 如有必要,其他程序可以执行您想要的任何通信方式。
  • 通过本地主机进行通信。如果您需要 Godot 来监听传入的连接,您可以使用
    TCPServer
    UDPServer
    (您可能想要检查并关闭不是来自本地主机的连接)。或者,您可以让 Godot 使用
    StreamPeerTCP
    PacketPeerUDP
    连接到服务器。还有
    HTTPClient
    如果你需要在另一端通信的是一个网络服务器。
  • 通过在预先建立的位置读取和写入文件进行良好的老式通信。
© www.soinside.com 2019 - 2024. All rights reserved.