Bool not updating

本文关键字:updating not Bool | 更新日期: 2023-09-27 18:02:43

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

我已经使用断点来尝试自己解决这个问题。将attack设置为true的代码行正在运行,但实际上并没有将attack设置为true…我是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;

就像我之前说的,我已经使用断点来检查,所有的代码都运行,只是我的攻击变量没有发生任何事情,我不知道为什么不。

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

感谢您的宝贵时间。

Bool not updating

set访问器中的逻辑是反向的。您需要将字段attack赋值给setter的值,而不是反过来

set { attack = value; }

问题是

set { value = attack; }

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

set { attack = value; }

您的set方法是反向的。

set { attack = value };

正如其他人所说,您的set是向后的。应该是

set {attack = value;}

但是,我还想建议使用Auto Properties。这样就很容易解决这个问题了。知道正确的赋值顺序仍然很重要,尽管

public bool Attack {get;set;}

由于属性Getter和Setter是微不足道的,我建议将其实现为Auto property,如

 public bool Attack{ get; set; }

这样做,它将减少您的代码大小,但产生预期的结果。而且,这个bug一开始就不会被引入。