2015-04-19 118 views
1

我有一個包含很多骰子的遊戲板。父母和子女對象之間的雙向溝通​​

通過在四個方向上拖動鼠標,每個方向都可以傾斜到任一方向(受限於Gameboard和其他骰子的邊界)。 所以骰子自己處理輸入,但在執行傾斜之前,我必須檢查棋子是否允許移動。

因此,我會給每個骰子提供一個遊戲板的參考,但有沒有更好的方式來獲得這種雙向行爲?

回答

2

而不是通過引用Gameboard來處理骰子對象內部的這個邏輯,我建議看看做相反的事情,而不是在抽象系統中處理這個(創建第三個元素,將這兩個組件連接在一起並處理所需的邏輯),檢查每個移動是否有效。

要做到這一點,你需要改變鼠標輸入,以便它也在抽象系統而不是每個骰子中處理,所以當你觸摸骰子對象時,該系統能夠檢查哪個對象被觸摸,然後運行代碼來檢查移動在該對象上是否有效。這很可能會涉及到存儲所有Dice對象的List/Array/Dictionary,以便您能夠檢查並查看被觸摸的對象是否包含在內,因此是有效的。然後,您可以使用touchedObject.GetComonent<Dice>();(或者可以將所有這些屬性與實際的MonoBehaviour分開存儲,然後查看它們)從Dice對象獲取所需的任何屬性。

使用此方法,您可以檢查Dice對象和遊戲板,以查看下一步移動是否有效,而不是每個對象都依賴於其他對象(這會導致循環依賴關係)。這也給了你更多的靈活性來改變或去除這些代碼。

這是你可以採取的許多不同方法之一,另一種方法是讓你的遊戲板存儲每個Dice對象的引用,並讓Dice對象在與(即該遊戲板正在偵聽)交互時觸發一個事件,所以然後遊戲板代碼就可以運行檢查 - 儘管從經驗來看,我會採用前一種方法,並儘可能地去解耦。

相關問題