C#Strange Incremental bug

时间:2016-11-20 10:35:14

标签: c# xna

大家好我有一个小问题,但对我来说,这是个大问题。

首先,我有一个名为NPC

的班级
public void Update()
              {

                  if (m_iMoveX != 0 || m_iMoveY != 0)
                      m_iFrame = (m_iFrame + 1) % 16;
                  else
                      m_iFrame = 0;

                  if (m_iPause > 0)
                      --m_iPause;

                  if (m_iMoveX > 0)
                  {
                      m_iPosX += 2;
                      m_iMoveX -= 2;
                  }

                  if (m_iMoveX < 0)
                  {
                      m_iPosX -= 2;
                      m_iMoveX += 2;
                  }

                  if (m_iMoveY > 0)
                  {
                      m_iPosY += 2;
                      m_iMoveY -= 2;
                  }

                  if (m_iMoveY < 0)
                  {
                      m_iPosY -= 2;
                      m_iMoveY += 2;
                  }
              }

描述。 m_iMove是首先行走的存储动作 m_iPos是NPC的真实坐标。

当我进行npc步行时,我设置m_iMove + 32。 在更新中,iPos递增并且iMove递减。 如果iMove为0则移动完成。

NPC在网格上行走32x32像素。

现在我认为工作正常,但请参阅此屏幕截图

Look Title Caption

iMove等于0.实际上没有动作。 iPos是96,这是NPC Coords。

当我增加动作时

   pl.m_iMoveY += 32;  //Increments iMove for the movement                     

     pl.m_npcDirection = NPCDirection.Dowm; //Setup the face
     if (pl.m_iMoveY > 32)  //if i press KeyDown and iMove have a value > of 32
     pl.m_iMoveY = 32; //Force to execute 32 pixel movement

请参阅此屏幕

Look Title Caption

现在NPC Coords是132?

对此错误没有任何想法。 我为这个动作增加了32个像素。

96 + 32 = 128但我看到132

有没有人有想法?

1 个答案:

答案 0 :(得分:0)

它与您的if (m_iMoveY < 0)和类似的检查有关。条件代码执行的次数超过了必要的次数。你必须调整条件。

m_iPosY += 2;显然执行的次数超过了必要的两倍。在该线上放置一个断点并观察它何时被击中。特别要注意当m_iPosY大于你预期的时候 - 在时间点检查其他变量中的值。

相关问题