Я экспериментирую с 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;
}
Что еще мне нужно искать?Есть ли необходимость утилизировать компоненты изображения каким-либо образом?