是的,这是关于我的游戏引擎的另一个问题,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>();
令人惊讶的是如何运作。无论如何,这仍然只是语义上的改进。我的问题仍然存在。
答案 0 :(得分:0)
在不了解游戏的整体设计的情况下,很难知道这种模式是孤立的还是好的。如果它运作良好并且表现良好,反对它的唯一潜在论点是建筑 - 它会扩展吗?
答案 1 :(得分:0)
我一直在做游戏,我正在使用通用类型参数以相同的方式查找不同的组件。我从中得到了这个想法 http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/。我不确定这是最好的方式,感觉就像滥用泛型系统一样。它虽然有效。
答案 2 :(得分:0)
为什么你认为这很糟糕?
这就是仿制药的用途。