我正在嘗試開發簡單的TowerDefense遊戲,但是 好像我錯過了OOP的基礎知識,因爲我遇到問題 必須以某種方式解決因爲每個在OOP中編程的人都必須有 的參與。好的做法是從另一個不是兒童的類中找到一個類的現有實例
這裏是非常非常基本的結構
Game
|__ Map
Player
|__ UnitController
+ Block
+ Unit
所以基本上Map()
控制器創建100 new Block()
傳遞x and y
座標,它那些Blocks()
一個List<>
內 和存儲信息。其中之一Block
正在開始 的位置(它仍然是一個Block對象)。
現在UnitController()
有SpawnUnit()
方法。它創建了new Unit()
,它(這裏出現問題) 必須將此單元實例設置爲啓動塊。爲了做到這一點,UnitController
將不得不 要求Map
爲起始位置(這是一個變量存儲由Map
),但.. 如何UnitController 可以聯繫Map實例。我看到的唯一方法是Map是一個單身人士,我只需要做Map.getStartingPos
否則如果Map不是單身人(因此是實例),那麼UnitController將如何找到這個實例? 我可能當我實例化UnitController時,將此實例傳遞給UnitController,但這不是一個選項,我猜 ,因爲在這個遊戲中會有其他的例子(比如塔的攻擊單位,它必須找到一個單位, ...) 我不能簡單地將這些實例全部放在代碼中?
感謝
謝謝傑夫。我擔心隨着遊戲的擴展,我會發現當我開始使用線程時非常不方便,我必須將地圖/單位對象傳遞給每個塔線,以便它們可以造成傷害,減速單位等。 – Mike
@Mike我建議你不應該把「單元」對象給一個「塔」。 「地圖」應該完成大部分重要工作。例如,在一個簡單的塔防遊戲中,你可以讓塔臺像'map.damageNearestUnit(int x,int y,int range,int damage)那樣調用',並讓'Map'處理其他所有內容。真的,你的'Tower'線程只負責在任何你的火速下增量調用這個方法。 – asteri
@Mike但是,是的,必須爲該領域的每個對象提供對共享控制器的引用,將它們全部綁定在一起是有意義的。他們需要能夠互動。如果你把'塔'做成一個沒有參考'Map'的島,那麼'Map'可以改變'Tower'的狀態,但反之亦然。 – asteri