【发布时间】:2014-01-25 13:28:46
【问题描述】:
基本上,我正在制作类似于乒乓球、突围等的游戏。当球和桨发生碰撞时,我会遇到一些问题……但只是有时!
这个视频是正在发生的事情:http://www.youtube.com/watch?v=uFZIxFIg0rI
所以是的,基本上,当球与球拍相撞时,球有时似乎有点疯狂......通常情况下,如果我将球拍向与球接近的相反方向移动。此外,球有时会被卡在游戏窗口底部和球拍之间......即使我有代码可以阻止球、球拍等离开屏幕......
任何想法...或简单的修复?谢谢
哦,顺便说一句...这是我用于检测球和桨之间的碰撞并阻止它们离开游戏窗口的代码:
//CODE FOR CHECKING IF THE BALL IS OUTSIDE OF THE SCREEN
//checks for collision with left wall
if (pPosition.X <= 0)
{
pVelocity.X = -pVelocity.X;
}
//checks for collision with right wall
if (pPosition.X + pTexture.Width >= screenWidth)
{
pVelocity.X = -pVelocity.X;
}
//checks for collision with top wall
if (pPosition.Y <= 0)
{
pVelocity.Y = -pVelocity.Y;
}
//checks for collision with bottom wall
if (pPosition.Y + pTexture.Height >= ScreenHeight)
{
pVelocity.Y = -pVelocity.Y; //only need to invert Y velocity...
}
}
//CODE FOR CHECKING COLLISION BETWEEN BALL AND PADDLE
if (Ball.pRectangle.Intersects(Paddle.GetRectangle))
{
//Ball.pPosition.Y -= Ball.pVelocity.Y;
Ball.pVelocity.Y = -Ball.pVelocity.Y;
}
Ball.pPosition += Ball.pVelocity; //As this is in the update method, this just enables the ball to keep moving each frame...
编辑 17:21:
if (Ball.pRectangle.Intersects(Paddle.GetRectangle))
{
if (Ball.pRectangle.Bottom > Paddle.GetRectangle.Top)
{ //intersecting top of paddle
//WORKING
Ball.pPosition.Y = Paddle.GetRectangle.Top - Ball.pHeight;
Ball.pVelocity.Y = -Ball.pVelocity.Y;
}
if (Ball.pRectangle.Right > Paddle.GetRectangle.Left && Ball.pRectangle.Right < Paddle.GetRectangle.Right)
{ //intersecting left of paddle
//WORKING
Ball.pPosition.X = Paddle.GetRectangle.Left - Ball.pWidth;
Ball.pVelocity.X = -Ball.pVelocity.X;
}
if (Ball.pRectangle.Left < Paddle.GetRectangle.Right && Ball.pRectangle.Left > Paddle.GetRectangle.Left)
{ //intersecting right of paddle
//NOT WORKING
Ball.pPosition.X = Paddle.GetRectangle.Right + Ball.pWidth;
Ball.pVelocity.X = -Ball.pVelocity.X;
}
}
【问题讨论】:
标签: c# xna collision-detection game-physics