爲了學習Java,我製作了一個經典的「在太空中飛行」2D遊戲。除了玩家對象之外,還存在衆多的敵人/障礙(拾荒者,獵人,彗星和小行星),每個敵人都擁有自己的類來擴展GameObject類。由於可以有幾個清道夫,彗星等這些存儲在arraylists。但是,由於每個對象都可以相互交互,所以存在很多循環和重複代碼,例如每個外來人員根據彗星陣列列表中的對象,小行星陣列列表等進行交互。遊戲設計:組織對象陣列列表
在我的遊戲更新功能,我有:
public void update() {
ArrayList<Rock> rockList = rock.getRockList();
ArrayList<Scavenger> scavengerList = scavenger.getScavengerList();
ArrayList<Hunter> hunterList = hunter.getHunterList();
....
npc.update(player, scavengerList, hunterList, rockList);
...
}
,並在我的NPC類(擴展了遊戲對象類)
public void update(Player player, ArrayList<Scavenger> scavengerList, ArrayList<Hunter> hunterList, ArrayList<Rock> rockList) {
for(int i = 0; i < scavengerList.size(); i++) {
scavengerList.get(i).update(player,scavengerList, ,hunterList rockList);
}
for(int i = 0; i < hunterList.size(); i++) {
hunterList.get(i).update(player,scavengerList, hunterList, rockList);
}
...
}
最後我有一個更新功能在我的清道夫級,我的獵人級等等,如
public class Hunter extends NPC{
...
public void update(Player player,ArrayList<Scavenger> scavengerList, ArrayList<Hunter> hunterList, ArrayList<Rock> rockList) {
"update all hunter objects according to the player, scavengers, rocks etc"
}
這種方法似乎相當麻煩,並且隨着更多類的創建,需要解析和循環的數字或陣列列表已經失控。 任何人都可以推薦一個更好的方式來做到這一點? 我想明顯的方法是有一個列表包含所有NPC對象,然後跟蹤他們的類類型並相應地更新。 這是一個更好的方式,或者任何人都可以指向正確的方向嗎?
傳遞'World'實例不是更容易嗎?你可以基本上做'for(updatableThing:updatableThings){updatableThing.update(world); }' – plalx
也許我不完全理解(仍在學習),但是World實例仍然會包含一個包含並更新所有對象的列表,或者我誤解了一些東西? – user2913053