2

我有一个 bool 调用attack,每当Q按下按钮时我将其设置为 true (Q是攻击)

我已经使用断点来尝试自己解决问题。设置为 true 的代码行attack正在运行,但实际上并没有设置attack为 true ...我是 XNA 的新手,如果这是一个明显的解决方案,我很抱歉。这是代码..:(ps我遗漏了很多与问题无关的代码)

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;

就像我之前说的,我使用断点进行检查,并且所有代码都运行了,只是我的攻击变量没有发生任何事情,我不确定为什么不发生。

我有一个类似的 bool,称为 active,具有所有相同的属性和链接的代码,但该 bool 确实得到了更新,这就是我如此卡住的原因。

感谢您的时间。

4

5 回答 5

5

访问器中的逻辑set是向后的。您需要将字段分配给attack设置器的值,而不是相反

set { attack = value; }
于 2013-03-07T17:20:53.433 回答
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

正如其他人所说,你set是倒退的。它应该是

set {attack = value;}

但是,我还想建议使用自动属性。这很容易解决这个问题。不过,知道分配的正确顺序仍然很重要

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

由于您的属性 Getter 和 Setter 是微不足道的,我建议将其实现为 Auto Property 之类

 public bool Attack{ get; set; }

Doing so, it will reduce your code size and yet yield the desired result.Also, the bug will have never been introduced at first place.

于 2013-03-07T17:43:13.073 回答