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クラス全体に対して 1 回、run()メソッドに対して 1 回、変数を 2 回宣言しています。Turnsメソッドで宣言した変数の値もチェックしているため、使用されている変数が while ループでチェックされている変数ではrun()ないため、値が減少することはありません。checkForCollision()

ではrun()、これ:

int Turns = NTURNS;

する必要があります:

Turns = NTURNS;
于 2012-07-24T05:25:59.617 に答える