为了学习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