0

タイプ GRect のインスタンス変数を取得しました

private GRect brick;

繰り返しながら、いくつか作成します

private void makeBrickLineX(int x, int y, Color color)
{
    for (int i = 0; i < NBRICKS_PER_ROW; i++, 
                        x += BRICK_WIDTH + BRICK_SEP)                // Sets the x locations and separation between each brick.
    {                                                
        GRect brick  = new GRect (BRICK_WIDTH, BRICK_HEIGHT);
        brick.setFilled(true);
        brick.setColor(color);
        add(brick, x,y);
    }
}

問題は、「ブレイクアウト」ゲームを作成していて、ボールがいつブロックに当たったかを知る必要があることです。コードは単純です。getElementAt (ボールの x と y の位置) というメソッドを使用します。これはすべて機能します。しかし、いくつかのブリックがあり、ブリックで remove を呼び出しremove (brick)ます。右下隅のレンガを 1 つだけ削除するため、これらのレンガは同じ名前であってはなりませんか? 「レンガ」のすべてのインスタンスで機能させるにはどうすればよいですか。

4

3 に答える 3

0

電話をかけるたびに

GRect brick = new GRect (BRICK_WIDTH, BRICK_HEIGHT)

新しいGRectオブジェクトに設定される新しい変数'brick'を作成しています。Javaでは、各変数に一意の名前を付ける必要があるため、それぞれが「brick」という名前の複数のGRectオブジェクトを持つことはできません。

これに対処するために、「brick」という名前のオブジェクトを作成するたびに、Javaは「brick」という名前の前のオブジェクトを「brick」という名前のこの2番目のオブジェクトで上書きします。したがって、変数名'brick'は、作成した最後のブリックオブジェクトにのみ関連付けられます。

おそらく、add()メソッドを使用して作成した各ブリックオブジェクトをデータストレージに追加していると思われます。add()メソッドのコードを教えていただけますか?add()メソッドは、ほとんどの場合、各ブリックをデータ構造に追加する必要があります。その後、データ構造を調べて、すべてのブリックを直接削除できます。

于 2012-09-11T21:55:17.630 に答える
0

のすべてのインスタンスを削除できますがGRect、名前が付けられた最後のインスタンスへの参照を保持しbrick、ビューから削除するだけです。オブジェクトにすべてのブリックを既に格納している場合は、たとえば a の場合のようにList、数値インデックスを指定してそれらを削除できます。

List allBricks = getAllBricks();
int removeIndex = getIndexForRemove();
allBricks.remove(removeIndex);

ボールの位置と比べたとき、レンガの位置をどのように読みますか?

于 2012-09-11T23:31:02.433 に答える
0

ブリックを保存するために使用している基本的なデータ構造は何ですか? remove(brick) は何をしますか? ハッシュデータ構造を使用している場合、 hashCode() および/または equals() メソッドの問題のようです。

于 2012-09-11T21:46:46.973 に答える