2016-11-20 56 views
0

大家好我有一個小問題,但對我來說,是一個大問題。C#奇怪增量bug

首先,我有一個名爲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像素。

現在我想做工精細,但看到這個screenshoot

Look Title Caption

iMove等於0。其實也沒什麼動靜。 iPos是96,這是一個NPC協調。

當我增加運動

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

現在全國COORDS是132爲了什麼?

對此錯誤沒有任何想法。 我增加了32個像素的運動。

96 + 32 = 128但我看到132

有沒有人有想法?

回答

0

它與你的if (m_iMoveY < 0)和類似的檢查有關。條件代碼執行的次數超過了必要的次數。你將不得不調整條件。

m_iPosY += 2;顯然執行的次數多於必要次數。在該線上放置一個斷點並觀察它何時被擊中。特別要注意,當m_iPosY大於你期望的值時 - 在這個時間點檢查其他變量的值。