无法为变量分配新的枚举值

时间:2011-02-23 14:49:35

标签: syntax c#-4.0

我有一个如此定义的枚举:

 public enum Direction
{
    Left,
    Right,
    Up,
    Down
}

我在类中的以下变量:

private Direction direction;

在构造函数中,我赋值变量:

direction = Direction.Right;

然后,在同一个类的方法中,我尝试分配一个新的Enum值:

direction = Direction.Down;

但它不会让我!它继续回到Right值,即使它被设置的唯一位置是在构造函数中!

发生了什么事? O_O

编辑 - 更多代码

    namespace MyFirstGame
{
    public enum Direction
    {
        Left,
        Right,
        Up,
        Down
    }
}

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace MyFirstGame
{
    public class Invader : Sprite, IMovable
    {
        private InvaderType invaderType { get; set; }
        private Direction direction;
        private Vector2 speed;

        public Invader(Texture2D image, Vector2 position)
            : base(image, position, new Point(30, 16), new Point(0, 0), new Point(2, 0))
        {
            direction = Direction.Right;
            speed.X += 30;
        }

        public override void Update(GameTime gameTime, Rectangle clientBounds)
        {
            timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds;

            if (timeSinceLastFrame > milliSecondsPerFrame)
            {
                timeSinceLastFrame -= milliSecondsPerFrame;

                ++currentFrame.X;

                if (currentFrame.X >= SheetSize.X)
                {
                    currentFrame.X = 0;
                }

                Move(direction, clientBounds);
            }
        }

        public void Move(Direction direction, Rectangle clientBounds)
        {
            if (direction == Direction.Right)
            {
                //is invader 3 px from the right edge?
                //if yes: then drop
                //else keep on truckin' to the right!
                if (position.X >= (clientBounds.Width - (Image.Width + 3)))
                {
                    //position.X = 0;
                    position.Y += speed.X;

                    direction = Direction.Down;
                }
                else
                {
                    position.X += speed.X; //Speed
                }
            }
            else if (direction == Direction.Down)
            {
                speed.X *= -1;
                position.X += speed.X;
            }
        }
    }
}

方法

2 个答案:

答案 0 :(得分:0)

假设你没有陈旧的二进制文件(正如Oded所指出的那样)......

在赋值上设置断点,并确保它实际执行。然后,在分配后立即使用Step Over),验证direction

的值

如果它在那时正确,那么某些 else会导致它被重置。

答案 1 :(得分:0)

是的,我正在回答我自己的问题: - )

至于为什么它不起作用。我知道一部分为什么而另一部分我不知道。

我知道的部分:

我在Update()方法中调用了这个方法:

移动(方向,clientBounds);

但事实是Enums是结构。实际上正在复制 Move(direction,clientBounds)方法中的参数!方法内发生的任何更改都不会影响变量的原始值。因此,当我离开Move()方法时,任何时候我都会得到原始值。

我现在无法依赖的事实是我从Move方法调用中删除了作为参数的方向,现在我将新方向直接分配给类级变量私有方向; < / strong>即可。这看起来很完美:-)但为什么呢?