Книга: Описание языка PascalABC.NET
Массив всех графических объектов Objects
Массив всех графических объектов Objects
В модуле ABCObjects определен динамический массив Objects, который хранит все созданные графические объекты. Он принадлежит к типу ObjectsABCArray, определенному в ABCObjects. Для массива Objects определены всего 2 операции: Objects.Count возвращает количество графических объектов, а Objects[i] возвращает i-тый графический объект (типа ObjectABC, нумерация осуществляется с 0).
Использование массива Objects позволяет единообразно обращаться ко всем графическим объектам, вызывая для них любые методы и обращаясь к любым свойствам класса ObjectABC.
Пример 1. Броуновское движение объектов.
uses ABCObjects;
var i:integer;
begin
for i:=1 to 30 do
new CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);
while True do
for i:=0 to Objects.Count-1 do
Objects[i].MoveOn(Random(3)-1,Random(3)-1);
end.
В этом примере создается 30 объектов CircleABC. Поскольку все они сохраняются в массиве Objects, при их создании результат вызова конструктора не присваивается никакой переменной. После создания все объекты начинают перемещаться в бесконечном цикле на случайный вектор, совершая броуновское движение.
Пример 2. Изменение свойств объектов заданного типа.
uses ABCObjects;
var i:integer;
begin
for i:=1 to 30 do
case Random(2) of
0: new CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);
1: new RegularPolygonABC(Random(WindowWidth), Random(WindowHeight), 20, 3, clRandom);
end;
while True do
for i:=0 to Objects.Count-1 do
if Objects[i] is RegularPolygonABC then
RegularPolygonABC(Objects[i]).Angle := RegularPolygonABC(Objects[i]).Angle + 1;
end.
В этом примере создается 30 объектов CircleABC или RegularPolygonABC. Затем в бесконечном цикле вращаются только объекты RegularPolygonABC. Вращение достигается увеличением свойства Angle, которое определено только в классе RegularPolygonABC. Для установки принадлежности объекта к классу RegularPolygonABC используется операция is, после чего объект Objects[i] преобразуется к типу RegularPolygonABC при помощи операции приведения типа.
Пример 3. Удаление всех графических объектов, пересекшихся с объектом p:
for i:=Objects.Count-1 downto 0 do
if (Objects[i]<>p) and (p.Intersects(Objects[i]) then
Objects[i].Destroy;
В играх часто нужно удалить все графические объекты, которые настиг объект p. Для этого следует перебрать все графические объекты за исключением самого p и проверить их на предмет пересечения с p. Удаление осуществляется вызовом деструктора соответствующего объекта. Отметим также, что в результате удаления количество объектов уменьшается, поэтому следует перебирать объекты от конца к началу.
- Модуль ABCObjects: обзор
- Диаграмма классов
- Класс ObjectABC
- Класс BoundedObjectABC
- Класс RectangleABC
- Класс SquareABC
- Класс EllipseABC
- Класс CircleABC
- Класс RoundRectABC
- Класс RoundSquareABC
- Класс TextABC
- Класс RegularPolygonABC
- Класс StarABC
- Класс PictureABC
- Класс MultiPictureABC
- Класс BoardABC
- Класс ObjectBoardABC
- Мультирисунки
- Массив всех графических объектов Objects
- Переменные, процедуры и функции модуля ABCObjects
- Ускорение перерисовки графических объектов
- Совмещение графического вывода модулей ABCObjects и GraphABC
- Иерархия объектов в InterBase
- Динамические массивы
- Имена объектов длиной 68 символов
- Новые функции API для работы с Blob и массивами
- Создание объектов Collection
- 8.1.4. Сравнение массивов
- 8.1.22. Чередование массивов
- 9.1 Массивы RAID
- 9.2 Реализация массива ftAID на платформе Windows NT
- 8.2.8. Копирование хэша в массив
- 3.3. Определение объектов защиты
- 2.3.6. Задание объектов физической памяти