2016-11-20 4 views
0

Hallo alle ich habe ein kleines Problem, aber für mich ist ein großes Problem.C# Seltsam Incremental Bug

Erstens, ich habe eine Klasse 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; 
        } 
       } 

Beschreibung genannt. m_iMove sind eine gespeicherte Bewegung zuerst zu gehen m_iPos sind echte Koordinaten für NPC.

Wenn ich einen NPC Spaziergang mache, setze ich auf m_iMove + 32. in Update, iPos Inkremente und iMove Dekrement. Wenn iMove 0 sind, sind die Bewegungen abgeschlossen.

Der NPC gehen auf Raster 32x32 Pixel.

Jetzt denke ich, gut funktionieren, aber sehen diese Screen

Look Title Caption

iMove auf 0 keine Bewegung eigentlich gleich sind. iPos sind 96, es ist ein NPC Coords.

wenn ich Bewegung erhöhen

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 

diesen Bildschirm sehen

Look Title Caption

nun den NPC Coords sind 132 für das, was?

Keine Idee für diesen Fehler. Ich inkrementiere 32 Pixel für die Bewegung.

96 + 32 = 128, aber ich sehe 132

jemand eine Idee Hat?

Antwort

0

Es hat mit Ihrem if (m_iMoveY < 0) und den ähnlichen Überprüfungen zu tun. Der bedingte Code wird öfter ausgeführt als nötig. Sie müssen den Zustand anpassen.

m_iPosY += 2; wird offensichtlich zweimal mehr als notwendig ausgeführt. Setzen Sie einen Haltepunkt auf diese Linie und beobachten Sie, wann sie getroffen wird. Achten Sie besonders darauf, wenn das m_iPosY größer ist als das, was Sie erwarten - überprüfen Sie den Wert zum Zeitpunkt der anderen Variablen.