2

ボタンが押さattackれるたびにtrueに設定するブール値があります(攻撃です)QQ

私はブレークポイントを使用して、自分で問題を解決しようとしました。trueに設定されているコード行attackは実行されていますが、実際にはattacktrue に設定されていません... XNA は初めてなので、これが明らかな解決策である場合は申し訳ありません。ここにコードがあります..: (問題とは関係のない多くのコードを省略しました)

public class Player
{

    Animation playerAnimation = new Animation();

public void Update(GameTime gameTime)
    {
        keyState = Keyboard.GetState()

        if (keyState.IsKeyDown(Keys.Q))
        {
            tempCurrentFrame.Y = 0;
           *** playerAnimation.Attack = true; *** This line of code runs yet doesn't actually work
        }

public class Animation
{


    bool  attack;

public bool Attack
    {
        get { return attack; }
        set { value = attack; }
    }

public void Update(GameTime gameTime)
    {

        if (active)
            frameCounter += (int)gameTime.ElapsedGameTime.TotalMilliseconds;
        else
            frameCounter = 0;
        if (attack) ***This never turns true***
            switchFrame = 50;

前に言ったように、ブレークポイントを使用してチェックしましたが、すべてのコードが実行されましたが、攻撃変数には何も起こらず、その理由がわかりません。

私はすべて同じプロパティとコードがリンクされたアクティブと呼ばれる同様のブールを持っていますが、そのブールは更新されるため、私はとても立ち往生しています。

お時間をいただきありがとうございます。

4

5 に答える 5

5

アクセサーのロジックsetは逆です。フィールドをセッターの値に割り当てる必要がありますattack。その逆ではありません

set { attack = value; }
于 2013-03-07T17:20:53.433 に答える
1

他の人が言っているように、あなたsetは後ろ向きです。そのはず

set {attack = value;}

ただし、自動プロパティの使用も提案したいと思います。これで、このケースは簡単に修正できたはずです。ただし、割り当ての適切な順序を知ることは依然として重要です。

public bool Attack {get;set;}
于 2013-03-07T17:25:34.743 に答える
1

問題は

set { value = attack; }

valueフィールドを値に設定するのではなく、フィールドに を設定しています。に変更します

set { attack = value; }

詳細については、ドキュメントを参照してください。

于 2013-03-07T17:21:04.717 に答える
1

あなたのset方法は逆です。代わりにこれを試してください。

set { attack = value };
于 2013-03-07T17:21:09.873 に答える
1

あなたのプロパティ Getter と Setter は些細なことなので、Auto Property のように実装することをお勧めします

 public bool Attack{ get; set; }

そうすることで、コードのサイズを縮小しながら、望ましい結果が得られます。また、バグが最初から導入されることはありません。

于 2013-03-07T17:43:13.073 に答える