Ускорение перерисовки графических объектов
Для обеспечения быстрой перерисовки используется следующий прием: в начале
программы вызывается LockDrawingObjects
, а при необходимости перерисовать
весь экран – специальная процедура RedrawObjects
. Отключается режим вызовом UnLockDrawingObjects
.
При наличии большого количества объектов, каждый из которых движется, такой
прием может ощутимо ускорить анимацию. Причина здесь кроется в следующем: по
умолчанию при каждом движении объекта он перерисовывается в своем
прямоугольнике, при этом в этом прямоугольнике перерисовываются все объекты.
Если в графическом окне 100 объектов, и каждый из них переместился, то
происходит 100*100=10000 перерисовок объектов. После вызова LockDrawingObjects
перерисовки не происходит, а в результате вызова RedrawObjects
каждый объект прорисовывается только один раз, то есть происходит всего 100
перерисовок объектов.
Следует обратить внимание, что в модуле GraphABC
имеются родственные процедуры LockDrawing
,
UnLockDrawing
, и
Redraw
. Однако, они отвечают за
растровую перерисовку без мерцания, в то время как процедуры LockDrawingObjects
,
UnLockDrawingObjects
, и RedrawObjects
отвечают только за ускорение перерисовки векторной графики
ABCObjects
(отсутствие мерцания векторных объектов
при их изменении обеспечивается автоматически).