我正在用java开发一个简单的游戏。虽然这可能是一个愚蠢的问题,但我确实需要一些帮助。我的游戏将具有多个级别。我希望能够从新的类文件中加载每个级别以使其更易于管理。如果这不是一个稳定的解决方案,请告诉。
现在我的问题是这个。如果我的 JPanel 在类文件 A 中,我如何从类文件 B 中绘制它?想象类文件 B 是我的级别,因此我将拥有类文件 C、D、E 等等,我希望能够将所有不同的级别绘制到保存我的 JPanel 的类文件 A 中。我怎样才能做到这一点?
我正在用java开发一个简单的游戏。虽然这可能是一个愚蠢的问题,但我确实需要一些帮助。我的游戏将具有多个级别。我希望能够从新的类文件中加载每个级别以使其更易于管理。如果这不是一个稳定的解决方案,请告诉。
现在我的问题是这个。如果我的 JPanel 在类文件 A 中,我如何从类文件 B 中绘制它?想象类文件 B 是我的级别,因此我将拥有类文件 C、D、E 等等,我希望能够将所有不同的级别绘制到保存我的 JPanel 的类文件 A 中。我怎样才能做到这一点?
两种可能的解决方案是:
将类文件传递给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"
}
请注意,这是一个非常基本的结构,如果您的游戏变得有点复杂,您可能需要考虑阅读模型-视图-控制器模式。
理想的设计使 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。