我想从头开始编写我的游戏引擎,以供学习之用,先决条件是什么,该怎么做?您向我推荐什么编程语言和东西?另外,如果您有不错的文章和书籍,那也将很棒。提前致谢!
我的编程语言和工具是:
- C / C ++仅使用C会好吗?
- 蟒蛇
- 的OpenGL
- 吉特
- 广东发展银行
我想从中学到什么:
- 核心游戏引擎
- 渲染/图形
- 游戏玩法/规则
- 输入(键盘/鼠标/控制器等)
在渲染/图形中:
- 3D
- 底纹
- 灯光
- 纹理化
我想从头开始编写我的游戏引擎,以供学习之用,先决条件是什么,该怎么做?您向我推荐什么编程语言和东西?另外,如果您有不错的文章和书籍,那也将很棒。提前致谢!
我的编程语言和工具是:
我想从中学到什么:
在渲染/图形中:
Answers:
您可以使用几乎任何渲染方法以几乎任何语言编写游戏引擎。例如,您可以使用控制台输出以bash编写游戏引擎。
因此,我认为最好在编写自己的引擎时定义要确切学习的知识。游戏开发中有很多“领域”。
核心游戏引擎
渲染/图形
人工智能
联网
游戏玩法/规则
声音
输入(键盘/鼠标/控制器等)
等等。从那里甚至可以包含子主题。在渲染/图形中
2d还是3d?
造型
底纹
灯光
纹理化
GUI / Hud /接口。
等等
这些子主题中只有一个可以消耗很多小时(或数年!)的学习时间!
因此,首先定义您想学习的内容。从简单开始。
使用任何您喜欢的语言-尽管有些语言更适合某些任务。例如,核心引擎和渲染可能最好使用“较低”级别的语言(例如C / C ++)来完成(如果您需要这样的性能);但最好使用高级语言来完成诸如AI或游戏规则之类的事情。没有什么可以说你不能混搭。您可以用C ++编写引擎,用C渲染(因为它与OpenGL配合良好),然后使用LUA编写游戏规则脚本等。
就示例而言,有一个名为Slick2D的游戏引擎。它是用Java编写的,并且是开源的。这是编写和设计得非常好的简单2d引擎的示例。您可以从中学习基本概念,例如游戏循环,管理游戏状态等。
如果您对C / C ++满意;我建议您看一下SDL / OpenGL。它可以处理一些客房服务,例如输入,声音,创建窗户等,并且可以专注于其他内容。
SDL + OpenGL是启动自定义游戏引擎的绝佳选择。
我个人使用的是C-ish版本的C ++,因为我发现它最适合我。我的意思是我不使用任何例外。这样做有两个原因:第一个和最重要的例外是始终要求例外安全代码,而使用OpenGL和SDL并不是那么容易实现。但是,更重要的是,通过这种方式很容易在C ABI上公开C ++对象,如果您尝试将脚本语言引入混合语言,这将非常有用。
我和您的情况相似,如果有人感兴趣,我会在博客(immersedcode.org)中写下有关SDL和OpenGL的一些经历。
对于一般架构,我有两个建议:如果您想要3D引擎,请参阅Jason Lander的《 Game Engine Architecture》一书。如果您想要的只是2D,请保持设计尽可能简单,并让自己受到XNA或其他项目的启发。
最后:不要到处调用OpenGL。帮自己一个忙,将它隔离在几个地方,以便以后可以在桌面OpenGL / OpenGL ES甚至DirectX之间进行切换。
除非实现细节可以帮助您,否则不要使用C。否则,请使用C ++,因为它可以提供功能更强大的语言,并且您始终可以选择以后不使用这些功能。我个人没有针对Python的东西,我从未使用过它。
我不建议对DirectX使用OpenGL,因为DX具有现代的面向对象的方法,该方法更加简洁,更易于理解/更易于出错。相比之下,OpenGL提供的接口非常差。
我得到的最后一件事是,我从很多人那里听说,我相信GDB完全是糟透了,而Visual Studio调试器是迄今为止最好的。这不是我的亲身经历,所以要加一点盐。
extern "C"
,它的适当用法使得编写C接口相当简单-特别是对于Python,在Boost中存在一个转换器,可以轻松地绑定到它。C ++语言功能如何?他们很棒。C ++语言功能的更多使用提高了项目的可靠性,并简化了大规模编码的工作,以实现可接受的非常小的性能折衷。比较起来,C的语言功能可悲。例如,正确使用现代C ++编译器可以保证没有内存泄漏。这样做,在C.