我在业余时间使用 C++ 和 DirectX 进行 2D 游戏开发。我发现企业问题域建模方法并没有我想要的那么多帮助;)
我或多或少在寻找与基本游戏引擎设计等效的“最佳实践”。实体应如何相互交互,动画和声音应如何在理想世界中表示,等等。
谁有好的资源可以推荐?
Gamedev.net通常是我了解游戏开发社区中其他人在做什么的地方。
也就是说,恐怕你会发现游戏开发中“最佳实践”的想法比大多数人都更加不稳定。游戏往往是如此专业的应用程序,几乎不可能给出任何“一刀切”的答案。对俄罗斯方块有用的东西在小行星上将毫无用处,而对光环完美适用的模型对马里奥来说可能会惨遭失败。
您还会很快发现,对于纹理、网格、关卡、声音或动画格式,没有“行业标准”之类的东西。每个人都只是自己滚动或使用平台方便的任何东西。你偶尔会看到COLLADA之类的东西,这很好,但它仍然只是一种中间格式,旨在使编写导出器更容易。
如果您是游戏开发的新手,我的建议是:不要在第一次尝试时就因为代码结构而自杀。尝试一个简单的游戏,比如小行星,然后破解直到它工作,不管代码多么“丑陋”。使用您熟悉的简单格式,而不必担心它们在大型项目中的表现如何。不用担心插件、皮肤、编辑器或任何其他绒毛。让它工作!然后,当你第一次完成所有重要的游戏时,选择另一个,这一次清理你代码的一两个方面(但不要过火!)从那里,迭代!
我向您保证,这将使您比任何数量的在线“正确方式”的探索都更快(这来自一个做过很多探索的人)。
最后给你一个想法:如果你觉得在更明确的空间工作更舒服,看看XNA或类似的库。他们会预先定义一些要使用的“最佳”格式,并为您提供使用它们的工具,从而消除一些最初的猜测。
祝你好运,最重要的是记住:游戏(及其开发)应该很有趣!不要太沉迷于小事!
做一个游戏。完成后,再做一个。看看你喜欢什么和不喜欢什么,然后再做一个。
说真的,你可以阅读所有你想要的游戏设计“最佳实践”指南,但最终归结为体验。获得经验的唯一方法是坐下来编写游戏。在你这样做几次之后,你会更好地了解如何编写游戏。
几乎所有以Andre Lamothe为撰稿人的书。
GameDev也有大量文章。
我完全同意你的看法:企业应用程序不会让你为游戏编程做好准备。
我用 python、java、html/php 和 perl 创建了一些小型游戏。您可能知道,游戏的基本结构是:
主循环:
handleInput()
updateGameLogic()
renderImages()
现在,对于单屏、单线程游戏来说,这一切都很好,就像 70 年代或 80 年代的任何游戏一样。但我不认为这种结构特别适合多屏游戏(如 RPG)或其他更奇特的游戏。它的螺纹不太好。由于您需要处理各种输入,因此代码变得非常时髦。它不能很好地扩展。
但是,在我过多地抨击这个比喻之前,请注意这是一个很好的起点。我什至建议学习 Python/Pygame 并开始使用该工具而不是 C++ 构建游戏,这会使设计和实现过程复杂化。当您在 python 中进行原型设计时,您会看到游戏的成型速度更快,并且会遇到与语言无关的问题。
对我来说,游戏编程中最困难、最耗时的方面是图形和声音资产。虽然我有点像音频书呆子和业余音乐家,但创作可信且合适的音乐和 SFX 是一个独立的项目。我没有图形天赋,所以我必须依靠修改现有图像或使用免费提供的图像。幸运的是,有一种广泛可用的免费字体可用于游戏(除此之外几乎没有,因为它们几乎普遍都很糟糕)。
最后,没有什么比开源更能看出其他项目是如何处理这个问题的了。Westnoth之战是一款成熟的中型游戏。你可能想看看那里发生了什么。同样,python 中的游戏经常提供其源代码,因此您可以在那里查看数百个项目。您也可以反编译 atari 2600 ROM,但这不会告诉您太多关于今天的编程。旧的 VCS 是一种专用设备,它以非常依赖于系统的方式处理其应用程序。:-D
最后,我也喜欢 Andre LaMothe。我有他 1993 年的旧书,有 100 万页厚。尽管它仍然是一些通用游戏创意的不错参考,但其中很多都被当时不存在的免费可用库和框架的可用性所消除。
祝你的项目好运。
既然还没有提到,为什么不先看看已经发布到社区的现有引擎呢?既然你说的是 2D,我会回去推荐类似Abuse的东西。是的,它很古老,而且大部分有趣的部分都在 Lisp 中——但是这款游戏在一段时间内变得非常流行,这意味着他们做的事情是正确的。
碰巧的是,我认为这么多原始游戏都是用 Lisp 编写的,这是一个非常有用的教训。选择最强大的语言/工具,不要担心性能。您可以随时优化 C 中的慢速部分。