2016-12-03 15 views
0

私は、各レベルが異なるメカニックを持つゲームを作っていますが、すべての入力処理、レンダリングなどを1か所に保ちたいと考えています。私のアプローチは、extends Levelという独自のクラス(IntroBossRoomなど)であり、すべてをコピーせずにそれぞれを変更する必要のある部分を変更するメソッドをオーバーライドします。Levelクラス各クラスの内容はLevelです。 レベルへの参照をすべて保持するLevelManagerクラスがあり、これを行うにはArrayListを使いたいと思っていました。Javaの汎用ArrayList

変数を宣言してインスタンス化すると、ArrayList<Level>ArrayList<?>ArrayList<? extends Level>、およびArrayList<? instanceof Level>を使用しようとしました。私が試したことは何もないようです。これを行うJavaがあるのですか、それとも変数としてそれぞれLevelが必要ですか?

ご迷惑をおかけして申し訳ございませんが、私はとても新しいので、それをより良い方法で知らせることはできません。

+1

郵便いくつかの関連するコード。 – rafid059

+2

[MCVE] – pvg

+2

を書くと 'List 'の何が問題になっていますか?その原因は何ですか? –

答えて

1

むしろまっすぐであるべきです。ここに少しの例があります。

基本クラス:

public abstract class Level{ 
    .... 
} 

編集:あなたはそれが(少なくとも1つの方法は、抽象的である)べきでない(ノーセンス)またはそれをすることはできませんインスタンス化することを考える場合は、抽象としてLevelクラスを宣言することができあなたのアプリケーションで。あなたの状況によると、それは可能性が高いです。

子供クラス:

public class IntroLevel extends Level{ 
... 
} 

他の子クラス:

public class LevelOne extends Level{ 
... 
} 

あなたのレベルマネージャ:

public class LevelManager{ 

    private List<Level> levels; 

    // constructor 
    public LevelManager(){ 
    levels = new ArrayList<Level>(); 
    levels.add(new IntroLevel()); 
    levels.add(new LevelOne()); 
    ... 
    } 

} 
+0

私はかなりプログラミング初心者ですので、初心者の質問は許してください。しかし、親の 'Level'クラスのために'抽象 'はどのような目的を果たしていますか?私の理解から、あなたはそれをインスタンス化できない場所にそれを作るだけです。それだけでいいですか、何かが欠けていますか? –

+0

あなたの理解は良いです。クラスの悪い使用を避けることができ、それはクラスの意図を明らかにする方法でもあります。クラスが抽象クラスの場合、使用できるだけでは不十分であることがわかります。 – davidxxx

+0

@WilliamVこの例では、何もありません。 'class'は、そのメソッドのどれかが' abstract'宣言されている場合、 'abstract'として宣言されなければなりません。 –