我目前正在創建一個地牢爬行器。我在一個名爲「地下城」的類中處理所有的地牢世代,碰撞盒世代,寶物和敵方世代以及玩家世代。在地牢類中創建的每個對象都有一個getter。訪問其他類中對象的最有效的做法:Java
在Main類中,我使用動畫計時器來處理玩家移動,打開寶藏等的所有更新。這需要訪問Dungeon類中創建的許多對象。
我想更好地理解Java中對象引用的使用和好處。我的問題是:因爲我訪問數百或數千次以後,訪問Dungeon類(或任何其他類)中的變量的更有效的方法是什麼?
例如,地牢中的所有寶藏都在一個ArrayList變量中,該變量是Dungeon類的成員變量。所以,我可以像這樣在我的Main類中檢索數組列表:dungeon.getTreasureList()
。如果我需要獲取該ArrayList中的特定項目,我可以使用:dungeon.getTreasureList().get(i)
其中i
是我想要的寶藏對象的索引。這對於短時間的通話來說很好(組織上來說),但是對於如此長的通話會變得非常混亂:dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())
或者,我可以在我的Main中創建一個對寶貝列表的引用,如下所示:ArrayList<Treasure> treasure = dungeon.getTreasureList()
。然後,如果我需要ArrayList中的特定對象,我可以調用:treasure.get(i)
。這可以清理上面的長途電話,更像這樣:player.topIntersects(collisions.getWalls());
。這樣更容易閱讀,因此我更喜歡這種方法。
忽視組織優勢,創建一個訪問變量來訪問信息的參考,或使用更長的表單和獲得者(如dungeon.getTreasureList().get(i)
)是一個更好的做法嗎?
看起來,通過在呼叫dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())
中爲玩家和碰撞創建參考,我使用player.topIntersects(collisions.getWalls());
保存了兩個函數調用。即,一個函數調用dungeon.getPlayer()
和一個調用dungeon.getCollisions()
。
由於在遊戲運行過程中這被稱爲數千次,因此假設我正在將數千個函數調用保存到dungeon.getPlayer()
和dungeon.getCollisions()
,從而生成更高效的代碼似乎是安全的。在這個假設中,我是對的嗎?
編輯:設法使問題更客觀和更少的輿論基礎和糾正誤導性的措辭
我覺得這是一種代碼味道;也許試着重新組織你的邏輯和班級責任。請記住**單一責任原則** https://en.wikipedia.org/wiki/Single_responsibility_principle – Michael
我應該澄清一點,地牢類處理所有對其他生成類的調用。地下城地圖是在自己的班級中生成的,寶藏是在自己的班級中生成的,敵人是在自己的班級中生成的,等等。我重構了一些Main,以確保在更新循環中發生更改時,主要負責更新和重新呈現。 – MKreegs