Sprite schiesst nicht wenn es diagonal bewegt wird

pipistrello

Mitglied
Code:
private void PlayerMoves(GameTime gametime)
        {
            KeyboardState taste = Keyboard.GetState();
          
            //nach Oben
            if (taste.IsKeyDown(Keys.Up))           
                m_fYPos -= 300 * (float)gametime.ElapsedGameTime.TotalSeconds; //m_fYPos -= 5.0f; 
            
            //nach Unten
            if (taste.IsKeyDown(Keys.Down))
                m_fYPos += 300 * (float)gametime.ElapsedGameTime.TotalSeconds;//m_fYPos += 5.0f;

            //nach Links
            if (taste.IsKeyDown(Keys.Left))
            {
                //Spieler nach links bewegen            
                m_fXPos -= 300 * (float)gametime.ElapsedGameTime.TotalSeconds; //m_fXPos -= 5.0f;

                //Animieren
                m_fFrameNum -= 20.0f * (float)gametime.ElapsedGameTime.TotalSeconds;
            }

            //nach Rechts
            if (taste.IsKeyDown(Keys.Right))
            {
                //Spieler nach rechts bewegen            
                m_fXPos += 300 * (float)gametime.ElapsedGameTime.TotalSeconds; //m_fXPos += 5.0f;

                //Animieren
                m_fFrameNum += 20.0f * (float)gametime.ElapsedGameTime.TotalSeconds;
            }

            //Schiessen
            if (taste.IsKeyDown(Keys.Space))
            {
                //Neuen Schuss erstellen und Initialisieren
                CShot Shot = new CShot();
                Shot.Initialize(m_pSpriteShot, m_fXPos, m_fYPos);

                //Schuss in die Liste einfügen
                m_ShotList.Add(Shot);

                //Schiessen erst wieder erlaubt, wenn SPACE losgelassen wird
                //m_bShotLock = true;
            }

            //Schiff wird weder nach links noch nach rechts bewegt. Also zum Ausgangsframe animieren
            if (taste.IsKeyUp(Keys.Left) || taste.IsKeyUp(Keys.Right))
            {
                if (m_fFrameNum > 5.0f)
                    m_fFrameNum -= 20.0f * (float)gametime.ElapsedGameTime.TotalSeconds;
                if (m_fFrameNum < 5.0f)
                    m_fFrameNum += 20.0f * (float)gametime.ElapsedGameTime.TotalSeconds;
            }

            //Animationsphase überprüfen
            if (m_fFrameNum < 0.0f)
                m_fFrameNum = 0.0f;
            else if (m_fFrameNum > 10.0f)
                m_fFrameNum = 10.0f;
        }

Wenn das Sprite diagonal nach oben links, unten links oder unten rechts bewegt wird, wird die if-Bedingung in Zeile 34 nicht abgearbeitet, wenn Ich die Leertaste drücke.

Bewege ich das Sprite hingegen nach oben rechts und drücke die Leertaste wird der Schuss abgefeuert.

Was ist da los *g* ?

edit :

Liegt an meiner Tastatur, steuert man das Sprite mit W,S,A,D gibts keine Probleme, mit den Pfeiltasten hingegen schon..
 
Zuletzt bearbeitet:

Neue Beiträge