公共方法在其类中工作,但在另一个方法中不起作用?

时间:2013-10-18 08:48:34

标签: c# xna

我在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类中应该做什么,而不是在场景类的更新方法上应该得到相同的值。
除非我遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

我想我知道

  • this.isvisible = false;在你的班级
  • 公共财产Visible在某种程度上没有联系。

您可以通过在班级中创建一个功能来轻松测试

public void TestVisible()
{
      System.Diagnostics.Debug.Assert(this.isvisible == this.Visible);
}

并从

调用它
if (ballSprite.is_ballCrash() == true)
{
    ballSprite.Visible = false;
    ballSprite.TestVisible();
}

你应该得到一个断言错误