2

是的,这是关于我的游戏引擎的另一个问题,它运行得非常好,非常感谢你们。

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

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

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

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

SomeComponent comp = entity.GetSomeComponent();

但这似乎是一种逃避,也是一种糟糕的逃避。

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

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

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

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

3 回答 3

1

为什么你认为它是坏的?

这就是泛型的用途。

于 2011-02-02T11:07:36.120 回答
0

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

于 2010-05-12T15:02:43.613 回答
0

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

于 2010-07-30T20:47:14.683 回答