我正在用java开发一个简单的游戏。虽然这可能是一个愚蠢的问题,但我确实需要一些帮助。我的游戏将具有多个级别。我希望能够从新的类文件加载每个级别,使其更易于管理。如果这不是一个稳定的解决方案请告诉。
现在我的问题是这个。如果我的JPanel在类文件A中,我如何从类文件B中绘制它?想象一下类文件B是我的级别,所以我会有类文件C,D,E等等,所有不同的级别,我希望能够绘制到类文件A,它保存我的JPanel。我怎么能做到这一点?
答案 0 :(得分: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"
}
请注意,这是一个非常基本的结构,如果您的游戏变得有点复杂,您可能需要考虑阅读模型 - 视图 - 控制器模式。
答案 1 :(得分:2)
理想的设计使用户界面远离游戏逻辑,使您走在正确的轨道上。 一个这样的解决方案的示例可以是组成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。