3

考虑一个使用场景的游戏引擎。现在,一个场景可以有一个演员列表,它们是当前场景中的对象。这个的伪可能看起来像:

class Scene
{
    public List<Actor> Actors { get; set; }
    ....
}

对于游戏循环,引擎对场景对象调用 Update(),然后对所有 Actor 调用 Update()。

现在,我的问题是:什么是允许演员交流的好方法(如果演员需要了解其他演员)?即我可能有一个代表子弹的演员。这颗子弹需要知道所有敌方演员(以便子弹可以杀死他们等)。我可以为每个演员提供一个句柄来引用演员所在的当前场景,但这听起来是个坏主意(假设每个参与者的访问/权力类型)。

如果可能的话,我希望能够让所有演员对其他演员和场景视而不见,并通过一些合同来实现行为/交流,但我还没有想出任何东西。

4

3 回答 3

1

这取决于你想要做什么。如果您的游戏引擎是基于组合的,那可能是一个解决方案(我的意思是每个游戏对象不是由其类名定义的,而是由组成它的对象定义的,您可以与这些对象进行交互)。您还可以将它们全部注册到场景中,并能够按名称获取它们,或者按类型获取存在的数组(例如,使用模板方法)。您还可以使用观察者模式:每个游戏对象实现一个提供服务的接口,其他游戏对象订阅该服务,并在其他对象的值更新时更新。有很多有效的解决方案,我只是贡献了一些。这实际上取决于您想从对象之间的交互中得到什么。

于 2012-07-04T10:47:06.703 回答
0

有很多方法可以干净地完成此操作,但最直接的方法之一是Mediator 模式的一些变体。

于 2012-07-03T17:47:07.643 回答
0

最通用的解决方案是为此使用访问者模式。Wikipedia 中的示例讨论了 CAD 系统,但在这种情况下,游戏并没有什么不同。

于 2012-07-03T17:45:21.597 回答