1

Javaで簡単なゲームを開発しています。これはばかげた質問かもしれませんが、本当に助けが必要です。私のゲームは複数のレベルを備えています。管理しやすくするために、新しいクラス ファイルから各レベルをロードできるようにしたいと考えています。これが安定した解決策でない場合は、教えてください。

今、私の質問はこれです。JPanel がクラス ファイル A にある場合、クラス ファイル B からどのように描画できますか? クラス ファイル B が私のレベルであると想像してください。クラス ファイル C、D、E など、JPanel を保持するクラス ファイル A に描画できるようにしたいすべての異なるレベルがあるとします。どうすればこれを達成できますか?

4

2 に答える 2

2

理想的なデザインは、UIの描画をゲームロジックから遠ざけるので、正しい方向に進むことができます。そのような解決策の1つの例は、レベルが変更されたときに通知を受け取るJPanelを構成するクラスです。例えば

public class LevelViewController implements LevelChangedListener {
   private JPanel viewPane;

   public LevelViewController(JPanel viewPane) {
      this.viewPane = viewPane;
   }

   public void levelChanged(Level level) {
      // Update JPanel with logic now the level has changed
      ...
   }
}

public interface LevelChangedListener {
     void levelChanged(Level level);
}

プレーヤーが次のレベルに進むことを知っている場合は、LevelChangedListenersのコレクション(LevelViewControllerが1つ)に通知する必要があります。これにより、JPanelが更新されます。レベルが変更されたので他のものを更新したい場合は、他のLevelChangedListenersをフックすることもできます。

于 2012-06-17T21:01:51.860 に答える
2

2つの可能な解決策は次のとおりです。

クラスファイルをに渡しますJPanel。たとえば、次のようになります。

JPanel j = new JPanel();
Level l1 = new Level(1);
Level l2 = new Level(2);
j.initlevel(l1);
//wait until level 1 is done
j.initlevel(l2);

そして、initlevelにロードを実行させます。

public void initlevel(Level l){
    // for all level parts, load them into "this"
}

または、パブリックの特定のプロパティを作成JPanelして、次のレベルに渡すことができます。

JPanel j = new JPanel();
new Level(1, j);
//wait until level 1 is done
new Level(2, j);

そして、Levelのコンストラクターを作成します。

public Level(int level, JPanel j){
    //for all level parts load them into "j"
}

これは非常に基本的な構造であることに注意してください。ゲームがもう少し複雑になる場合は、Model-View-Controllerパターンの読み取りを検討することをお勧めします。

于 2012-06-17T20:51:12.453 に答える