「ブレイクアウト」というゲームを作りました。ちょっとした楽しいサイドプロジェクト。
現在、私は通常ゲームを作成していないため、衝突処理は通常考えることではありません。
パドル、ボール、レンガをいくつか持っています。
今のところ、衝突が発生した場合 (前述の各オブジェクトの周りに長方形を描画します)、ボールの Y 値を -Y に変更するだけです。
これは、ボールが側面 (東または西) からレンガに当たった場合を除いて、正常に機能します。副作用はきれいではなく、ゲームプレイを台無しにします.
上記の手法の代わりに、これが発生した場合は X 値を -X に変更する必要があると安全に想定できると思います。
これまでのところ、私は持っています:if (ballRect.IntersectsWith(brickRect))
ballRect
brickRect
各オブジェクトの周りの長方形です。
では、レンガの東の境界、西の境界などの周りに長方形を作成したらどうなるでしょうか。幅は約1ピクセルになると思います。
西または東の長方形で衝突が発生した場合、ボールの X 値は -X になります。およびその逆。
しかし、コーナーはどうですか?xコーナーを制御する長方形をランダムに選択する必要がありますか?
それとも、各コーナーの周りに長方形を作成する必要がありますか? 長方形は横に 1*1 です。衝突がある場合 => ボールの -x AND -y 値?
あなたの考えを共有してください。
これまでのプロセスは次のとおりです。
foreach (var brick in Bricks)
{
if (brick.IsAlive)
{
var brickRect = new Rectangle(brick.X, brick.Y, BrickWidth, BrickHeight);
if (ballRect.IntersectsWith(brickRect)) //Ball has hit brick. lets find out which side of the brick
{
var brickRectNorth = new Rectangle(brick.X, brick.Y + BrickHeight, BrickWidth, 1);
var brickRectSouth = new Rectangle(brick.X, brick.Y, BrickWidth, 1);
var brickRectEast = new Rectangle(brick.X, brick.Y, 1, BrickHeight);
var brickRectWest = new Rectangle(brick.X + BrickWidth, brick.Y, 1, BrickHeight);
if (ballRect.IntersectsWith(brickRectNorth) || ballRect.IntersectsWith(brickRectSouth))
{
//STUFF that makes ball.y = -ball.y
}
if (ballRect.IntersectsWith(brickRectWest) || ballRect.IntersectsWith(brickRectEast))
{
//STUFF that makes ball.x = -ball.x
}
}
}
}