Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是每秒60帧吗? public pbsweel(AnimatedPictureBox.AnimatedPictureBoxs[]pbs,AnimatedPictureBox.AnimatedPictureBoxs pb,int delta,标签2) { 对于(int i=0;i0) { pbs[i].动画制作+=1/60*1000;_C#_Winforms - Fatal编程技术网

C# 是每秒60帧吗? public pbsweel(AnimatedPictureBox.AnimatedPictureBoxs[]pbs,AnimatedPictureBox.AnimatedPictureBoxs pb,int delta,标签2) { 对于(int i=0;i0) { pbs[i].动画制作+=1/60*1000;

C# 是每秒60帧吗? public pbsweel(AnimatedPictureBox.AnimatedPictureBoxs[]pbs,AnimatedPictureBox.AnimatedPictureBoxs pb,int delta,标签2) { 对于(int i=0;i0) { pbs[i].动画制作+=1/60*1000;,c#,winforms,C#,Winforms,1/60*1000是每秒60帧 这是我制作图片框动画的方法,里面的图片。我为每个图片框使用计时器: public PbsWheel(AnimatedPictureBox.AnimatedPictureBoxs[] pbs, AnimatedPictureBox.AnimatedPictureBoxs pb, int delta,Label label2) { for (int i = 0; i < pbs.Length; i++)

1/60*1000是每秒60帧

这是我制作图片框动画的方法,里面的图片。我为每个图片框使用计时器:

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

                if (delta > 0)
                {
                    pbs[i].AnimateRate += 1/60 * 1000;
公共类动画PictureBox:PictureBox
{
公共静态布尔图像;
列出图像文件名;
定时器t=新定时器();
公共动画PictureBoxs()
{
图像=假;
AnimateRate=100;//由您决定,越小,速度越快。
t、 勾选+=勾选动画;
}
公共整数动画
{
获取{返回t.Interval;}
设置{t.Interval=value;}
}
public void动画(列出图像文件名)
{
this.imageFilenames=imageFilenames;
t、 Start();
}
公共void StopAnimate()
{
t、 停止();
i=0;
}
int i;
私有void Tick_动画(对象发送器、事件参数)
{
如果(图像==真)
{
imageFilenames=null;
}
if(imageFilenames==null)
{
回来
}
其他的
{
尝试
{
如果(i>=imageFilenames.Count)
{
i=0;
}
其他的
{
加载(图像文件名[i]);
i=(i+1)%imageFilenames.Count;
}
}
捕获(异常错误)
{
}
}
}
将速率设置为100,我要做的是显示,当我上下移动鼠标滚轮时,以每秒帧数更改图像动画的速度

pbs是一组图片盒

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)
                    {

                    }
                }
            }
现在,
AnimateRate
是一个整数属性。它的名称非常糟糕。它不是一个速率。它是一个计时器间隔。用数学术语来说,它是一个周期。将它命名为rate听起来好像是一个速率或频率

周期T和频率f之间的数学关系为:

pbs[i].AnimateRate += 1/60 * 1000;
因此,以下是您应该做的:

  • 将属性重命名为
    AnimationInterval
  • 当您需要将频率(即帧速率)转换为间隔时,请使用上述公式
  • 请注意,您需要考虑这样一个事实,即您的频率是以每秒帧数为单位测量的,但您的间隔是以毫秒为单位测量的。因此,您的代码应该是:

    T = 1/f
    
    这看起来与你的非常相似,但有一个细微的区别。在数学中,公式是相同的。但在C#中,
    /
    运算符的行为取决于其操作数的类型。你提供了两个整数,因此
    /
    是整数除法。
    1/60
    的结果是零。因此你的代码不是修改属性

    我确实认为您需要稍微修改一下逻辑。目前,您的原始数据是一个间隔。但实际上,您希望控制的是帧速率。因此,我认为您应该维护一个保持帧速率的变量。如果您想要修改它,则对帧速率变量进行修改。然后将间隔设置为这:

    pbs[i].AnimationInterval += 1000/60;
    

    我认为它是0。这是整数运算,并且
    1/60
    ==0。
    pbs[i].AnimationInterval = 1000/frameRate;