【问题标题】:Effective communication in a component-based system基于组件的系统中的有效通信
【发布时间】:2011-02-18 16:20:15
【问题描述】:

是的,这是关于我的游戏引擎的另一个问题,coming along very nicely,非常感谢你们。

因此,如果您观看了视频(或没有观看),游戏中的对象由各种组件组成,例如位置、精灵、运动、碰撞、声音、健康等。我定义了几种消息类型用于实体和组件之间的“告诉”类型通信,但仅此而已。很多时候我只需要询问一些东西,例如一个实体的位置。

我的代码中有几十行如下所示:

SomeComponent comp = (SomeComponent)entity.GetComponent(typeof(SomeComponent));
if (comp != null) comp.GetSomething();

我知道这很丑陋,而且我知道铸造不当 OO 设计的味道。但是,尽管事情很复杂,但似乎没有更好的方法。我当然可以“硬编码”我的组件类型,并且只需

SomeComponent comp = entity.GetSomeComponent();

但这似乎是一种逃避,而且很糟糕。

我真的只是意识到,在写这篇文章时,在我的代码以这种方式几个月没有解决方案之后,泛型将帮助我。

SomeComponent comp = entity.GetComponent<SomeComponent>();

令人惊叹的工作原理。无论如何,这仍然只是语义上的改进。我的问题仍然存在。

  1. 真的有那么糟糕吗?
  2. 有什么更好的选择?

【问题讨论】:

    标签: c# design-patterns components messages


    【解决方案1】:

    你为什么认为它不好?

    这就是泛型的用途。

    【讨论】:

      【解决方案2】:

      我一直在开发一款游戏,我正在使用泛型类型参数以相同的方式查找不同的组件。我从 http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/。我不确定这是不是最好的方法,感觉就像是对泛型系统的滥用。但它确实有效。

      【讨论】:

        【解决方案3】:

        如果不了解游戏的整体设计,就很难知道这种模式是孤立的,是好的还是坏的。如果它运作良好并且表现良好,那么唯一可能反对它的论点就是架构——它会扩展吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-21
          • 2013-07-24
          • 2014-09-05
          • 1970-01-01
          • 2013-09-02
          • 2011-03-22
          • 2011-12-26
          • 2011-02-26
          相关资源
          最近更新 更多