将Rectangle附加到旧矩形

时间:2014-05-26 09:07:33

标签: c# arrays timer drawrectangle

Hye那里我是C#的新手并且是我自己学习的。我的问题是我想在旧矩形上添加一个新的矩形,并使用我的代码所在的计时器将它们全部移动:

        Rectangle[] rec;
        int rec_part=4;
        int rec_x = 0;
        Color c = Color.FromArgb(255, 255, 255);

        public Form1()
        {
            InitializeComponent();
            rec = new Rectangle[rec_part];

            for (int i = 0; i <rec_part; i++)
            {
                rec_x += 43;
                rec[i] = new Rectangle(rec_x, 100, 40,40);
            }
        }

它将初始化4个矩形! 然后:

        Graphics g;

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
             g = e.Graphics;
             g.SmoothingMode = SmoothingMode.AntiAlias;

             for (int i = 0; i < (rec_part); i++)
             {
                 g.FillRectangle(new SolidBrush(Color.Red), rec[i]);
             }

        }

这将在表单上绘制4个矩形控件! 然后:

        int speed = 2;
        private void timer1_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < rec.Length; i++)
            {
                rec[i].X += speed;
                rec_part += 1;  Here i want to append a new Rectangle to the existing rectangles! 
                 the array size is to increment so that that a new rectangle will append 
            }
            Refresh();
        }

但问题是我的代码中抛出了超出范围异常的索引但是如果我使用我的计时器:

        int speed = 2;
        private void timer1_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < rec.Length; i++)
            {
                rec[i].X += speed;
                if (rec_part == rec.Length)
                {
                    rec_part = 0;
                }
                else
                {
                    rec_part += 1;
                }
         }
            Refresh();
          }

所有这些代码都运行良好,但它开始闪烁太多,以至于无法完美地观看它,每次绘制4个新矩形时,我想添加一个新的矩形! 对不起,我的英语可以帮助我排序问题谢谢

1 个答案:

答案 0 :(得分:0)

我建议你将矩形添加到列表而不是数组。

我还建议你不要使用winforms绘制矩形WPF在绘制大量东西方面要快得多,但它更复杂但速度更快。

如果您需要任何代码示例,我会回复

这是我的代码:

          rectangles2[i] = rectangleupdated(rectangles2[i]);

Rectangles2是一个矩形列表,rectangleupdated将矩形作为参数然后修改矩形,如下所示:

Rectangle rectangleupdated(Rectangle rect){
    return rect.Y--;
}

这是我在碰撞检查后的结果和一切(这是一个粉末游戏) enter image description here