如何将单位转换为每秒帧数作为速度?

时间:2013-11-20 18:48:38

标签: c# winforms

我在form1中有这个我为label2分配定时器间隔,默认间隔是100ms。 我希望用户能够看到它并将间隔速度更改为每秒帧数:

label2.Text = timer1.Interval.ToString();

这是Form1中的鼠标滚轮事件:

private void Form1_MouseWheel(object sender, MouseEventArgs e)
        {
            PbsWheel pbsw = new PbsWheel(pbs, pb, e.Delta, label2);
        }

这是班级Pbswheel pbs是pictureBoxes的数组,pb是pictureBox。

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WeatherMaps
{
    class PbsWheel
    {
        public PbsWheel(AnimatedPictureBox.AnimatedPictureBoxs[] pbs, AnimatedPictureBox.AnimatedPictureBoxs pb, int delta,Label label2)
        {
            for (int i = 0; i < pbs.Length; i++)
            {

                if (delta > 0)
                {
                    if (pbs[i].AnimateRate < 5000)
                    {
                        if (pbs[i].AnimateRate < 1000)
                        {
                            pbs[i].AnimateRate += 100;
                            label2.Text = (pbs[i].AnimateRate / (double)1000).ToString();
                        }
                        else
                        {
                            pbs[i].AnimateRate += 1000;
                            label2.Text = (pbs[i].AnimateRate / 1000).ToString();
                        }
                    }

                }
                else
                {
                    if (pbs[i].AnimateRate > 1000)
                    {
                        pbs[i].AnimateRate -= 1000;
                        label2.Text = (pbs[i].AnimateRate / 1000).ToString();
                    }

                    else

                        if (pbs[i].AnimateRate <= 1000 && pbs[i].AnimateRate > 100)
                        {
                            pbs[i].AnimateRate -= 100;
                            label2.Text = (pbs[i].AnimateRate / (double)1000).ToString();
                        }
                }
            }

            if (delta > 0)
            {
                if (pb.AnimateRate < 5000)
                {
                    if (pb.AnimateRate < 1000)
                    {
                        pb.AnimateRate += 100;
                        label2.Text = (pb.AnimateRate / (double)1000).ToString();
                    }
                    else
                    {
                        pb.AnimateRate += 1000;
                        label2.Text = (pb.AnimateRate / 1000).ToString();
                    }
                }

            }
            else
            {
                if (pb.AnimateRate > 1000)
                {
                    pb.AnimateRate -= 1000;
                    label2.Text = (pb.AnimateRate / 1000).ToString();
                }

                else

                    if (pb.AnimateRate <= 1000 && pb.AnimateRate > 100)
                    {
                        pb.AnimateRate -= 100;
                        label2.Text = (pb.AnimateRate / (double)1000).ToString();
                    }
            }        
        }
    }
}

现在我在运行程序时所做的事情我在label2 100(100ms)上看到 然后,当我将车轮向下移动时,最快速度达到最小值0.1。 当我向上移动时:01,0.2,0.3 ...... 0.9,1,2,3,4,5 最高速度为5秒。

它的作用是改变每个pictureBox中图像的速度将显示为动画/循环。

AnimateRate在此类中使用此类为每个pictureBox为动画/图像循环制作计时器,AnimateRate在移动鼠标滚轮时设置速度。

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DannyGeneral;

namespace WeatherMaps
{
    class AnimatedPictureBox
    {
        //Use this custom PictureBox for convenience
        public class AnimatedPictureBoxs : PictureBox
        {
            public static bool images; 
            List<string> imageFilenames;
            Timer t = new Timer();
            public AnimatedPictureBoxs()
            {
                images = false;
                AnimateRate = 100; //It's up to you, the smaller, the faster.
                t.Tick += Tick_Animate;
            }
            public int AnimateRate
            {
                get { return t.Interval; }
                set { t.Interval = value; }
            }
            public void Animate(List<string> imageFilenames)
            {
                this.imageFilenames = imageFilenames;
                t.Start();
            }
            public void StopAnimate()
            {
                t.Stop();
                i = 0;
            }
            int i;
            private void Tick_Animate(object sender, EventArgs e)
            {
                if (images == true)
                {
                    imageFilenames = null;
                }
                if (imageFilenames == null)
                {
                    return;
                }
                else
                {
                    try
                    {
                        if (i >= imageFilenames.Count)
                        {
                            i = 0;
                        }
                        else
                        {
                            Load(imageFilenames[i]);
                            i = (i + 1) % imageFilenames.Count;
                        }
                    }
                    catch (Exception err)
                    {
                        Logger.Write(err.ToString());
                    }
                }
            }
        }
    }
}
form1中的timer1永远不会使用我只是做了label2文本将是timer1的默认间隔,但我没有使用timer1。

代码有点长,但全部连接。

而是改变现在的速度,我想将其更改为每秒帧数。

1 个答案:

答案 0 :(得分:1)

每秒帧数是频率,f,间隔是期间,P。频率和周期之间的关系是

P = 1/f

我认为这就是你需要知道的全部。