- это значение по умолчанию - обновление вызывается 60 раз в секунду, поэтому значение gameTime.ElapsedGameTime.TotalSeconds будет составлять около 0,1 при каждом обновлении. Если что-то приводит к пропуску обновления (например, проблемы с рендерингом), обновление будет отложено, и gameTime.ElapsedGameTime.TotalSeconds может быть равно 0,3 (пропущено 2 обновления), но формула по-прежнему работает с правильной скоростью перехода.

аюсь симулировать гравитацию в моей первой игре xna 2d. У меня есть следующее

        //Used for Jumping
    double elapsedAirTime = 0.0;
    double maxAirTime = 8.35;
    //End Jumping

Поэтому я пытаюсь переместить спрайт на определенную величину, в то время как elapsedAirTime <maxAirTime. Однако, есть некоторая проблема, когда мой код, кажется, только перемещает спрайт вверх один раз, а не несколько раз в течение этого отрезка времени. Вот код в моем классе «player.cs» или метод обновления класса.

if (newState.IsKeyDown(Keys.Space))
        {
            if(oldState.IsKeyUp(Keys.Space))
            {
                //if we are standing or jumping then change the velocity
                if (playerState == PlayerStates.Standing)
                {
                    playerState = PlayerStates.Jumping;
                    this.position.Y -= (float)(30.0 + ((1.2)*elapsedAirTime)*elapsedAirTime);
                }
            }
        }
        //if we are jumping give it some time
        if (playerState == PlayerStates.Jumping)
        {
            if ((elapsedAirTime < maxAirTime) && position.Y < 3)
            {
                this.position.Y -= (float)(30.0 + ((1.2) * elapsedAirTime)*elapsedAirTime);
                elapsedAirTime += gameTime.ElapsedGameTime.TotalSeconds;
            }
            //otherwise time to fall
            else
            {
                playerState = PlayerStates.Falling;
            }

        }

        //add gravity to falling objects
        if (playerState == PlayerStates.Falling || playerState == PlayerStates.Standing)
        {
            //if we are above the ground
            if (this.position.Y < windowBot - 110)
            {
                //chnage state to falling
                playerState = PlayerStates.Falling;
                this.position.Y += 3.0f + ((float)(gameTime.ElapsedGameTime.TotalSeconds));
            }
            else
            {
                playerState = PlayerStates.Standing;
                elapsedAirTime = 0.0f;
            }
        }

Любая помощь очень ценится, пожалуйста, и спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос