我有一个名为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确实会更新,这就是我陷入困境的原因。
感谢您的时间。
答案 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从来没有在第一时间引入过。