所以我已经制作了一个文件阅读器并且它读取了文件中的每一行,我有一些它会读取的命令并且它可以工作但是这个不会工作 当文件说“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();
}
答案 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));
}
注意:如果已经设置了矩形以避免错误,您应该在此处查看。