1

特にコースワークの一環としてパックマンというゲームを作成していますが、長方形を使用した衝突検出に関して問題があります。

私が経験している問題は、画面上ではキャラクターが衝突していないことは明らかですが、交差をチェックすると、事実上常に true が返されることです。以下の出力は、私が何を意味するかを説明しています。

Pacman の詳細: x 17.0 y 16.0 Inky の詳細: x 22.0 y 13.0 intersects() 呼び出し後の衝突: true Pacman の詳細: x 18.0 y 16.0 Inky の詳細: x 23.0 y 13.0 intersects() の呼び出し後の衝突: true

Rectangles を次のように設定しました。

public Rectangle pacmanBounds(){
    return new Rectangle(pacRow, pacColumn, 22, 22);
}
public Rectangle ghostBounds(){
    return new Rectangle(ghostRow, ghostColumn, 22, 22);
}

高さと幅はテスト目的でハードコーディングされていますが、これらは実際の画像サイズです。

JPanel が再描画されるたびに、次のように衝突をチェックしています。

public boolean checkCollision(){
    Rectangle pacmanBounds = pacman.pacmanBounds();
    //currently commented out for testing
    /*if(pacmanBounds.intersects(inky.ghostBounds()) || pacmanBounds.intersects(blinky.ghostBounds())
            || pacmanBounds.intersects(pinky.ghostBounds()) || pacmanBounds.intersects(clyde.ghostBounds())){
        System.out.println("Oh no!");
        return true;
    }*/

    System.out.println("Pacman details: x " + pacmanBounds.getX() + " y " + pacmanBounds.getY() + " ");
    System.out.println("Inky details: x " + inky.ghostBounds().getX() + " y " + inky.ghostBounds().getY());
    System.out.println("Collision after calling intersects(): " + pacmanBounds.intersects(inky.ghostBounds()));
    return false;
}

この時点で、この問題を解決する方法についてのアイデアがほとんどなくなったので、アドバイスをいただければ幸いです。

4

1 に答える 1

1

長方形の左上座標の点を想定getX()して返すと、これらは各呼び出しの長方形の境界になります。getY()

Pacman の詳細: x 17.0 y 16.0 Inky の詳細: x 22.0 y 13.0 intersects() を呼び出した後の衝突: true

パックマンの長方形は、その左上の座標に各方向に 22 を加えたものになり、右下隅が(39.0, 38.0)である長方形が得られます。これは、彼の右上隅が(22.0, 13.0)で、左下隅が(44.0, 35.0)

それが私には見えるものです。22.0 は Pacman と Inky の四角形の境界をピクセル単位または正方形単位で表すということですか? これらの仮定が正しければ、Inky の左下隅(22.0, 35.0)は文字通り完全に Pacman の内部にあり、これはおそらくあなたが望んでいるものではありません. 問題はいくつかの可能性があり、コードをもう少し見て、四角形が正確に何を意味するのかを知らずに、それが何であるかを言うのは難しい. :D

于 2011-04-09T01:54:23.143 に答える