Использование обработки для создания аркады игр после выбора игры.Не буду рисовать, все еще бежит.обработка - PullRequest
0 голосов
/ 25 января 2019

Привет, в основном, когда я нажимаю p или b , чтобы запустить одну из моих игр, которые они запускают, но вы не видите их, поскольку они не рисуют поверх экрана главного меню , Эти игры работают, если они разделены.

PImage pongImage, brickImage;
boolean mouseDown = false;

boolean [] keys = new boolean [128];
Ball ball;
Paddleb gamerPaddle;
static ArrayList<Brick> bricks = new ArrayList();

Puck puck;
Paddle one;//left
Paddle two;//right

int oneScore = 0;
int twoScore = 0;

int gameScreen = 0;
void setup() {
    fullScreen();

    ball = new Ball();//creating objects
    gamerPaddle = new Paddleb();
    puck = new Puck();//creating objects
    one = new Paddle(true);
    two = new Paddle(false);
}

void draw() {
    menuPress();
    if (gameScreen == 0) {
        mainMenu();
    }
    if (gameScreen ==1) {
        gamePong();
    }
    if (gameScreen == 2) {
        gameBrick();
    }
}

void keyReleased() {
    keys[key] = false;
    one.move(0);
    two.move(0);
    gamerPaddle.move(0);
}

void menuPress() {
    if (keys['p'] == true) {
        gameScreen = 1;
    } else if (keys ['b'] == true) {
        gameScreen =2;
    } else {
        gameScreen = 0;
    }
}

void moves() {
    if (keys['w'] == true) {
       one.move(-10);
    } else if (keys['s'] == true) {
       one.move(10);
    }
    if (keys['i'] == true) {
        two.move(-10);
    } else if (keys['k'] == true) {
        two.move(10);
    }
    if (keys['a'] == true) {
        gamerPaddle.move(-10);
    } else if (keys['d'] == true) {
        gamerPaddle.move(10);
    }
}

void keyPressed() {
    keys[key] = true;
}

void drawBricks() {
    for (int i = 0; i <= bricks.size() - 1; i++) {
        fill(255);
        rectMode(CORNER);
        rect(bricks.get(i).x, bricks.get(i).y, bricks.get(i).s, bricks.get(i).s2);
    }
}

void bricksSetup() {

    rectMode(CORNER);
    float s = 80;
    float x = width/4;
    float y = Brick.space;
    while (y < height/2) {
        while (x < width - width/4) {
            bricks.add(new Brick(x, y, s, s));
            x +=90;
        }
        x = width/4;
        y +=90;
    }
}

void mainMenu() {
    float picsY = height/2;
    float brickX = 2 * width/3;
    float pongX = width/3 - width/4;

    pongImage = loadImage("pong photo.PNG");
    brickImage = loadImage("Brick breaker.PNG");
    pongImage.resize(width/4, height/4);
    brickImage.resize(width/4, height/4);
    background(150);
    fill(255);
    textSize(72);
    text("AhMen's Arcade", width/5 + width/7, height/3);

    image(pongImage, pongX, picsY);
    text("Pong", width/6, 4 * height/5 + height/50);
    image(brickImage, brickX, picsY);
    text("Brick Breaker", 2 * width/3 + width/100, 4 * height/5 + height/50);
}

void gamePong() {
    background(0);
    System.out.println("cat");
    boolean gameEnding = false;
    do {
        background(0);
        one.screen();//creates paddle
        two.screen();
        puck.position();
        puck.sides();
        puck.screen();

        moves();

        puck.checkHitOne(one);
        puck.checkHitTwo(two);

        one.refresh();//limits y movement and keeps it moving at speed of 0 to make stops and starts not noticible
        two.refresh();

        fill(255);
        textSize(32);
        text(oneScore, 20, 50);
        text(twoScore, width-40, 50);
        textMode(CENTER);
        text("PONG", width/2-55, 50);
    } while (gameEnding != true);
    exit();
}

void gameBrick() {
    System.out.println("ya");
    background(0);
    bricksSetup();
    ball.position();
    while (ball.y - ball.r > height || ball.p1Score >= ((bricks.size()-1)*50)) {
        System.out.println('l');
        background(0);
        moves();

        drawBricks();
        ball.checkHitTwo(gamerPaddle);
        ball.checkHitBrick();

        gamerPaddle.screen();//creates paddle
        gamerPaddle.refresh();//limits y movement and keeps it moving at speed of 0 to make stops and starts not noticible
        gamerPaddle.refresh();

        ball.position();
        ball.sides();
        ball.screen();
        ball.score();
    }
    exit();
}

кстати, это только основной метод, у меня есть другие методы для объектов. Я не уверен, почему это не работает, но если кто-то, у кого есть идея, в чем может быть проблема, пожалуйста, lmk.

1 Ответ

0 голосов
/ 25 января 2019

Функция обработки обработки не выполняется в отдельном потоке.Когда у вас есть цикл while, который не заканчивается, функция draw больше никогда не выполняется.

Вы должны использовать переменные, ограниченные областью обработки файла, а не просто функцией, а затем изменить эти переменные внутрифункции, которые вы в настоящее время используете в качестве игровых циклов.

Например, если вы хотите программу, в которой шар перемещается вправо и после прохождения возвращается к координате 0, вам придется структурировать его следующим образом:

Ball ball = new Ball();

void draw() {
    playBallGame();
    drawBall();
}

void playBallGame() {
    if (ball.x > width) ball.x = 0;
    ball.x++;
}

Не так:

void draw() {
    drawBall();
    playBallGame();
}

void playBallGame() {
    Ball ball = new Ball();
    while (true) {
        if (ball.x > width) ball.x = 0;
        ball.x++;
    }
}
...