基于组件的系统中的有效通信

时间:2010-05-12 14:50:47

标签: c# design-patterns components messages

是的,这是关于我的游戏引擎的另一个问题,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. 什么是更好的选择?

3 个答案:

答案 0 :(得分:0)

在不了解游戏的整体设计的情况下,很难知道这种模式是孤立的还是好的。如果它运作良好并且表现良好,反对它的唯一潜在论点是建筑 - 它会扩展吗?

答案 1 :(得分:0)

我一直在做游戏,我正在使用通用类型参数以相同的方式查找不同的组件。我从中得到了这个想法 http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/。我不确定这是最好的方式,感觉就像滥用泛型系统一样。它虽然有效。

答案 2 :(得分:0)

为什么你认为这很糟糕?

这就是仿制药的用途。