Как закрыть один холст в java swing и заменить на другой, не открывая новое окно? - PullRequest
0 голосов
/ 22 мая 2019

Итак, для проекта, над которым я сейчас работаю, я создаю игру, похожую на Марио, с тремя разными уровнями. Я дошел до первого уровня и столкнулся с проблемой, которую не могу понять. Когда я закончу уровень (у меня есть эта дверь, в которую попадает игрок), первый уровень должен закрыться и вернуться к основному классу, который я назвал 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 миллисекунд (на что настроен мой таймер).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...