2015-04-19 80 views
1

我有一个包含很多骰子的游戏板。父母和子女对象之间的双向沟通​​

通过在四个方向上拖动鼠标,每个方向都可以倾斜到任一方向(受限于Gameboard和其他骰子的边界)。 所以骰子自己处理输入,但在执行倾斜之前,我必须检查棋子是否允许移动。

因此,我会给每个骰子提供一个游戏板的参考,但有没有更好的方式来获得这种双向行为?

回答

2

而不是通过引用Gameboard来处理骰子对象内部的这个逻辑,我建议看看做相反的事情,而不是在抽象系统中处理这个(创建第三个元素,将这两个组件连接在一起并处理所需的逻辑),检查每个移动是否有效。

要做到这一点,你需要改变鼠标输入,以便它也在抽象系统而不是每个骰子中处理,所以当你触摸骰子对象时,该系统能够检查哪个对象被触摸,然后运行代码来检查移动在该对象上是否有效。这很可能会涉及到存储所有Dice对象的List/Array/Dictionary,以便您能够检查并查看被触摸的对象是否包含在内,因此是有效的。然后,您可以使用touchedObject.GetComonent<Dice>();(或者可以将所有这些属性与实际的MonoBehaviour分开存储,然后查看它们)从Dice对象获取所需的任何属性。

使用此方法,您可以检查Dice对象和游戏板,以查看下一步移动是否有效,而不是每个对象都依赖于其他对象(这会导致循环依赖关系)。这也给了你更多的灵活性来改变或去除这些代码。

这是你可以采取的许多不同方法之一,另一种方法是让你的游戏板存储每个Dice对象的引用,并让Dice对象在与(即该游戏板正在侦听)交互时触发一个事件,所以然后游戏板代码就可以运行检查 - 尽管从经验来看,我会采用前一种方法,并尽可能地去解耦。

相关问题