我在ballsprite类上创建了一个方法,告诉我是否发生了碰撞。
它应该返回一个bool值;问题是,当我从一个场景类调用它时,它调用方法,但是当我告诉它设置球的visible = false
时,它不会这样做。
所以我把它作为BallSprite
类的一个属性创建并在那里设置为false,不知道它为什么会这样发生?
这是相关代码:
public bool isvisible = true; //this is the attribute I added
public bool is_ballCrash() //this checks for collision
{
int maxY = game.GraphicsDevice.Viewport.Height - ballSprite.Height;
return (ballPosition.Y > maxY);
}
if(is_ballCrash()) //this is is_ballCrash usage
{
//crashSound.Play();
ballPosition.Y = 0;
ballSpeed.X = 150;
ballSpeed.Y = 150;
isvisible = false; //***
}
现在在我的场景中: 当我在更新方法上添加它时,它可以工作:
if (ballSprite.isvisible == false)
ballSprite.Visible = false;
但这不起作用,这就是我得到的:
if (ballSprite.is_ballCrash() == true)
{ballSprite.Visible = false;}
它会返回一个真值(球在y位置重置,所以班级本身有效)
问题是在场景中输入if
得到它的真值(或者至少它应该从方法返回它),但不执行块。
我尝试了其他代码行:
ballSprite.ballSpeed.X -= 1000;
但它没有达到它(不会在断点处停止)
我不理解该方法如何返回true并且在sprite类中应该做什么,而不是在场景类的更新方法上应该得到相同的值。
除非我遗漏了一些明显的东西。
答案 0 :(得分:0)
我想我知道
您可以通过在班级中创建一个功能来轻松测试
public void TestVisible()
{
System.Diagnostics.Debug.Assert(this.isvisible == this.Visible);
}
并从
调用它if (ballSprite.is_ballCrash() == true)
{
ballSprite.Visible = false;
ballSprite.TestVisible();
}
你应该得到一个断言错误