Javaを学ぶために、私は古典的な "飛行機で宇宙" 2Dのゲームを作っています。プレイヤーオブジェクトに加えて、GameObjectクラスを拡張する独自のクラスを持つ多数の敵/障害物(スカベンジャー、ハンター、彗星、小惑星)が存在します。いくつかのスカベンジャー、コメットなどがあるので、これらはarraylistsに格納されています。しかしながら、各オブジェクトが互いに相互作用することができるので、例えば、各宇宙人が彗星のアライリスト、小惑星アレイリストなどのオブジェクトに従って相互作用するようにするために、多くのループおよび重複コードが存在する。ゲームのデザイン:オブジェクト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"
}
このアプローチはむしろ扱いにくいようであり、解析やループを繰り返す必要がある番号やarraylistsがより多くのクラスが作成されるにつれて手を出すようになっています。 これを行うより良い方法をお勧めする人はいますか? 明らかに、すべてのNPCオブジェクトを含む1つのリストを持ち、クラスの種類を追跡してそれに応じて更新するのが当然のことだと思います。 これはより良い方法ですか、誰でも正しい方向に向けることができますか?
'World'インスタンスを渡す方が簡単でしょうか?基本的に 'for(updatableThing:updatableThings){updatableThing.update(world);}を実行できます。 } ' – plalx
私は完全に理解していないかもしれませんが(まだ学んでいますが)、Worldインスタンスには、すべてのオブジェクトを含む、更新するリストが保持されているか、誤解していますか? – user2913053