返回首页

打招呼的家伙。
我新的C#。我想在一个窗口中,以模拟降雪,并一直试图以来相当长的时间来完成它。我已取得Windows窗体的大小800 * 600,并设置其背景颜色为黑色。
我已经使用的系统要求和椭圆绘制,并设法改变它的位置在屏幕上,使用一个计时器。虽然我已经成功地创建一个雪花,我没有能够创建多个雪花。
以下是代码。任何帮助将不胜感激。
在此先感谢。

    public partial class MainForm : Form

    {

        System.Timers.Timer t = new System.Timers.Timer();

        Graphics f;

        int count = 0;

        int inc;

        Pen myPen = new Pen(Color.White, 2);

        int X = 100;

        int Y = 10;

        

        public MainForm()

        {

            InitializeComponent();

        }

 

        private void MainForm_Load(object sender, EventArgs e)

        {

            t.Start();

            t.Interval = 100;

            t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);

        }

 

        private void t_Elapsed(object sender, EventArgs e)

        {

            snowMove();

            if (Y == 550)

            {

                t.Stop();

            }

        }

 

        private void snowMove()

        {

                Random r = new Random();

                //int tc = System.Environment.TickCount;

                f = this.CreateGraphics();

                myPen.Color = Color.White;

                f.DrawEllipse(myPen, X, Y, 2, 2);

                //while (true)

                //{

                //    if (System.Environment.TickCount - tc > 100) break;

                //}

                myPen.Color = Color.Black;

                f.DrawEllipse(myPen, X, Y, 2, 2);

                Y++;

                count++;

                if (count == 5)

                {

                    if ((r.Next(10) - 5) > 0)

                    {

                        inc = +1;

                    }

                    else

                    {

                        inc = -1;

                    }

                    X += inc;

                    count = 0;

                }

                myPen.Color = Color.White;

                f.DrawEllipse(myPen, X, Y, 2, 2);

                

            }

        }

    }

[编辑]代码块添加 - OriginalGriff [/编辑]

回答

评论会员:游客 时间:2012/02/06
看看下面的CodeProject上的文章imgsrc=],其很好地完成。应该会有帮助。此外,这里看看代码...雪的效果是非常好的{A}然而,这是一个XAML代码,这是伟大的动画
。OriginalGriff
评论会员:游客 时间:2012/02/06
首先,将画笔颜色的方法,并有私有类级别的变量:myPenWhite和myPenBlack。因为你会需要他们每一次,是有意义的,有他们提供的。下一步,一流水平,你需要创建一个列表或数组(我会去一个名单)雪花,然后你就可以单独移动。我会做什么是雪花类,创建一个画图Graphics对象上绘制给定的上下文本身的方法。可能的话,我会在雪花类有一个静态随机实例,可能我会告诉将通过不同的方法。取决于我的感觉-这可能是两个
!lukeer:1。每当你想画的东西,在Windows中在OnPaint(PaintEventArgs的)的方法做这件事。
这将防止其他窗口擦除绘图效果,在未来Timer.Tick事件处理程序,直到它被粉刷一新。

2。在每一个可能的时间(你通过Form.Invalidate()),可以调用OnPaint事件。你必须建立在这样一种方式,然后绘制它的目的是绘制它的目的是绘制。创建一个你的雪花,像一个真正的,那种行为"模型",无法根据图纸或不只是像的起始位置,时间等物理。其数据存储在一个对象类型的雪花(你必须创建)

3。然后,您可以轻松地创建一个Listlt; SnowFlakegt;(),你可以加入(新的雪花())。 Form.OnPaint方法,然后将需要遍历"雪花"列表中的所有项目,并呼吁各自的油漆(PaintEventArgs的E)的方法(你必须创建)。使用的PaintEventArgs与Form.OnPaint来。每个鳞片可以根据其内部数据处理当前位置的时候你叫涂料(PaintEventArgs的E)。

减少闪烁
在形式构造,使用this.DoubleBuffered = TRUE。抹去你的背景,一旦每Form.OnPaint(),然后让雪花画自己。不要让自己喜欢你的第二个DrawEllipse()调用薄片擦除