如何用C ++创建模块化/可replace的游戏/引擎代码接口?

我已经花了一些时间,可以用c ++进行试验,同时学习一些关于游戏编程的知识。 我最喜欢的方式是从创建一个简单的游戏引擎开始,但是在创建游戏的时候有一些实验和大量的建议,而不是引擎,我忘记了引擎,只是尝试构建一个游戏。

在这样做的过程中,我只需要在渲染代码(ogre3d)和物理(项目符号)和input/输出(OIS)的基础上进行攻击,并且在基本游戏思想的实验上加载一个地图,走动它。 我知道没有什么特别的,但这对我来说是成就。

从现在开始,我想了解更多有关创建可重复使用的代码的详细信息,而不仅仅是一个游戏。 我相信这些技能可以转化为更多的游戏。

基本上我想从一切交织到能够分离和replace个别部分。 例如,在OpenGL中构建一个3d渲染器dll /,在DirectX中构建另一个(作为dll)。 或者其他方面如物理,声音,input,networking等。

我正在学习Linux上的一般dll编程和共享库,但希望了解更多有关游戏特定接口的信息。 我也知道,我以前提到的Ogre3d已经跨平台,并能够同时opengl和direct-x …我不是说我想要更换一个这样的库,更使它能够被拔掉,有东西否则插入。

所以你知道。 我的编程经验已经C了一些更近的​​C + +。 最近我一直在用PHP和C#.NET(主要是PHP)进行Web开发。 我也有与C#,Python,Perl等平均经验。我是一个所有行业的杰克,我拿起东西很快。 我所希望的不是用勺子代码,而是一些研究概念的好地方(虽然如果你提供的话,我不会拒绝代码);)

你正在回答你自己的问题。 你写信给,或者创建你自己的接口。 然后用不同的方法来实现它们。

例如:

interface IDraw { public void DrawPoint(int x, int y); } class DirectXDraw : IDraw { public void DrawPoint(int x, int y) { // direct x code } } class OpenGLDraw : IDraw { public void DrawPoint(int x, int y) { // open gl code } } class Game { private IDraw drawEngine; public Game(IDraw drawEngine) { this.drawEngine = drawEngine; } public void Draw() { // use drawEngine here } } 

基本上这与其他领域没什么太大的区别,这是面向对象编程中常见的一种方法。 在C ++中,使用具有纯虚函数的AFAIK抽象类代替接口。