Ходьба в режиме ожидания анимации перехода проблемы - PullRequest
0 голосов
/ 13 июля 2010

У меня проблемы с переводом ходьбы в режим ожидания.

Может быть, есть лучший способ сделать это?

Проблема : я могу проверить, не нажимаются ли клавиши на клавиатуре, но при этом анимация ходьбы отображает только первый кадр, а не полную анимацию.

Вопрос: Как я могу изменить это так, чтобы, когда пользователь закончил ходить, он изменил состояние обратно на «Idle», не конфликтуя с анимацией ходьбы влево и вправо.

   private void UpdateMovement(KeyboardState aCurrentKeyboardState, GameTime gameTime)
    {
        timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds; //Framerate control

        if (timeSinceLastFrame > millisecondsPerFrame) //Framerate control
        {
            timeSinceLastFrame -= millisecondsPerFrame; //Framerate control

            //Idle if no keys are down
            if (mCurrentState == State.Idle)
            {
                Position.Y = 210;
                currentImageIndex++;
                if (currentImageIndex < 17 || currentImageIndex > 23)
                    currentImageIndex = 17;
            }
                //Walk Left
            if (aCurrentKeyboardState.IsKeyDown(Keys.Left))
            {
                    mCurrentState = State.Walking;
                    if (currentImageIndex < 8 || currentImageIndex > 15)
                        currentImageIndex = 8;   
                    Position.Y = 200;
                    currentImageIndex++;
                    Position.X += MOVE_LEFT;
                    if (currentImageIndex > 15)
                        currentImageIndex = 8;
            }
                //Walk Right
                if (aCurrentKeyboardState.IsKeyDown(Keys.Right))
                {
                    mCurrentState = State.Walking;
                    if (currentImageIndex > 7)
                        currentImageIndex = 0;
                    Position.Y = 200; ;
                    currentImageIndex++;
                    Position.X += MOVE_RIGHT;
                    if (currentImageIndex > 7)
                        currentImageIndex = 0;
                }
            if (aCurrentKeyboardState.IsKeyDown(Keys.None))
                mCurrentState = State.Idle;
        }
    }

1 Ответ

1 голос
/ 14 июля 2010

Использование Keys.None семантически не эквивалентно «никакие клавиши не нажаты», это скорее просто зарезервированное значение операционной системы. См., Например, документацию для перечисления ключей . Поэтому я сомневаюсь, что этот код вернет вашего персонажа к State.Idle после достижения State.Walking, анимация просто остановится, когда вы отпустите клавиши. Чтобы проверить, не нажимаются ли клавиши, измените последний оператор if, чтобы использовать вместо него aCurrentKeyboardState.GetPressedKeys().Length == 0, или поменяйте местами с оператором else, который будет достигнут, если не нажата ни Keys.Left, ни Keys.Right.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...