在c#中运行Propeller

时间:2015-04-27 01:40:12

标签: c# winforms user-interface graphics rotation

我遇到的任务有问题。任务是在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);
        }

事先谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我真的不认为您的代码存在问题。不幸的是,您的绘图如何被感知存在问题。您必须每秒至少移动刀片18次(帧)才能将机芯注册为旋转运动。之前使用位图而不是绘制刀片的建议非常有用,因为您可以在绘图软件中创建旋转效果(通过以小角度绘制后旋转整个风扇)并存储该图像以供以后显示。现在要注册到人眼,它必须在屏幕上更改才能持续几毫秒。所以如果你画一个风扇旋转添加一个小延迟,在重新绘制风扇叶片或图像之间20-50ms。同样要创造移动的幻觉,你必须有几个"中介" " key"之间的位置位置。这可能听起来令人困惑但我会解释自己。在你的4刀片设置中,不幸的是只有一个关键位置,刀片在12,3,6和9处相互成90度。为了创造运动的幻觉,你必须创建至少3个中间位置注册运动至少相隔7度。所以我的建议是将3度中的90度空间(我建议5个)中间位置分开,它们不必是统一的,在那些位置绘制刀片,尊重展示间隔,你将有旋转的幻觉。如果沿着绘制刀片的路径走,请不要忘记在绘制新刀具之前删除上一个绘图。