游戏中的对象如何通信

时间:2012-07-03 17:39:08

标签: c# oop game-engine

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

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

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

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

如果可能的话,我希望能够让所有演员与其他演员和场景失明,并通过一些合同实现行为/沟通,但我无法想出任何东西。

3 个答案:

答案 0 :(得分:1)

这取决于你想要做什么。 If your game engine is composition based, that may be a solution(我的意思是每个游戏对象不是由它的类名定义,而是由组成它的对象定义,你可以与这些对象交互)。您还可以在场景中注册它们,并能够按名称获取它们,或者按类型获取存在的数组(例如,使用模板方法)。您还可以使用Observer pattern:每个游戏对象实现提供服务的接口,其他游戏对象订阅该服务,并在更新该另一个对象的值时更新。有很多有效的解决方案,我只是贡献了更多。这实际上取决于你想从对象之间的交互中取出什么。

答案 1 :(得分:0)

最常见的解决方案是使用Visitor pattern。维基百科中的示例讨论了CAD系统,但在这种情况下游戏并没有那么不同。

答案 2 :(得分:0)

有很多方法可以干净利落地完成这项工作,但最简单的方法之一就是Mediator pattern的某些变化。