我有一个如此定义的枚举:
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;
}
}
}
}
方法
答案 0 :(得分:0)
假设你没有陈旧的二进制文件(正如Oded所指出的那样)......
在赋值上设置断点,并确保它实际执行。然后,在分配后立即使用Step Over
),验证direction
。
如果它在那时正确,那么某些 else会导致它被重置。
答案 1 :(得分:0)
是的,我正在回答我自己的问题: - )
至于为什么它不起作用。我知道一部分为什么而另一部分我不知道。
我知道的部分:
我在Update()方法中调用了这个方法:
移动(方向,clientBounds);
但事实是Enums是结构。实际上正在复制 Move(direction,clientBounds)方法中的参数!方法内发生的任何更改都不会影响变量的原始值。因此,当我离开Move()方法时,任何时候我都会得到原始值。
我现在无法依赖的事实是我从Move方法调用中删除了作为参数的方向,现在我将新方向直接分配给类级变量私有方向; < / strong>即可。这看起来很完美:-)但为什么呢?