2016-11-20 5 views
0

こんにちはすべて私は小さな問題を抱えていますが、私にとっては大きな問題です。C#Strangeインクリメンタルバグ

まず、私は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実際には動きに等しいこのscreenshootを参照してください。 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

この画面を参照してくださいをインクリメントするとき今NPC COORDSは何のために132ありますか?

このバグはありません。 私は移動のために32ピクセルをインクリメントします。 = 128

96 + 32が、私は132

を参照してください誰もがアイデアを持っていますか?

答えて

0

あなたのif (m_iMoveY < 0)と同様のチェックと関係があります。条件コードは必要以上に多く実行されています。あなたは条件を調整する必要があります。

m_iPosY += 2;は明らかに必要以上に2回実行されます。その行にブレークポイントを置き、ヒットしたときを観察します。特に、m_iPosYが予想よりも大きいときは、他の変数の値を調べる時点で注意してください。