我敢肯定,有一个设计模式解决我的问题,但我似乎无法决定一个可行的办法是什么。我知道我想要的,我只是有麻烦的连接是什么?我会解释:

我工作的一个游戏。我有GameObjects。我有GameBehaviors。我的GameObjects的性能列于具有所有的细节的XML文件中定义。

<type name="Object">
    <unit name="follower" behavior="followMouse" >
        ...other unit info here...
    </unit>
</type>

因此,作为一个游戏物体被实例化,基于行为属性的XML中的值,它的某种程度上具有附接到它的行为。我需要的行为能够访问所有属性的它的父,使得它可以说四处移动对象并没有什么...

我没有很多的设计模式的经验......和其中一些看起来像他们差不多吧,但没有的,我读过的例子似乎使它点击我。

我与AS3的工作,但随时使其位比较一般。

有帮助吗?

解决方案

我使用的组合物,尽管你的首要目标应该是找到一个很好的(可靠的,可扩展和维护的)溶液,而不是使用一个名为设计图案倒是建议。

所以你的游戏对象可能有一个initFromXML(XML)的方法,或者可能有一个静态的工厂方法,它采用XML作为参数。这解析xml和查找行为,然后创建适当的行为。创建行为可能与另一家工厂来完成。

您再添加行为的游戏对象行为列表。行为可能全部是对象从一个共同的类下降,也可能所有实施IBehavior接口。

行为可以做他们的事鉴定或者可以由游戏对象被调用,或者通过添加事件侦听器。

其他提示

我想我明白你的方法。

这来了很多的游戏,因为你有作用,地位,行为等无限多,潜在的。

我看到你的问题是你用类似“这并不遵循这个鼠标”功能性的东西打交道了,“确实对键盘命令对此作出回应”,等等...

在这种情况下,你可以做的是建立功能类,如“MouseFollower”或“KeyboardResponder”是一般接受一个物体做为他们的构造函数的参数。

这些对象随后可以直接应用的事件处理程序的游戏对象如事件监听器。

您可以将所有的功能对象存储在游戏对象中的数组的情况下,你需要将其删除。

当它们在阵列中,还可以做冷却还是喜欢创建一个功能类接口,具有一组统一的方法。所以,如果,例如,游戏对象被渲染停用或禁用了,你可以说

for each IFunctionalObject in GameObject.FunctionalObjects
IFunctionalObject.disable()

我想如果你有一个非常巨大的各种游戏对象的这种做法将是可以容忍的,我想一个RPG的情况下,您所管理不同功能的精灵巨大的数字一个体面的例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top