每次“DrawObject()”在文件中时如何绘制新的正方形

时间:2016-01-04 07:12:11

标签: c#

所以我已经制作了一个文件阅读器并且它读取了文件中的每一行,我有一些它会读取的命令并且它可以工作但是这个不会工作 当文件说“DrawObject()”时 它应该这样做:

            if (line.Contains("DrawObject()"))
            {
                r = new Rectangle();
                r.Width = 32;
                r.Height = 32;
                Invalidate();
            }

它确实绘制了矩形,因为在绘制的事件中我放了:

    private void TestScript_Paint(object sender, PaintEventArgs e)
    {
        g = e.Graphics;
        g.Clear(Color.White);

        if (dp == true)
        {
            g.FillRectangle(Brushes.Blue, x, y, 32, 32);
        }

        g.FillRectangle(Brushes.Blue, r);

        DoubleBuffered = true;
    }

并绘制正方形(g.FillRectangle(Brushes.Blue,r)) 但我希望能够绘制多个方块 每次绘制一个正方形时,玩家可以改变正方形的X和Y值

这些是玩家可以在文件中更改的X和Y值:

            if (line.Contains("ObjectX>"))
            {
                r.X = Convert.ToInt32(line.Substring(9));
            }

            if (line.Contains("ObjectY>"))
            {
                r.Y = Convert.ToInt32(line.Substring(9));
            }

编辑代码:

if (line.Contains("DrawObject()"))
{
    rectangles.Add(new Rectangle() { Width = 32, Height = 32 } );
    Invalidate();
}

if (line.Contains("ObjectX>"))
{
    Rectangle r = rectangles.Last();
    r.X = Convert.ToInt32(line.Substring(9));
    Invalidate();
}

if (line.Contains("ObjectY>"))
{
    Rectangle r = rectangles.Last();
    r.Y = Convert.ToInt32(line.Substring(9));
    Invalidate();
}

1 个答案:

答案 0 :(得分:2)

如果你想绘制多个矩形,你需要“存储”它们,而不仅仅是最后一个 - 例如像这样:

// instead of "private Rectangle r" I assume you have
private List<Rectangle> rectangles = new List<Rectangle>();

然后在解析期间:

if (line.Contains("DrawObject()"))
{
    rectangles.Add(new Rectangle() { Width = 32, Height = 32 });
    Invalidate();
}

......和绘画:

private void TestScript_Paint(object sender, PaintEventArgs e)
{
    g = e.Graphics;
    g.Clear(Color.White);

    if (dp == true)
    {
        g.FillRectangle(Brushes.Blue, x, y, 32, 32);
    }

    foreach (Rectangle r in rectangles)
        g.FillRectangle(Brushes.Blue, r);

    DoubleBuffered = true;
}

...并移动最后一个:

if (line.Contains("ObjectX>"))
{
    Rectangle r = rectangles.Last();
    r.X = Convert.ToInt32(line.Substring(9));
}
if (line.Contains("ObjectY>"))
{
    Rectangle r = rectangles.Last();
    r.Y = Convert.ToInt32(line.Substring(9));
}

注意:如果已经设置了矩形以避免错误,您应该在此处查看。