我正在试验 WPF 并重新实现我的旧迷宫屏幕保护程序。
我的代码基本上是在画布上添加一堆图像,并排构建一个网格,64x64 像素的图像,以覆盖整个画布。然后我通过调整平移变换和交换图像来“动画化”迷宫中的运动,这应该可以滚动迷宫。
但是,似乎我有某种泄漏。每当我调整窗口大小时,我都想重新构建图像组件以再次覆盖表单,或者使用更多或更少的图像。
如果我将表单的左下角拖得很紧,重建部分会变得越来越慢。
要删除旧控件,我只是这样做:
_Canvas.Children.Clear();
这够了吗?由于放缓,我认为不是。
然而,由于迷宫目前还没有被“化身”“发现”,所以迷宫图像以 25% 的不透明度绘制,我假设如果我未能删除它们,我会得到很多图像,但似乎也不是这样。
我正在缓存图像源,图像组件是这样创建的:
_Images = new Image[(int)width, (int)height];
for (int x = -1; x < width - 1; x++)
{
for (int y = -1; y < height - 1; y++)
{
Image i = new Image();
i.Width = 64;
i.Height = 64;
i.Source = _Outside;
Canvas.SetLeft(i, x * 64);
Canvas.SetTop(i, y * 64);
_Canvas.Children.Add(i);
_Images[x + 1, y + 1] = i;
}
}
之后,他们被分配图像以显示如下:
Maze.Square sq = _Maze[_TopLeftMazeX + x, _TopLeftMazeY + y];
Image img = _Images[x + 1, y + 1];
if (sq.Seen)
img.Opacity = 1.0;
else
img.Opacity = 0.25;
switch (sq.Type)
{
case Maze.SquareType.Hallway:
img.Source = _Hallway;
break;
case Maze.SquareType.Wall:
img.Source = _Wall;
break;
case Maze.SquareType.Outside:
img.Source = _Outside;
break;
}
我还应该寻找什么?是否需要以任何方式处理图像组件?