基本上我正在制作一个像乒乓球,突围等游戏的过程。当球和桨碰撞时我遇到了一些问题......但有时候只是!
此视频出现的内容为: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;
}
}
答案 0 :(得分:1)
问题不在于球被挡在游戏窗底部和球拍之间,而是在球拍内卡住了。
当您从顶部检测到击球时,通过将球的Y坐标设置在球拍上方来避免这种情况。
如果您检测到球拍底部的击球,则必须将球的Y坐标设置为球拍下方。
同样地,如果你从侧面击中,你必须设置球的X坐标,以便它在桨的外面。
重点是击中面板后球不能相互接触,否则会立即检测到第二击。