Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为X11和Win32的简单游戏组织代码的最佳方式是什么_C++_Oop_Design Patterns - Fatal编程技术网

C++ 为X11和Win32的简单游戏组织代码的最佳方式是什么

C++ 为X11和Win32的简单游戏组织代码的最佳方式是什么,c++,oop,design-patterns,C++,Oop,Design Patterns,我正在为一个任务实现一个简单的游戏,理想情况下,它可以在Unix(使用X11的图形上下文)和Windows(使用Window的GDI)上运行,并具有两个窗口管理器。什么是最好的方法来构造代码,以便我可以简单地插入正确的C++类,使它运行在每个OS?< /P> 更具体地说,我如何从实际的游戏组件中完全分离出图形和窗口组件?(例如,使用观察者模式,以便游戏组件在平台特定的窗口组件上观察用户输入,创建用于加载/显示精灵的公共界面,创建另一个用于重新绘制的公共界面等)。谁应负责将每个对象的图形/设备上下

我正在为一个任务实现一个简单的游戏,理想情况下,它可以在Unix(使用X11的图形上下文)和Windows(使用Window的GDI)上运行,并具有两个窗口管理器。什么是最好的方法来构造代码,以便我可以简单地插入正确的C++类,使它运行在每个OS?< /P> 更具体地说,我如何从实际的游戏组件中完全分离出图形和窗口组件?(例如,使用观察者模式,以便游戏组件在平台特定的窗口组件上观察用户输入,创建用于加载/显示精灵的公共界面,创建另一个用于重新绘制的公共界面等)。谁应负责将每个对象的图形/设备上下文复制并粘贴到主屏幕的gc/dc?哪个组件应该包含主eventloop/窗口回调(如果它是主组件,那么每个平台是否需要两个版本的主组件?)


这两个基本要求是,我只能使用X11和GDI,而且它不能是多线程的。

游戏本质上很少依赖于平台。可以使用GLUT制作简单的游戏,并且使用#defines很容易维护两个版本的代码。回调由GLUT处理

通过这种方式,GLUT将使您能够为Windows和Linux编写几乎相同的代码。(因为创建上下文等问题已经由GLUT处理)


除非你的项目是明确地重写GLUT,否则我建议你坚持下去,继续编写你的游戏

窗口系统?这不是多线程的?我明白了…为什么块和字符需要存储设备上下文?不管怎样,你考虑过SDL吗?@BenVoigt请告诉我这一点。我甚至不确定哪个组件应该为每个精灵保存gc/dc。我是否需要一个资源管理器,将每个对象的加载gc/dc返回给graphics manager,graphics manager将复制并粘贴到主屏幕gc/dc?不允许使用Xlib和GDI以外的任何其他库…@user1054465:通常情况下,您会有一个拥有gc/dc并公开原语的渲染引擎。您可以让每个对象都知道如何渲染自己(并使用渲染引擎),或者让主渲染器遍历对象列表并渲染所有内容。后者可能快得多,因为主渲染器可以执行z顺序排序和剔除。@BenVoigt感谢您的输入。在具有呈现引擎(特定于平台)的情况下,该“类”是否会包含主eventloop(对于X11)或窗口回调过程(对于Win32),该过程也会处理用户输入?如果不是,哪个类应该包含主事件循环?不可避免的是,您最终会得到大量与平台相关的组件的代码,我正试图将其最小化……这实际上不是一个与平台相关的问题,而是一个面向对象的问题。当我不得不依靠一个库(Xlib或GDI)来完成所有这些工作时,我发现很难分离出窗口/渲染/用户输入处理组件并编写OO代码。编写GLUT的人已经编写了键盘输入等功能。这样,您就不需要接触特定于系统的库,如GDI或Xlib。在GLUT上工作的人已经知道了这一点,这样你就可以集中精力在C++中编写代码,编写OpenGL渲染例程。我不打算写这个游戏来赚钱,而是要学习如何在给定最小库集的情况下组织OO组件。我明白,如果你使用所有的高级库,你的生活会变得更轻松,你也能做一个更好的游戏,但这不是我的目标。如果是这样的话,那么你应该对GLUT特别感兴趣,因为它正是你描述的实现。祝你好运