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