C# 碰撞后精灵离开屏幕
当游戏开始时,球将使用以下代码从边缘完美反弹:C# 碰撞后精灵离开屏幕,c#,xna,collision-detection,C#,Xna,Collision Detection,当游戏开始时,球将使用以下代码从边缘完美反弹: if (Is_hit == true && ballFired == true ) { //collision here ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width); ballXDir = +1; ballYDir = -1; } if (Ball
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;
}
}
看起来你忘了清除Is_命中标志 如果您不需要在其他任何地方检查它,您可以在发布代码的第一块中清除它:
if (Is_hit == true && ballFired == true )
{
//collision here
ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
ballXDir = +1;
ballYDir = -1;
Is_hit = false;
}
你有没有清除过hit标志?嗨,谢谢你!我忘了我需要重置它,我尝试在碰撞检查之外重置它,这导致游戏表现得相当怪异。如果没有冲突,您将如何重置它?如果我不需要在其他任何地方检查它,我将在发布代码的第一个块中清除它,该块带有注释//冲突,谢谢!这很有效。非常感谢你的帮助。如果你把它作为一个答案张贴,我会标记为正确
if (Is_hit == true && ballFired == true )
{
//collision here
ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
ballXDir = +1;
ballYDir = -1;
Is_hit = false;
}