1

我在一个球精灵类上创建了一个方法,告诉我是否有碰撞。它应该返回一个布尔值;问题是当我从场景类中调用它时,它会调用方法,但是当我告诉它设置球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 类上做了它应该做的事情,但在场景类的 update 方法上却没有,它应该得到相同的值。
除非我遗漏了一些明显的东西。

4

1 回答 1

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();
}

你应该得到一个断言错误

于 2013-10-18T11:57:34.917 回答