2

我不熟悉线程、SDL 以及图形的一般工作方式。我一直在浏览 LazyFoo 的所有 SDL 教程,对我帮助很大。但在他关于多线程的教程中,他评论说你不应该在单独的线程中使用视频功能,否则可能会导致问题。我很好奇应该怎么做,因为我对图形和线程的理解还很模糊。

由于我的一个项目是射击游戏,我想知道是否应该创建一个线程来显示所有图形,一个线程接收所有玩家为他的船输入,另一个线程用于敌方 AI。

如果这不是应该这样做的,(我认为这是错误的)是否有人对如何使用用户输入实现图形和使用线程的敌人 AI 有任何建议?

对于 Lazyfoo 的教程,这是链接: http ://lazyfoo.net/SDL_tutorials/

4

2 回答 2

0

刚开始时,根据职责分离线程会容易得多。解决这个问题的更“正确”的方法是使用线程池,这会导致更大的可伸缩性。那里有预先构建的线程池解决方案,包括一个用于 SDL 的解决方案。

如果您使用 OpenGL 或 DirectX 进行渲染,我怀疑对这些 API 的调用会产生很多开销,因此您至少可以在主线程中执行游戏循环的(必要的)顺序部分:获取输入、更新世界模型(包括使用人工智能计算的结果),渲染。然后你可以让人工智能、网络线程并行运行。因此,您无需担心单独的渲染线程。有一个例外:如果您在软件中进行大量计算(我的意思是在光线投射/光线跟踪中)渲染,那么您最好以某种方式在并行线程上执行渲染“逻辑”,写入帧缓冲区,然后在你的主线程中执行上面给出的序列,并使用例如 blitting 你准备好的帧缓冲区。GDI。

关于渲染,是的,仅从单个线程(主线程)进行的 AFAIK 渲染通常是(或曾经是)一个好主意,以确保例如。使用 OpenGL 你没有问题。再次AFAIK这不再是主要平台上的问题。另外,我不知道 GDI 或 DirectX 是否分别有相同的问题。

于 2011-12-10T12:10:02.977 回答
-1

一般来说,我认为将渲染线程与 UI/AI 线程分开是个好主意。它有助于使您的代码更易于理解。由于源代码中有许多游戏可用,您为什么不看看他们是如何做到的呢?

于 2009-04-13T02:01:18.473 回答