Итак, для проекта, над которым я сейчас работаю, я создаю игру, похожую на Марио, с тремя разными уровнями. Я дошел до первого уровня и столкнулся с проблемой, которую не могу понять. Когда я закончу уровень (у меня есть эта дверь, в которую попадает игрок), первый уровень должен закрыться и вернуться к основному классу, который я назвал BaseClass, а затем BaseClass должен открыть уровень 2.
Однако вместо этого программа открывает новое окно поверх старого с новым уровнем. Я считаю, что это может быть связано с тем, что я возвращаюсь к BaseClass, создавая новое окно с новым уровнем. Это новое окно также является смесью двух и постоянно мигает между желтым и зеленым (два цвета фона, которые я временно разместил, чтобы различать два уровня).
Могу ли я закрыть один холст и открыть другой без этой проблемы? Кроме того, проект предназначен для школьного курса, и нам не разрешается использовать какие-либо неосновные библиотеки Java.
Я пытался использовать закрытие JFrame, используя метод, который, как я обнаружил, включал класс Principal из пакета java.security. Я также попробовал несколько случайных вещей, ни одна из которых, похоже, не работает.
Вот мой код BaseClass как для конструктора, так и для метода, который должен изменить уровень.
int currentLevel = 1;
public BaseClass() {
super("Epic Math Sprint");
start();
currentLevel++;
this.setSize(800, 600);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
}
public void start() {
LevelOne firstLevel = new LevelOne();
LevelTwo secondLevel = new LevelTwo();
LevelThree thirdLevel = new LevelThree();
switch (currentLevel) {
case 1:
this.add(firstLevel);
break;
case 2:
this.remove(firstLevel);
this.add(secondLevel);
break;
case 3:
this.remove(secondLevel);
this.add(thirdLevel);
break;
}
}
Вот код, который у меня есть в методе actionPerformed, который проверяет, находится ли игрок за дверью и открыта ли дверь (drawPaper имеет значение false), и на этом этапе изменяет уровень. Кстати, если у вас есть какие-либо советы о том, как проверить, находится ли игрок сверху двери, пожалуйста, дайте мне знать.
if (!drawPaper && (xPos >= 575 && xPos <= 625 && yPos >= 150 && yPos <= 280) && !reachedGoal) {
BaseClass main = new BaseClass();
main.currentLevel = 2;
main.start();
reachedGoal = true;
}
Достигнутая цель - запретить программе постоянно открывать новые окна каждые 5 миллисекунд (на что настроен мой таймер).