-1

嘿,我是 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 个新矩形,而我想附加一个新矩形!对不起我的英语不好。有人可以帮我解决问题吗?谢谢。

4

1 回答 1

-1

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

我还建议您不要使用 winforms 来绘制矩形 WPF 在绘制很多东西时要快得多,它有点复杂,但速度更快。

如果您需要任何代码示例,请回复,我会更新我的答案

这是我的代码:

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

Rectangles2 是一个矩形列表, rectangleupdated 有一个矩形作为参数,然后它像这样修改矩形:

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

这是我在碰撞检查和一切之后的结果(这是一场粉末游戏) 在此处输入图像描述

于 2014-05-26T09:11:57.593 回答