代码之家  ›  专栏  ›  技术社区  ›  Khalid Abuhakmeh

二维游戏引擎应该是什么?[关闭]

  •  31
  • Khalid Abuhakmeh  · 技术社区  · 15 年前

    好吧,所以我最终写了自己的游戏引擎,基于XNA,我只是想知道我还需要什么来制造一个完整的引擎。

    这就是发动机里的东西:

    • 物理(法瑟物理)
    • 粒子引擎(水银项目)
    • 二维摄像机
    • 输入处理
    • 屏幕管理(菜单、暂停屏幕等)
    • sprite(动画、sprite工作表)
    • 还有XNA之类的东西。

    我是否遗漏了对游戏引擎至关重要的东西?

    16 回复  |  直到 11 年前
        1
  •  18
  •   Organiccat    15 年前

    发动机的主题或市场。如果你做的不仅仅是基本的图形引擎,你会想要专注于你的引擎市场,比如RPG,战略,拼图,平台,动作,或者FPS(好的,不是FPS)。

    这将有助于您将自己指向所需的方向,以便在不询问我们的情况下对发动机进行进一步增强。一个引擎,比如说,虚拟引擎,可以做很多事情,但是它最擅长的是它为FPS游戏所做的。同样,您应该调整您的引擎,使其适合特定的感兴趣的领域,因此是为这种类型的游戏而选择的。

    你可以把它概括到一点上,但是你要意识到你的引擎越通用,它就越难编程,无论是时间上的还是技术上的。如果有更具体的平台可用,其他程序员也不太可能使用通用引擎(除非仅此而已)。或者只写他们自己的,因为修改一个通用引擎和创建自己的引擎一样困难。

        2
  •  57
  •   Stack Overflow is garbage    13 年前

    你以一种颠倒的方式接近它。

    您的发动机应具备以下功能:

    你第一场和第二场比赛的所有代码都很常见。

    首先,写一个游戏。不要写引擎,因为,正如你发现的,你不知道它应该包含什么,或者应该如何设计。改为写一个游戏。

    一旦你玩了游戏,写下 另一个 游戏。然后,完成后,检查第二个游戏的代码。第一场比赛中有多少是重复使用的?

    任何被重用的东西都应该被重构成一个单独的项目。那个项目现在是你的游戏引擎。

    这并不意味着你不应该计划,或者不应该尝试编写好的代码。但要确保您正在努力实现一些具体的东西,在这些东西中,您可以区分好的实现和坏的实现。一个好的游戏实现,是一个有效的,有趣的,不会崩溃。先编写代码来实现这些目标。

    引擎的良好实现?这更棘手。渲染器的良好实现是什么?人工智能框架?粒子系统的?最终,唯一确定你是否有一个好的引擎的方法就是看它工作得有多好。 在实际游戏中 . 所以如果你没有游戏,你就没有办法评估你的引擎。如果你没有办法评估你的引擎,你就没有办法判断你写的代码是否真的有用。

        3
  •  12
  •   Zifre    15 年前

    还有一些事情:

    • 路径发现 -对人工智能非常有用
    • 人工智能-可能-取决于你希望引擎有多通用。
    • 高分
    • 重放 -让高分变得更有趣,因为你可以看他们。
        4
  •  6
  •   gnovice    15 年前

    一对夫妇的想法:

    • 人工智能(可能只是简单的人工智能工具,比如 pathfinding algorithms )
    • 保存全部或部分游戏状态(用于稍后暂停和重新启动或保存高分)。
        5
  •  5
  •   Marcel Jackwerth    15 年前

    我认为你涵盖了2D引擎的一般要求。我唯一会错过的就是:

    • 图形用户界面库

    同时,为了使开发过程更容易:

    您还可以在XNA现有内容的基础上添加另一层:

    • 完全免费的网络/大厅实施
    • 对多个控制器的更抽象的处理(在游戏过程中的掉入/掉出,如参见Resident Evil 5 Coop)-可能基于事件

    最后,您可以添加一些“ready2use”明暗器。也许从中断的 FaceWound (来自“加里的mod”开发者)。

        6
  •  2
  •   Reed Copsey    15 年前

    这取决于游戏,但另一个经常需要的是一个好的网络框架。

    许多现代游戏,包括二维游戏,似乎都有某种形式的网络。

        7
  •  1
  •   dicroce    15 年前

    3D加速应该在2D引擎中。

    使用现在大多数人拥有的3D硬件是让你的2D游戏获得惊人性能的最好方法…

        8
  •  1
  •   Nikwin    15 年前

    良好的碰撞检测非常有用。如果您有效地实现了它,它确实会减少每帧所需的时间。除此之外,在我的引擎(PyGame)中,我有一种方法将主屏幕分为多个子屏幕,我觉得这很有用。

        9
  •  1
  •   Lars    15 年前

    简单的PixelPerfect碰撞检测。不是法瑟物理学。简单的绘图程序,如绘制线、绘制圆等。

        10
  •  1
  •   unwind    15 年前
    • 动画框架,这样你可以说:拿着这个精灵,朝这个方向移动,使用这个速度,加速度等沿着这个路径走
    • 基本的图形用户界面系统。不要实现一个完整的窗口,而是一些基本的东西,比如指针和按钮,等等——保持基本
    • 用于显示fps、sprites数量等的调试组件

    还有一件好事就是做一些游戏,然后你会很快看到你在每一个游戏中重复做的事情,然后研究如何把它输入引擎。

        11
  •  1
  •   AvrDragon    13 年前
    • 二维照明系统是一个很好的高级功能。你可以使用 Krypton 为此。
    • 地图编辑器。或者更好地支持任何与“兼容的平铺图格式” Tiled Map Editor “。所以你可以用瓷砖。
    • 游戏操作的调度程序/计时器。
    • 屏幕擦除效果,如翻页、淡出等,以便在屏幕之间进行良好的转换。
    • 具有内置视差的游戏层也很有用。
    • 在游戏控制台中处理命令或脚本而不重新启动。
    • 轻松加载纹理地图集作为精灵或动画。
        12
  •  1
  •   Zero    11 年前

    干得好, 实际上,我们(我和我的一些朋友)也在开发游戏引擎, 我们已经了解了你提到的所有内容,而且我们还有以下内容。

    • 音频管理器 :处理背景音乐和声音的简单类 在XNA中的作用。
    • 视频管理器 :这并不复杂,一个处理视频的简单类 在XNA玩。
    • 效果管理器 :负责布卢姆,布卢姆, 黑色/白色……等。

    祝你好运:

        13
  •  0
  •   Neil N HLGEM    15 年前

    平铺重复工具。允许用户添加/创建瓷砖,并操作边缘以获得平滑的重复图案的功能。

        14
  •  0
  •   Steven Evers    15 年前

    根据目标游戏类型,包括带有节点和边缘注释的导航图。(适用于许多游戏,但不适用于使用二维图形引擎制作的令牌侧滚动条)

    • 生成它们的组件(通过洪水填充算法)。
    • 确保包括所有主要的路径查找/规划算法(a*/dijkstra/etc),以遍历这些图。

    这其中的陷阱是,您必须定义引擎的“映射”是什么,这可能会限制引擎的用户。

    相关事项:

    • 基于位置的触发器(玩家进入一个不可见的圆圈,然后发生了一些事情-队列切割场景、开始伏击等)。我会说,为触发器提供一个基类,并实现一些基本类来显示它是如何完成的(例如,武器拾取等)。
    • 一些游戏引擎实现网络化(尽管这是“xna东西”的一部分)
        15
  •  0
  •   Dunk    15 年前

    最重要的是,要包括最有用的工具是容易使用您的引擎。也许用你的引擎来创建工具。我相信你会发现很多这样的缺陷。

        16
  •  0
  •   Community Sam Holder    7 年前

    嗯。这个列表是一个“内部”列表。做一个好的引擎就是做一个好的“外部”列表。 举个例子,看看UE3——它之所以出现在这里,是因为它有很好的工具。您需要工具来创建世界,创建最佳的资源包(它也应该在内部列表中;-)用于冲突对象规范等。 加上 Organiccat answer 你应该决定技术水平。您可以选择简单的精灵,也可以选择奇特的效果(因此需要着色,使用它需要基础设施)