Как я могу перезапустить игру в обработке? - PullRequest
0 голосов
/ 02 ноября 2019

Итак, я хотел написать игру для обработки, в которой вы пытаетесь поймать падающий мяч баскетбольным кольцом. Все идет довольно хорошо, пока в какой-то момент, когда вы выиграете или проиграете и нажмете «перезапустить», игра не перезапустится. Это мой метод setup () (только соответствующая часть инициализации переменных):

void setup() {
    game = new Game();
    scr = new SplashScreen();
    gameBackground = new Image();
    background = new DynamicBackground();
    button = new Rect();

    /* Music set */
    intro = new Music();
    lifeMusic = new Music();
    failMusic = new Music();

    /* Ball and ring set */
    ball = new Image();
    ring = new Image();

    /* Life points set */
    life1 = new Image();
    life2 = new Image();
    life3 = new Image();
    life4 = new Image();
    failCount = 3;
    sucCount =0;
    winStr = "YOU WON!";
    gameOverStr = "GAME OVER";
    restartStr = "Resetart";

    flag = true;
    win = new Text();
    gameOver = new Text();
    restart = new Text();

    size(710, 490);

    .....
}

, а это мой mousePressed метод:

void mousePressed(){
    if(mouseX>button.x && mouseX <button.x+button.width && mouseY>button.y && mouseY <button.y+button.height){
        loop();
        setup();
    }
}

, как вы видите, я пыталсясделать noLoop(), когда игра окончена, а затем, когда вы нажмете на кнопку, которую я назвал «перезагрузка», она будет loop() и setup().

Игра застревает, когда я нажимаю «перезагрузка»почему?

1 Ответ

1 голос
/ 02 ноября 2019

setup() вызывается внутренним обратным вызовом. Он не предназначен для вызова setup. Примечание в настройках окно инициализировано (size(710, 490);). Вызов установки вызывает зависание системы.

Сохраняйте инициализацию статических объектов в setup, но перемещайте инициализацию всех динамических объектов («движущихся») в функцию init,Вызовите эту функцию в setup и mousePressed:

void init() {
    game = new Game();
    scr = new SplashScreen();
    gameBackground = new Image();
    background = new DynamicBackground();
    button = new Rect();

    /* Ball and ring set */
    ball = new Image();
    ring = new Image();

    // ...
}
void setup() {

    size(710, 490);

    // init static objects

    /* Music set */
    intro = new Music();
    lifeMusic = new Music();
    failMusic = new Music();

    // init dynamic objects
    init();
}
void mousePressed(){
    if(mouseX>button.x && mouseX <button.x+button.width && mouseY>button.y && mouseY <button.y+button.height){
        init();
        loop();
    }
}
...