我已經做了遊戲「突圍」。一個有趣的小項目。球和磚碰撞處理
現在,我通常不製作遊戲,因此碰撞處理不是我通常想到的。
我有一個槳,一個球和一些磚。現在,當發生碰撞時(我在提到的每個對象周圍繪製矩形),我只需將球的Y值更改爲-Y即可。
這工作正常,除非球從側面(無論是東或西)擊中一塊磚。副作用並不美麗,並破壞遊戲玩法。
我想我可以放心地假設,而不是上述技術,當發生這種情況時,我需要將X值更改爲-X。
到目前爲止,我有:if (ballRect.IntersectsWith(brickRect))
ballRect
和brickRect
周圍的每個對象爲矩形。
現在,如果我在磚塊,西部邊界等的東部邊界周圍創建了一個矩形,該怎麼辦?我猜這個寬度大約是一個像素。
如果碰撞發生在西方或東方的矩形中,那麼球的X值應該是-X。 反之亦然。
雖然角落呢?我應該隨機選擇哪個矩形來控制x角?
或者我應該在每個角上做一個矩形?該矩形在邊上是1 * 1。 如果碰撞=> -x和-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
}
}
}
}
感謝您的反饋意見。我沒有想到這 – CasperT 2009-10-13 19:05:30
我已經更新了我的帖子。這是你的意思嗎? – CasperT 2009-10-13 22:21:49
嗨。球是一個矩形(雖然畫爲日食)。所以半徑是: int ballRadius = BallSize/2; 關於//東西......我基本上只是做了很多事情,比如給玩家一些分數,殺死磚塊等等。最後,它直接寫道: BallDirection = new Point(-BallDirection.X,BallDirection.Y); // x = -x 你的代碼給了我一些非常奇怪的結果,但我會再看看它 – CasperT 2009-10-14 10:18:20