Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# 在c中运行螺旋桨#_C#_Winforms_User Interface_Graphics_Rotation - Fatal编程技术网

C# 在c中运行螺旋桨#

C# 在c中运行螺旋桨#,c#,winforms,user-interface,graphics,rotation,C#,Winforms,User Interface,Graphics,Rotation,我的任务有问题。任务是在C#中制作一个旋转风扇。我画了风扇,但当我试图移动它时,一切都坏了。我读了很多关于这件事的话题,但我不知道我做错了什么 这是我如何绘制风扇的4个叶片: public void OnTimer(Object source, ElapsedEventArgs e) { Graphics g = this.CreateGraphics(); drawBlade(g, angle);

我的任务有问题。任务是在C#中制作一个旋转风扇。我画了风扇,但当我试图移动它时,一切都坏了。我读了很多关于这件事的话题,但我不知道我做错了什么

这是我如何绘制风扇的4个叶片:

public void OnTimer(Object source, ElapsedEventArgs e)
        {

                    Graphics g = this.CreateGraphics();
                    drawBlade(g, angle);
                    drawBlade(g, angle + 90);
                    drawBlade(g, angle + 180);
                    drawBlade(g, angle + 270);
                    g.Dispose();


            }
我试着用定时器旋转它们,但它会导致叶片闪烁,并且不会改变位置。所以我需要找到一种方法,使它们在椭圆中心周围平滑地移动,我用椭圆作为边界

这是drawBlade的功能:

public void drawBlade(Graphics g, float angle)
        {

            g.FillPie(Brushes.Black, xCenter - bladeLength, yCenter - bladeLength, 2 * bladeLength, 2 * bladeLength, angle, 30);
        }

事先谢谢你

首先,我真的认为您的代码没有问题。不幸的是,对您的图形的理解存在问题。必须每秒移动刀片至少18次(帧),才能将移动注册为旋转移动。前面建议使用位图而不是绘制叶片,这很有用,因为您可以在绘图软件中创建旋转效果(只要以小角度绘制后旋转整个风扇),并存储该图像以供以后显示。现在,要想在人眼上注册,它必须在屏幕上持续几毫秒才能改变。因此,如果你画一个风扇旋转,请在重新绘制风扇叶片或图像之间添加一个小延迟,20-50毫秒。同样为了创造移动的错觉,你必须在“关键”位置之间有几个“中间”位置。这听起来可能令人困惑,但我会解释我自己。不幸的是,在4刀片设置中,您只有一个关键位置,刀片之间呈90度角,分别位于12、3、6和9。为了创造运动错觉,你必须创造至少3个中间位置,彼此之间至少相隔7度,以便运动注册。因此,我的建议是将90度空间分成3个(我建议5个)中间位置,它们不必均匀,在这些位置绘制叶片,尊重显示间隔,你会有旋转的错觉。如果沿着绘制叶片的路径前进,请不要忘记在绘制新叶片之前删除先前的图纸

你应该展示你的drawBlade功能,你所拥有的没有明显的错误。同时显示修改/跟踪角度变量的位置。另外,不要使用“this.CreateGraphics”,而是使用位图并更新它。那么您希望螺旋桨在一个圆圈内旋转和移动吗?如果是这样,代码中的运动在哪里?为了看起来像一个旋转的螺旋桨,它不应该仅仅跳跃90°,而是使用旋转变换器以小角度跳跃!角度=(角度+方向)/360;这就是修改角度变量的方式。角度设置为100,方向设置为1,这在看不到动画代码的情况下是一个相当大的飞跃。他可以用类似的方式开始绘制动画。这不是火箭科学。这是老派的愚弄眼睛的技术。18fps是可以用于按顺序显示静态图片的最低频率,并且人眼可以将结果视为运动。低于此值的任何内容都会被视为单独的图片,或者如果显示得太快,则会被视为垃圾。他们甚至没有注册。OP使用的是Winforms,当然不是火箭科学。我想说的是我不可能知道你的解释适用于OP的问题。症状:刀片闪烁,但没有移动的痕迹。最可能的原因是,角度始终以90度递增,共有4个叶片。结果是闪烁但不移动。他在一个即时事件中画了这张图,所以我想OP已经发现他需要等待一段时间才能进入下一张图。最有可能的是,间隔很小,足以被视为眨眼,而不是移动。我所做的只是得到症状和图纸代码并假设。。如果我的假设是错误的,那么OP必须进一步澄清。