Перемещение коробки с таймером - PullRequest
0 голосов
/ 04 декабря 2009

Я пытаюсь переместить поле рисунка в элементе управления, меняя его свойства Top и Left каждые 20 мс. На черном фоне это немного более плавно, но при назначении BackgroundImage для элемента управления картинка остается позади, пока элемент управления не будет перерисован несколькими секундами позже, резко замедляется, затем запускается вперед или движется по неровной траектории.

Я думаю, что когда перерисовывается элемент управления PictureBox, поток, который изменяет свои свойства left и top, останавливается до тех пор, пока перерисовка не будет завершена, и это заставит его ставить в очередь любые итерации цикла таймера, которые были задержаны, когда перерисовка завершена .

Есть ли способ сгладить движение картинки?

Спасибо F

Ответы [ 2 ]

3 голосов
/ 04 декабря 2009

Я бы предложил нарисовать изображение в одном элементе управления, а не перемещать элементы управления.

Создайте пользовательский элемент управления, переопределите OnPaint и нарисуйте в нем свой «графический ящик». Если вы сделаете это, вы также можете вернуться в буфер. Сделайте это, вызвав Graphics.FromImage () для создания графического объекта из изображения. Подрисуйте его и, наконец, вызовите g.DrawImage для реального графического объекта (в eventArgs), как только вы закончите рисовать.

2 голосов
/ 04 декабря 2009

Я не знаю точно, как решить проблему (кроме перехода на WPF), но я могу сказать, что лаги, которые вы получаете, связаны с недействительностью областей, которые обновляются при перемещении PictureBox. То, что вы хотите сделать, это как-то сделать резервную копию новой позиции и переключиться на буфер, а не полагаться на GDI, чтобы выполнить перерисовку в реальном времени. НТН.

...