我已经做了游戏“突围”。一个有趣的小项目。球和砖碰撞处理
现在,我通常不制作游戏,因此碰撞处理不是我通常想到的。
我有一个桨,一个球和一些砖。现在,当发生碰撞时(我在提到的每个对象周围绘制矩形),我只需将球的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