1

我正在用java开发一个简单的游戏。虽然这可能是一个愚蠢的问题,但我确实需要一些帮助。我的游戏将具有多个级别。我希望能够从新的类文件中加载每个级别以使其更易于管理。如果这不是一个稳定的解决方案,请告诉。

现在我的问题是这个。如果我的 JPanel 在类文件 A 中,我如何从类文件 B 中绘制它?想象类文件 B 是我的级别,因此我将拥有类文件 C、D、E 等等,我希望能够将所有不同的级别绘制到保存我的 JPanel 的类文件 A 中。我怎样才能做到这一点?

4

2 回答 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"
}

请注意,这是一个非常基本的结构,如果您的游戏变得有点复杂,您可能需要考虑阅读模型-视图-控制器模式。

于 2012-06-17T20:51:12.453 回答
2

理想的设计使 UI 绘图远离游戏逻辑,因此您走在正确的轨道上。一个这样的解决方案的一个示例可能是一个组成一个 JPanel 的类,该 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 就是其中之一),这将反过来更新您的 JPanel。如果您希望在级别更改后更新其他内容,那么您也可以挂钩其他 LevelChangedListeners。

于 2012-06-17T21:01:51.860 回答