以最佳设计的开源游戏引擎为例?[关闭]


15

可能的重复:
在哪里可以找到好的(组织良好的)游戏代码示例?

我已经编写了一些C ++游戏,现在正在构建自己的游戏引擎和编辑器。

我对此设计有一些疑问,希望能找到一些很好的例子。

您认为最好的设计是什么?

必须是面向对象的。编程语言并不重要,但我更喜欢按以下顺序进行:C ++,C#,Java或其他类似语言。

编辑:为了澄清更多,我对游戏特定的代码不感兴趣。我想要通用游戏引擎。

编辑:本文解释了什么是游戏引擎:维基百科上的游戏引擎,这是已知游戏引擎的列表:维基百科上的游戏引擎的列表


3
你真的了解我的问题吗?我希望游戏引擎(不仅仅是游戏)。我要求必须面向对象。在您所说的线程中,答案仅适用于游戏(Doom3,Prototype等),并且还提供图形工具包(OpenSceneGraph),但该线程上没有关于“游戏引擎”的具体说明...您可以关闭或删除我的问题,如果您不喜欢它,但我不理解不赞成投票的理由... :(我的问题一样
Dani

2
为了进一步阐明,我对游戏特定的代码不感兴趣。我想要通用游戏引擎。
Dani

3
有一个区别:并非所有游戏都在通用引擎上运行。Doom3具有特定于FPS的引擎,原型不同,依此类推...可能是它们有共同点(资源管理,脚本...),但这与我的问题无关。我的问题从短语“我已经编写了一些C ++游戏”开始。我重申:我的需求是找到一个好的通用游戏引擎源代码。不是搜索可重用代码的游戏源。
丹妮

1
毁灭战士3具有“ FPS特定引擎”,但也具有通用引擎所需的所有部分-如您所说,资源管理和脚本编写,3D渲染,物理等等。它是一个通用引擎,功能更多,而不是更少。

2
@Joe Wreschnig我倾向于在这个话题上同意@Dani。尽管所有游戏均由某种形式的引擎提供动力,但用于“一次性”引擎和旨在用于多个游戏的引擎的架构模式却大不相同,即使它们都具有脚本,资源管理,3D渲染,等组件。此外,查看由同一工作室开发的引擎上构建的游戏的代码可能不是最明智的选择,因为它无法真正表明您在第三方环境中引擎的灵活性和易用性。
阿里·帕特里克

Answers:


6

我认为构建游戏引擎的最佳方法是从您已经非常了解的内容开始,并添加乏味或重复的功能。

例如,我使用Python / pygame(这是一个SDL包装器)做了很多事情,我相当喜欢这个系统,但是有三件事困扰着我:

  • 构建动画循环非常繁琐,而且几乎都一样。
  • 基本的精灵对象非常有限。我想要一种改进的Sprite,它具有方向和速度,能够处理各种屏幕边缘条件,多个图像和多个碰撞方案。
  • Pygame没有用户界面功能。我想要
    可以轻松添加到游戏中的简单标签,按钮和数字选择器。

围绕这些功能创建面向对象的包装器相对容易。看一下第10章和此处提供的Game Engine文档:http : //aharrisbooks.net/pythonGame/

(这是作为一本书的一部分编写的,但是即使您不想要这本书,也欢迎您使用游戏引擎。)

第10章介绍了构建基本2D游戏引擎的动机和技术。在构建自己的产品时,您可能会喜欢它。实际的语言并不那么重要(当然,您需要使用OOP语言来支持OOP。)如果您已经在C ++中使用SDL,则可能首先要使引擎适应C ++ / SDL。


8

久负盛名的Quake(ID技术)引擎设计经受了时间的考验,可能是有史以来最成功的游戏引擎设计。自渲染器以来,除渲染器外的所有内容在90年代中期以来一直没有变化,并且仍在ETQW等现代游戏中使用。

GPL下提供了该引擎的四个迭代的完整源代码(第1至第3次地震,加上Wolf ET)。可能有一百多个积极开发的,由社区支持的,基于Quake的游戏引擎,这些引擎在现代时代一直很重要。尤其值得一看的是XreaL出色的渲染器和ioQuake3忠实地维护了针对现代硬件优化的Quake 3。同样,对于引擎的最新“官方” ID版本,也可以使用游戏逻辑(而不是整个引擎)。

即使您最终不使用此游戏引擎,也值得研究其深思熟虑的客户端-服务器分离架构以及将游戏逻辑与低级细节隔离开来。


1
不过,我不会完全称呼Doom3之前的id技术面向对象。
Tetrad

3
不,不是面向对象的,但是正如我所说,这值得研究。我是说来吧,只是因为它的程序性并不意味着它会给您带来眼癌的危险!;)
Max E.

6

Ogre3D渲染库非常接近引擎代码,从我听说的所有帐户来看,它的设计都非常好,非常面向对象。

http://www.ogre3d.org/


+1很棒的引擎。谢谢Tetrad!我已经知道了,但是我从未使用过,也从未看到过它的源代码。您知道它是否集成了AI(例如,路径查找等)
Dani

3
我认为这只是与渲染相关。
Tetrad 2010年

2
Ogre仅是图形渲染库。面向对象的图形渲染引擎。
乔纳森·斯特恩伯格

0

在谈论游戏引擎时,我想您正在考虑的不是渲染引擎,声音引擎,物理引擎,输入引擎等。

因此,您可能正在考虑游戏体系结构,AI或设计模式/系统等,它们用于将软件结构化以管理数据和其他组件,以创建某种场景/场景/幻觉,从而产生可管理的规则集,调整以创建实际的“视频游戏”。

这是视频游戏的真正顶层,我什至尝试学习一些有关它的知识,它庞大,复杂,并且在所有其他主题上需要大量知识。想象一下,您想从零开始重建替代现实,随时跟踪并计算每个事件,并在任何时刻从这些事件中重新生成准确的数据:对于每种游戏,都有某种子集游戏引擎,而我不会认为实际上有可能制造出一种数学上足够快的通用引擎。即使对于您只控制一个角色的游戏,仍有很多事情可能会发生变化,并且仍然需要游戏改变整个架构。

娱乐业不像其他计算机科学领域那样受到开放源代码的良好服务,只是因为娱乐具有不同类型的许可证类型,其中涉及艺术许可证:游戏产品仅由客户支付,而AFAIK仅由客户支付似乎没有足够适合您的引擎:Hord3d,NeoAxis,blendelf,Panda3D。但是我无法保证您会像Unity,Torque,C4等工具一样易于使用。请记住,在图形渲染器中,游戏引擎是您在游戏制作中会找到的最困难的软件类型。


0

对我而言,将Python与Pygame结合使用是一个很好的解决方案。也许Python有点慢,但是对于当今的计算机而言,如果您只是尝试优化游戏,那没关系。Pygame在原始pygame的站点上有非常好的文档。但是首先要开始学习本教程的基础知识。为了优化速度(转换图像,...),您将需要其他容易找到的示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.