衝突があったかどうかを教えてくれるボールスプライト クラスのメソッドを作成しました。ブール値を返す必要があります。問題は、シーンクラスから呼び出すと、メソッドとすべてが呼び出されますが、ボールを設定するように指示して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; //***
}
今私のシーンcalssで:これをupdateメソッドに追加すると動作します:
if (ballSprite.isvisible == false)
ballSprite.Visible = false;
しかし、これは機能しません。これは私が得るものです:
if (ballSprite.is_ballCrash() == true)
{ballSprite.Visible = false;}
それは真の値を返します (ボールはその y 位置にリセットされるため、クラス自体が機能します)。
問題は、真の値を取得するシーンにメソッドを入力するif
ことです (または、メソッドがそれを返すため、少なくとも取得する必要があります) が、ブロックを実行しません。
次のような他のコード行を試しました。
ballSprite.ballSpeed.X -= 1000;
しかし、それはそれに達しません(ブレークポイントで停止しません)
メソッドがどのようにtrueを返し、スプライトクラスで何をすべきかを理解していませんが、同じ値を取得する必要があるシーンクラスの更新メソッドでは理解していません。
明らかな何かが欠けていない限り。