GameTime和实时

时间:2012-01-31 00:32:29

标签: c# xna xna-4.0

我想在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 个答案:

答案 0 :(得分:2)

我认为这是你的更新/渲染功能。

例如,假设自上次渲染以来已经过了300ms。这意味着您必须在矩形中添加100%/ 3000ms * 300ms = 10%。

- &GT;您错过了计算中的已用时间:

percentage += addValue * gameTime.ElapsedGameTime.Milliseconds;

答案 1 :(得分:0)

根据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;
    }