1

好的,我有这个永不终止的游戏循环——

public void run() {
    setup();
    addMouseListeners();
    int Turns = NTURNS;
    int TotalBricks = NBRICKS_PER_ROW * NBRICK_ROWS;
    while ((Turns>0) && (TotalBricks>0)) {
        moveBall();
        checkForCollision();
        pause(DELAY);
    }
    System.exit(0);
}   

- 即使我有这种方法在每次错过球时都会减少 Turns 值:

private void checkForCollision() {
    GObject collider = getCollidingObject();
    if (collider !=null) {
        if (collider == Paddle) {
            vy= -vy;
        }
        else {
            vy= -vy;
            remove(collider);
            TotalBricks = TotalBricks - 1;
        }
    }
    if((ball.getX()>=(WIDTH-BALL_RADIUS)) || (ball.getX()<=0)) {
        vx = -vx;
    }
    if(ball.getY()<=0) {
        vy = -vy;
    }
    if(ball.getY()>=HEIGHT) {
    Turns = Turns -1;
    remove(ball);
    newBall();
    }

}

加上这个

private int Turns;

在底部以确保变量在两种方法之间共享。无论球丢了多少次,比赛都不会停止。我错过了什么?谢谢

4

2 回答 2

4

您在 run 方法中声明了一个新的 Turns 变量,这是该方法所使用的,因为它具有更多的本地范围。这称为可变阴影。使用像 Eclipse 这样不错的 Java IDE,它会在您执行此操作时发出警告。这几乎总是一个错误。

http://www.xyzws.com/Javafaq/what-is-variable-hiding-and-shadowing/15

于 2012-07-24T05:24:16.583 回答
0

您要声明Turns变量两次,一次用于整个类,一次用于run()方法。由于您还要检查Turns您在方法中声明的变量的值run(),因此它永远不会减少,因为正在使用的变量checkForCollision()不是在 while 循环中检查的变量。

run()中,这:

int Turns = NTURNS;

需要是:

Turns = NTURNS;
于 2012-07-24T05:25:59.617 回答