GameTime и реальное время - PullRequest
       15

GameTime и реальное время

1 голос
/ 31 января 2012

Я пытаюсь заполнить прямоугольник за 3 секунды реального времени.Я хочу, чтобы приращение было постоянным, чтобы оно выглядело красиво и не имело ускоренияи у меня проблемы с пониманием, что делатьэто мой код

// constant
// 1.0f = 100% of rectangle, 3 sec = 3000.0 miliseconds
float addValue = 1.0f/3000.0f; 

    public override void Update(GameTime gameTime)
    {
        newGameTime += gameTime.ElapsedGameTime.Milliseconds;

        // once the percentage is set to 0 this starts
        if ((percentage < 1))
        {
            // calculate value here in order to time
            percentage += addValue;
        }
    }

Я пробовал все виды сумасшедшей математики, чтобы понять это правильно, но я полностью потерял это.:( Я знаю, что должен использовать gameTime или newGameTime, но я потерян

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Я предполагаю, что это ваша функция обновления / рендеринга.

Скажем, например, что с момента последнего рендеринга прошло 300 мс.Это означает, что вам нужно добавить 100% / 3000 мс * 300 мс = 10% к вашему прямоугольнику.

-> Вы упускаете затраченное время в расчете:

percentage += addValue * gameTime.ElapsedGameTime.Milliseconds;
0 голосов
/ 31 января 2012

Я могу быть совершенно не прав с этим ответом в соответствии с тем, что ccKep только что упомянул в своем комментарии.

Но на всякий случай, если это то, что вы ищете, я собрал это вместе.

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

    public int percentage;
    public int Percentage
    {
        get { return percentage; }
        set
        {
            percentage = value;
            if (Percentage >= 0 && Percentage < 100)
            {
                progressBar1.Value = value;
            }
            else
            {
                Percentage = 0;
                timer1.Stop();
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Percentage = 0;
        timer1.Interval = 1000;
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        double addValue = 100 / 3;
        Percentage += (int)addValue;
    }
...