布尔没有更新

时间:2013-03-07 17:19:11

标签: c# xna

我有一个名为attack的bool,只要按下Q按钮,我就会设置为true(Q是攻击)

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

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确实会更新,这就是我陷入困境的原因。

感谢您的时间。

5 个答案:

答案 0 :(得分:5)

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

set { attack = value; }

答案 1 :(得分:1)

问题是

set { value = attack; }

您将value设置为字段,而不是将字段设置为值。将其更改为

set { attack = value; }

阅读documentation了解更多信息。

答案 2 :(得分:1)

您的set方法已落后。试试这个。

set { attack = value };

答案 3 :(得分:1)

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

set {attack = value;}

但是,我还建议使用自动属性。这样可以很容易地解决这个问题。尽管

知道正确的作业顺序仍然很重要
public bool Attack {get;set;}

答案 4 :(得分:1)

由于您的属性Getter和Setter很简单,我建议将其实现为自动属性,如

 public bool Attack{ get; set; }

这样做会减少你的代码大小,但会产生预期的结果。而且,这个bug从来没有在第一时间引入过。