【发布时间】:2019-07-25 13:45:26
【问题描述】:
我正在开发一个游戏项目,我决定在服务器部分使用twisted。
这是一款多人射击游戏。
现在我想将一个主循环集成到游戏中(在服务器端)来处理输入和物理(用于子弹和玩家)。输入是通过 websockets 从客户端接收的。 我想让游戏循环运行游戏让我们说。 50 帧/秒。
如果我遵循in this atricle 中提到的实现游戏循环的方法。我在下面有这段代码
previous = getCurrentTime()
def loop():
double lag = 0.0
while True:
current = getCurrentTime()
elapsed = current - previous
previous = current
lag += elapsed
processInput()
while (lag >= MS_PER_UPDATE):
update()
lag -= MS_PER_UPDATE
send_state_to_connected_clients()
在文章中提到:
如果您要制作在网络浏览器中运行的游戏,您几乎无法编写自己的经典游戏循环。浏览器基于事件的特性排除了它
现在我很难理解它,因为这适用于 Twisted,因为它也是基于事件的。(我认为它所说的是while true 语句将永远阻塞反应器。所以我们可以做些什么来实现我们自己的扭曲循环,因为它是基于偶数的)
在同一篇文章的底部,它提到了以下几点:
使用平台的事件循环:
1. 很简单。您不必担心编写和优化游戏的核心循环
2.它与平台配合得很好。您不必担心显式地给主机时间来处理自己的事件、缓存事件或管理平台输入模型与您的输入模型之间的阻抗不匹配。
我正在寻找的是一种在扭曲中实现游戏循环的通用方法(对于网络多人游戏)。
- 我是否应该使用内置反应器通过LoopingCall 调用
我的
Loop?那么它如何处理这些问题 文章中提到。 - 我应该以某种方式创建自己的循环吗? (例如,通过使用线程/进程或其他一些结构来运行与反应堆分开的游戏循环)
- 我应该以某种方式创建自己的反应器实现吗?
【问题讨论】:
-
你可以在code.launchpad.net/game找到一个这样的例子
-
@Jean-PaulCalderone 谢谢,我之前在寻找答案时偶然发现了这一点。我查看了 network.py 文件 bazaar.launchpad.net/~game-hackers/game/trunk/view/head:/game/… 但找不到相关信息。我想将游戏循环集成到扭曲反应堆中