gpt4 book ai didi

complexity-theory - 降低游戏编程复杂性的技术

转载 作者:行者123 更新时间:2023-12-04 11:32:05 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

3年前关闭。




Improve this question




在业余时间,我将游戏编程作为一种爱好,各种不同的东西,目前没有什么很复杂的。诸如 2d 射击游戏、基于瓷砖的游戏、益智游戏等……

然而,随着这些游戏的发展,我发现管理游戏中不同子系统的复杂性变得越来越困难,比如界面、世界 View /模型、事件处理、状态(菜单、暂停等)、特殊效果等等。

我试图将连接保持在最低限度并减少耦合,但是其中许多系统需要以一种或另一种方式进行通信,而不需要一次将整个代码库放在脑海中。

目前我尝试将不同的子系统和子系统功能委托(delegate)给聚合在一起的不同对象,但是我还没有找到足够解耦的通信策略。

我可以使用什么样的技术来帮助我处理所有这些不同的子系统并处理不断增加的系统的复杂性,该系统需要足够模块化以促进快速的需求变化?

我经常发现自己问同样的问题:

  • 对象如何相互通信?
  • 处理特定子系统的代码应该去哪里?
  • 我应该一次考虑多少代码库?
  • 如何减少游戏实体之间的耦合?
  • 最佳答案

    啊,如果你的问题有一个好的答案就好了。那么游戏开发就不会那么困难、冒险和耗时了。

    I attempt to keep the connections to a minimum and reduce coupling however many of these systems need to talk in one way or another that doesn't require holding your entire code-base in your head at one time.



    他们会这样做,但他们通常不需要像人们最初认为的那样直接直接交谈。例如,当游戏状态发生变化时,通常会将值推送到其 GUI 中。相反,如果您可以只存储值并让 GUI 查询它们(可能通过观察者模式),那么您已经从游戏状态中删除了所有 GUI 引用。通常只需询问一个子系统是否可以从一个简单的接口(interface)中提取它需要的信息,而不必将数据插入就足够了。

    • How do objects communicate with each other?
    • Where should the code that handles specific subsystems go?
    • How much of my code base should I have to think about at one time?
    • How can I reduce coupling between game entities?


    这些都不是真正特定于游戏的,但这是游戏中经常出现的问题,因为有太多不同的子系统,我们还没有开发出标准方法。如果您进行 Web 开发,那么实际上只有少数已建立的范例:PHP 之类的“每个 URI 一个模板/代码文件”,或者可能是 RoR、Django 的“模型/ View 模板/ Controller ”方法,加上其他几个。但是对于游戏,每个人都在自己动手。

    但有一点很清楚:你不能通过询问“对象如何通信”来解决问题。有许多不同类型的对象,它们需要不同的方法。不要试图找到一种全局解决方案来适应游戏的每个部分——输入、网络、音频、物理、人工智能、渲染、序列化——这不会发生。如果您尝试通过尝试提出适合各种用途的完美 IObject 接口(interface)来编写任何应用程序,那么您将失败。先解决个别问题,然后寻找共性,边做边重构。您的代码必须首先可用,然后才能被认为是可重用的。

    游戏子系统处于他们需要的任何级别,没有更高的级别。通常我有一个顶级应用程序,它拥有图形、声音、输入和游戏对象(以及其他对象)。 Game 对象拥有 map 或世界、玩家、非玩家、定义这些对象的事物等。

    不同的游戏状态可能有点棘手,但它们实际上并不像人们想象的那么重要。暂停可以编码为 bool 值,设置后,它只会禁用 AI/物理更新。菜单可以编码为简单的 GUI 覆盖。因此,您的“菜单状态”只是暂停游戏并显示菜单,并在菜单关闭时取消暂停游戏 - 不需要明确的状态管理。

    减少游戏实体之间的耦合非常容易,只要你不知道游戏实体是什么,它会导致一切都需要潜在地与一切对话。游戏角色通常生活在 map 或世界中,这本质上是一个空间数据库(除其他外),并且可以要求世界告诉它附近的角色和对象,而无需直接引用它们。

    总的来说,尽管您只需要为您的代码使用良好的软件开发规则。最主要的是保持界面小、简单,并且只关注一个方面。松散耦合和专注于较小代码区域的能力自然而然地由此而来。

    关于complexity-theory - 降低游戏编程复杂性的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145218/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com