2

我即将开始我的大学课程单元项目。我希望用 C++ 制作一些有点像小行星的东西,复古的 2D 游戏。

我可以使用 SFML 之类的东西来做到这一点,这当然看起来是合乎逻辑的事情。但是我不能使用 SFML,因为默认情况下这些库在 Windows 上不可用。

要求是我的 c++ 代码必须复制并粘贴到任何 Windows PC(已安装 Visual Studio)上,然后从 Visual Studio 编译/运行。

我以前从未使用过 Windows API,但我觉得我可以使用它来打开一个窗口并在窗口内绘制一些 2d 图形。我对么?基本上这就是我需要做的所有事情:打开一个窗口,然后在上面画一些线。

这不是“你能为我做作业吗”类型的问题。如果这是我需要的工具,请有人指出我开始使用 WinAPI 的正确方向,如果不是,我可以使用其他东西吗?某种 OpenGL 库呢?OpenGL 2.0 或类似的库是否与 Visual Studio 捆绑在一起?

(如果它很重要,我认为我们正在使用 VS 2010。)

大家加油,

4

3 回答 3

1

本教程仅涵盖创建图形 Win32 应用程序所需的一切:

http://www.winprog.org/tutorial/

于 2013-11-08T00:29:55.050 回答
1

请注意,除非安装了 windows sdk,否则某些旧版本的 Visual Studio Express 无法编译 windows 应用程序。如果您的 Visual Studio 安装是这种情况,那么您将无法按照您列出的要求制作任何图形。

请有人指出我开始使用 WinAPI 的正确方向

当然。

要求是我的 c++ 代码必须复制并粘贴到任何 Windows PC(已安装 Visual Studio)上,然后从 Visual Studio 编译/运行。

您知道,您可以简单地将您使用的任何库的代码包含到您的项目中。因为像 libsdl 这样的项目使用许可许可证,所以您可以这样做。不过,不确定这是否会违反您的“规则”。

使用默认的 Visual Studio 安装,您不会得到太多。您绝对可以使用纯 winapi 创建一个窗口并在其上绘制一些东西。使用SetDIBitsToDevice之类的东西,您可以轻松地自己完成完整的软件渲染。

高级 OpenGL 功能需要包装库(如GLEW),但您可以自己初始化扩展和高级功能。Quake3 引擎做到了,所以你可以这样做。

使用 DirectX 很可能是没有问题的,因为它通常需要安装 SDK。您可以将所需的库/头文件复制/粘贴到项目的子目录中,但话又说回来,尚不清楚这是否会违反“规则”。

OpenGL 2.0 或类似的库是否与 Visual Studio 捆绑在一起?

默认 OpenGL 标头支持 1.1 版或类似的版本。但是,您可以使用wglGetProcAddress. 您也可以在代码中自己声明缺失的常量。值不值,那就另当别论了。

底线:

如果您想要完整的软件渲染,请使用 winapi 创建窗口,为“屏幕”(RGB 格式)分配 2d 缓冲区,并使用 SetDIBitsToDevice 或 StretchDIBitsToDevice 每帧将其 blit 到窗口上。如果 Windows 标头可用,那么它几乎可以在任何地方工作和编译。

您也可以尝试使用GDI 例程来绘制线条等,但我不确定这对游戏的效果如何。我已经有一段时间没有使用 GDI 了,但我认为如果你不小心的话,你会得到明显的闪烁。

如果您需要高级功能(例如,对于某些人来说,编写可以绘制纹理三角形或可以旋转 2d 精灵的软件渲染例程会很困难)考虑使用 OpenGL 并使用 wglGetProcAddress 加载缺少的函数。但是,如果您的大学(出于某种原因)拥有陈旧(或故障)的硬件,您可能希望将自己限制在旧版本的 OpenGL(OpenGL 1.1)上。原因是 OpenGL 1.1 由软件 OpenGL 渲染器支持,如果使用硬件加速出现某种问题,则会启用该渲染器。

于 2013-11-08T01:04:02.267 回答
1

您可以打开一个窗口,创建某种画布并在其上绘制,但我不知道这是由软件还是硬件渲染的。在您的情况下,如果它是一个非常小的游戏,您可能不需要硬件渲染。

但是,如果你想通过硬件渲染DirectX,你可以试试Mircrosoft XNA Game Studios 4.0,订阅 DreamSpark 的大学免费提供。

于 2013-11-07T22:18:07.260 回答