我有Camera類,它處理相機行爲。其中的字段是對目標的Cube類的引用(Cube只是其中的一個對象,但我不會提到其他人簡化它)。爲了計算View矩陣,我需要相機的位置和目標的位置,所以我可以向我的程序解釋:「相機放置在這裏,從這裏看它就是這個立方體。如果立方體碰巧移動,相機的視角也會自動改變。兩個類依賴於彼此
到目前爲止,一切都很好:有一個Camera類取決於Cube類,還有Cube類,它不依賴任何東西(在這個例子中)。
我得到一個問題,當我需要繪製一個立方體,或任何其他 - 以畫點什麼,需要的值它攝像機的觀察矩陣中;這是我剛剛在第一段中計算出來的那個。實質上,這意味着當我在屏幕上繪製事物時,Cube類也變得依賴於Camera類,並且它們現在相互依賴。這意味着我要麼:
- 需要使Camera類的View矩陣字段爲靜態,所以我可以直接從Cube類訪問它。
- 需要在Cube類中創建一個方法(例如SetView),然後我可以從Camera類調用它(因爲我已經有了它的參考)。
- 需要在外部範圍內保留View矩陣。
- 需要進行雙向依賴。
不過,我也不喜歡這些:
- 有多個攝像頭,其處理多個視圖(目前有在屏幕上,其中3),並可能有更多的(或更少)。
- 這會使代碼略微(有時可能非常)不可讀 - 例如,當我繪製立方體時,不太清楚View矩陣的來源,您只是有點使用它而不回頭看。
- 我會從相機類訪問外部作用域,或者外部作用域將訪問相機,我不喜歡這樣做,因爲外部作用域僅用於處理執行機制。
- 我喜歡讓我的參考字段「只讀」,因爲它目前在這個系統中的任何地方 - 引用是在構造函數中設置的,並且僅用於從引用的類中獲取數據。
而且,如果我沒有說清楚,讓我重複說有多個Camera對象和多個Cube對象;而任何相機可能依賴於任何Cube,也可能不依賴任何Cube,但通常至少有一個依賴於Cube的相機。
任何建議,將不勝感激:)
感謝您的注意......在接受此回覆之前,我必須先進行一些測試,但是您現在已將我的想法告訴了我應該做的事 - 在Camera.Attach(IAttachable attachTo)相機類,在那裏我可以命令相機跟隨該物體......在這種情況下,我會反轉當前的依賴性。 – avance70 2010-10-19 07:07:47
是的,我重新編寫了這個部分,在我看來,目前爲止最好的解決方案。 – avance70 2010-10-20 06:14:19