【问题标题】:2D game development basics2D游戏开发基础
【发布时间】:2011-03-09 20:00:43
【问题描述】:

我想用 C 语言从头开始编写一些简单的类似马里奥的游戏。但老实说,我不知道该怎么做,而且我找不到任何好的教程,这是免费的。

但是对于实际的问题,到目前为止我只编写了 WinAPI 程序,所以所有事件处理和用户输入都由操作系统处理,工作量很小,但是要开发游戏,例如带有非矩形按钮的菜单、动画,所以,我想,在 WinAPI 中没有这样的东西可以帮助我解决这个问题,而不仅仅是一些基本的例程鼠标指针定位和按键。

那么,编写游戏的正确方法是通过为玩家、敌人甚至是自己的背景操作对象来编写游戏引擎的整个绘制部分,而不仅仅是使用 directdraw 输出到屏幕?

编辑: 我真的很想学习如何从头开始编写游戏,因为这一定是很棒的编程经验,而且如果您考虑像 DOS 上的 Commander Keen 这样的游戏,它没有框架或库创建,但仍然非常棒。

【问题讨论】:

  • 当心你将要完成的工作。我在业余爱好游戏开发领域很活跃,如果我告诉你 70% 的失败是由于糟糕的设计,或者根本没有设计,或者没有考虑这可能需要多少工作,这并不过分,毕竟它并不那么有趣如果你完成了引擎的东西等等。
  • 你有什么特别的理由使用 C over 例如 C++ 或其他 OO 语言(我只是认为它会让生活更轻松)?另外,DirectDraw 很久以前就死了(如果我没记错的话是 DX7),现在它本质上是 Direct3D 的一部分(我很久没有接触过 DX,但我认为它现在被称为 Direct2D)。此外,请考虑使用 OpenGL 而非 DX,因为您的代码将更容易移植到非 Windows 系统。

标签: c 2d-games


【解决方案1】:

查看 SDL 库是一个很好的方法。我并不是说它一定是 2D 游戏的最佳库,但它很容易上手,并且网络上充斥着使用 SDL 编写的简单自制 2D 游戏的教程和开源代码示例。

