1

衝突があったかどうかを教えてくれるボールスプライト クラスのメソッドを作成しました。ブール値を返す必要があります。問題は、シーンクラスから呼び出すと、メソッドとすべてが呼び出されますが、ボールを設定するように指示してvisible = falseも実行されません。
だから私はそれをクラスの属性として作成し、そこでBallSpritefalseに設定しました.なぜそれが起こるのか分かりますか?

これは関連するコードです:

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; //***
        } 

今私のシーンcalssで:これをupdateメソッドに追加すると動作します:

if (ballSprite.isvisible == false)
            ballSprite.Visible = false;

しかし、これは機能しません。これは私が得るものです:

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

それは真の値を返します (ボールはその y 位置にリセットされるため、クラス自体が機能します)。
問題は、真の値を取得するシーンにメソッドを入力するifことです (または、メソッドがそれを返すため、少なくとも取得する必要があります) が、ブロックを実行しません。
次のような他のコード行を試しました。

ballSprite.ballSpeed.X -= 1000;

しかし、それはそれに達しません(ブレークポイントで停止しません)

メソッドがどのようにtrueを返し、スプライトクラスで何をすべきかを理解していませんが、同じ値を取得する必要があるシーンクラスの更新メソッドでは理解していません。
明らかな何かが欠けていない限り。

4

1 に答える 1

0

私は知っていると思います

  • this.isvisible = false; あなたのクラスで
  • public プロパティ 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 に答える