公共方法在它的类中有效,但在另一个类上不起作用,这是怎么回事?



我在ballsprite类上创建了一个方法,告诉我是否存在碰撞。它应该返回一个布尔值;问题是当我从场景类调用它时,它会调用该方法,但当我告诉它设置 Ball 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;}

它确实返回一个 true 值(球在其 y 位置重置,因此类本身工作)。
问题是在场景中输入方法,if获得它的真实值(或者至少应该,因为该方法返回它)但不执行块。
我尝试了其他代码行,例如:

ballSprite.ballSpeed.X -= 1000;

但它没有到达它(不会在断点上停止)

我不明白该方法如何返回 true 并在精灵类上执行它应该做的事情,但在场景类的更新方法上没有它应该获得相同的值。
除非我错过了一些明显的东西。

我想我知道

  • this.isvisible = false;在你的类中
  • 公共财产可见不知何故没有链接。

您可以通过在类中创建函数来轻松测试这一点

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

并从

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

你应该得到一个断言错误

最新更新