精灵在碰撞后离开屏幕
本文关键字:离开 屏幕 碰撞 精灵 | 更新日期: 2023-09-27 17:51:05
当游戏开始时,球将完美地从边缘反弹,使用以下代码:
if (Is_hit == true && ballFired == true )
{
//collision here
ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
ballXDir = +1;
ballYDir = -1;
}
if (Ballvisible == true)
{
if (Keyboard.GetState().IsKeyDown(Keys.Space) && ballFired == false)
{
ballFired = true;
}
if (ballFired == true)
{
ballXPos = ballXPos - (ballSpeed * ballXDir);
ballYPos = ballYPos + (ballSpeed * ballYDir);
}
if (ballXPos < 0)
{
ballXPos = -ballXPos;
ballXDir = -1;
}
if (ballXPos > 960 - ballimg.Width)
{
ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
ballXDir = +1;
}
if (ballYPos < 0)
{
ballYPos = +ballYPos;
ballYDir = +1;
}
if (ballYPos > 700 - ballimg.Height)
{
Ballvisible = false;
}
}
if (Ballvisible == false)
{
ballSpeed = 3;
ballXDir = -1;
ballYDir = -1;
ballXPos = 450;
ballYPos = 590;
ballFired = false;
Ballvisible = true;
}
}
但是一旦发生碰撞,球将成功地反弹到另一个精灵(玩家划桨)上,但随后程序似乎忽略了这段代码,球将直接离开屏幕。
碰撞代码: // paddle collison detection
if
( gameball.PositionRectangle_ball.Intersects(paddle.PositionRectangle_paddle))
{
collision_paddle = true;
gameball.CheckCollision(collision_paddle); // passes the collision bool value
}
您好像忘记清除Is_hit
标志了。
如果你不需要在其他地方检查它,你可以在发布代码的第一个块中清除它:
if (Is_hit == true && ballFired == true )
{
//collision here
ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
ballXDir = +1;
ballYDir = -1;
Is_hit = false;
}