【讨论】:

    【解决方案2】:

    我也推荐 SDL,但您绝对应该看看 lazyfoo 教程,这很棒。

    【讨论】:

      【解决方案3】:

      我也使用过 SDL,但请尝试查看 HGE。它至少需要 DirectX 8.0,因此您的应用程序只能在 Windows 上运行,但在他们的论坛上,您会发现许多关于如何将其移植到 OpenGL 的主题。在我看来,HGE 会比 SDL 更容易学习,因为 SDL 是一个低级库,你必须学习如何自己处理很多事情。 HGE 更愿意开箱即用。

      【讨论】:

        【解决方案4】:

        当我开始编程时,我开始使用 Allegro 进行编程,回到过去的 DOS 时代。它是第一个与 SVGA 库一起使用的可用库,并且具有良好的 sprite 支持。然后版本 3 来了,他们增加了对 windows 的支持(使用 GDI 和 Directy X,你可以在运行时选择使用哪个引擎)。 linux 移植成功了,一切都很好。

        这是一个非常基本的 2D 库,它将教您非常基础的图形和动画。现在它甚至包含了非常需要的音频支持(嗯,我还记得 V 2.9X...)。它们是第 5 版的测试版,我认为这是一个值得您研究的有趣项目。

        http://www.talula.demon.co.uk/allegro/

        【讨论】:

        • Allegro 5 甚至还有完整的 2D 横向卷轴游戏演示
        【解决方案5】:

        你们在说什么,WinAPI 有低级绘图例程。

        虽然使用像 SDL 这样已建立的库可能是一个更好的主意,但您可以轻松地创建自己的 WinAPI 绘图例程抽象。

        然后只需创建包含所有绘图指令和解释输入的 while 循环即可。对于 2D 游戏来说,这并不太难。

        【讨论】:

          【解决方案6】:

          简而言之,是的 - WinAPI 中没有什么可以帮助您。但是,有许多游戏引擎可供您构建游戏,而创建游戏本身需要大量繁琐的工作。用谷歌搜索一下会有所帮助。

          (个人建议:虽然它在技术上是一个 3D 引擎,但像 Unity 这样的引擎是一个出色的引擎,其中包含用于创建 2D 游戏的教程。Unity 不是 C,但它确实让你生活容易多了……)

          【讨论】:

            【解决方案7】:

            编辑:我实际上想学习如何从头开始编写游戏,因为它必须是很棒的编程经验,而且如果您考虑像 Commander Keen 在 DOS 上这样的游戏,它是在没有框架或库的情况下创建的,但仍然非常棒。

            这其实不太对。 Commander Keen(以及任何 DOS 游戏)确实使用库:由 DOS、BIOS 等提供的库。如果没有一种或另一种形式的库,您将无法使用 C 做任何有用的事情。对于游戏编程,您真的会想把所有底层细节留给其他人。

            我推荐Allegro 作为入门游戏编程库。

            【讨论】:

            • 抱歉,我不清楚,是的,他们使用过,但仅用于控制输入,以及将整个渲染场景发送到 LCD。 (实际上CRT比)。但是没有像今天的引擎那样可以帮助游戏开发的 DOS 例程,比如管理屏幕对象,也许是物理等等。
            • 实际上大多数 DOS 游戏只调用 BIOS/DOS 进行文件系统处理,几乎完全取代了 DOS 键盘处理程序。
            • 在这种情况下,几乎任何图形库都可以。 Allegro 和 SDL 都有方法可以逐个像素地操作显示。 PixelToaster (code.google.com/p/pixeltoaster) 是另一个有点简约的选择,如果您想尝试一下 C++。
            • @spudd86:但为了做到这一点,您仍然需要某种库来设置中断处理程序,或者您需要下拉到程序集中(实际上是您自己的库)。当然,现在我们肯定会偏离 OP 的观点 ;)
            【解决方案8】:

            看看这个Game dev starting

            他们确实有大量与游戏编程相关的资源和很多初学者的东西。 SDL 很好,但您应该在开始编码之前考虑学习基本的游戏技术,甚至在开始考虑您使用的 api/lib 之前。

            弄清楚你需要多少“智能”(Ki),考虑加载/保存一个早期的时间,......如果你想完成你的项目,你应该记住这么多事情。 你需要游戏编辑器吗? (也......工作)声音/图形呢?自己编写所有这些东西将花费大量时间(如果您没有经验)。创建内容是另一个可能会消耗大量时间的大问题,如果你真的做到了。

            也许它会帮助您了解一些开发孩子,因为这会让您了解他们的引擎是如何工作的。喜欢这个(过时的)Dev kid

            【讨论】:

              【解决方案9】:

              几天前我刚刚开始了一个类似的项目,您可以通过GitHub查看它。
              它应该给你一些关于游戏结构的想法。以及带有碰撞的滚动 2D 地图的一些细节(如果你想让它 100% 没有错误,这会变得非常复杂)。哦,它使用 SDL,正如这里许多人已经建议的那样。

              对于我来说,这是我的第一个 C 项目。但我不得不承认,我之前在 Java 和 Python 中做过类似的事情,所以这是我快速学习 C 的好方法。而且因为它是学习而不是任何有成效的东西,所以我使用的是普通的 C99,这使得任务更加“有趣”。

              但回到游戏,你真的需要考虑你的设计开始编码之前,把它写在一张纸上,或者如果你像我一样,你不有树的东西可以用伪代码写出来。

              尽可能多地考虑可能的游戏状态,没有什么比仅仅因为之前没有考虑过功能 XYZ 就不得不从头开始重新实现整个玩家/地图/任何东西更糟糕的了。

              设计很重要,如果你一开始就没有目标,你的项目就会失败,就像我的Tuff 所做的那样,它也因为缺少音乐而失败了设计了敌人等等。

              说到图形等,请记住,游戏不仅仅包含纯代码。如果您不擅长图形,请在设计时考虑到这一点。因为当屏幕上唯一的东西是彩色矩形时,你很快就会失去动力。

              【讨论】:

                【解决方案10】:

                Action Arcade Adventure Set(最初作为一本书出版)可能是关于如何编写 2D 横向卷轴游戏的最完整的教程之一。虽然是较旧的参考,但开发 2D 横向卷轴的许多基本原理并未改变。

                downloads 的形式提供了完整的源代码示例和一些开发横向卷轴的工具。只有一个外部库用于处理图形基元。由于这是一个较旧的 DOS 程序,您可能必须使用像 DOSBox 这样的 DOS 模拟器或修改示例以适应更现代的环境。

                我建议您略读第 1 至第 9 章,并专注于第 10 至第 17 章。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-06-05
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-11-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多