В общем случае событие рисования происходит после события изменения размера.Поэтому, если вы изменяете размер с помощью мыши или даже программно, будет вызвана функция drawMaze()
.Я думаю, что вы не должны создавать лабиринт в drawMaze()
или, по крайней мере, делать ленивую инициализацию.Это потому, что лабиринт будет создаваться при каждом рисовании окна, что происходит каждый раз, когда вы изменяете размер окна, перемещаете окно, скрываете какую-то часть окна, меняете фокус и т. Д.D.
РЕДАКТИРОВАТЬ: событие рисования предполагает, что дисплей изменился, и что изменение, вероятно, повлияет на часть экрана, на котором вы рисуете.Так мало вещей:
- Во время рисования вы хотите сделать только одно: рисовать.Так что не называйте сборщик мусора.Вообще, вызывать Gc не очень хорошая идея, и более того, в Слушателе это просто сокрушит производительность.
- Событие не изменит состояние вашего Лабиринта.Таким образом, вы должны представлять свой лабиринт, используя состояние.Одна часть закреплена, как стены, другая сторона изменчива, как положение агента внутри лабиринта.Каждый раз, когда вы изменяете состояние, вы запрашиваете перерисовку.
- Если пропустить событие рисования, экран будет пустым.
Например, если ваш лабиринт слишком велик, чтобы поместиться на экране, вы используете событие рисования для рисования только одной части и т. Д.