Блокирует рисование графических объектов. Возможна лишь перерисовка всего экрана вместе со всеми графическими объектами на нем вызовом RedrawObjects |
procedure UnLockDrawingObjects; Разблокирует рисование графических объектов |
procedure RedrawObjects; Перерисовывает все графическое окно вместе со всеми графическими объектами на нем |
procedure ToFront(g: ObjectABC); Переносит графический объект g на передний план |
procedure ToBack(g: ObjectABC); Переносит графический объект g на задний план |
function ObjectsCount: integer; Количество графических объектов |
function ObjectUnderPoint(x,y: integer): ObjectABC; Графический объект под точкой (x, y) |
function ObjectUnderPoint(p: Point): ObjectABC; Графический объект под точкой p |
procedure SwapPositions(o1,o2: ObjectABC); Поменять позиции графических объектов o1 и o2 |
function UIElementUnderPoint(x,y: integer): UIElementABC; Элемент управления ABCObject под точкой (x, y) |
var Objects: ObjectsABCArray; Массив графических объектов |
UIElementABC Класс элемента управления ABCObject |
Ускорение перерисовки графических объектов
Для обеспечения быстрой перерисовки используется следующий прием: в начале программы вызывается LockDrawingObjects, а при необходимости перерисовать весь экран – специальная процедура RedrawObjects. Отключается режим вызовом UnLockDrawingObjects.
При наличии большого количества объектов, каждый из которых движется, такой прием может ощутимо ускорить анимацию. Причина здесь кроется в следующем: по умолчанию при каждом движении объекта он перерисовывается в своем прямоугольнике, при этом в этом прямоугольнике перерисовываются все объекты. Если в графическом окне 100 объектов, и каждый из них переместился, то происходит 100*100=10000 перерисовок объектов. После вызова LockDrawingObjects перерисовки не происходит, а в результате вызова RedrawObjects каждый объект прорисовывается только один раз, то есть происходит всего 100 перерисовок объектов.
Следует обратить внимание, что в модуле GraphABC имеются родственные процедуры LockDrawing, UnLockDrawing, и Redraw. Однако, они отвечают за
Совмещение графического вывода модулей ABCObjects и GraphABC
Использование объектов ABCObjects можно совмещать с выводом в графическое окно с помощью процедур рисования модуля GraphABC. При этом, все объекты ABCObjects располагаются поверх изображения, нарисованного в графическом окне вызовом процедур рисования модуля GraphABC. Это можно использовать, например, для задания фоновой картинки, на которой затем можно размещать объекты ABCObjects:
FillWindow('aqua.jpg');
c := new CircleABC(100,100,50,clGreen);
RectangleABC(300,300,100,50,clBlue);
Следует иметь в виду, что прорисовка при изменении свойств объектов ABCObjects происходит корректно, но если рисовать вызовом процедур модуля GraphABC, то графические объекты ABCObjects будут затираться. Для восстановления картинки следует либо передвинуть объекты ABCObjects, либо вызвать процедуру RedrawObjects, перерисовывающую все графическое окно.
Модуль ABCSprites
Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами. Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC, однако, обладает двумя дополнительными возможностями:
1. Спрайты автоматически анимируются в цикле, что управляется специальным таймером. Можно регулировать скорость анимации каждого спрайта, а также останавливать/запускать все спрайты.