Реклама:

Списки— это крайне удобная вещь. В них можно хранить любые объекты любых классов и оперативно получать к ним доступ, сортировать по какому-то критерию, перебирать...

За списки вообще в Delphi отвечает класс TList. Есть несколько классов для специфических списков, но нам они пока не интересны. Вот как можно объявить список Creatures.

Var

Creatures:TList;

Теперь с помощью команды Add можно добавить в список элементы. Например, у нас есть объект Troll класса TTroll. Тогда следующей строчкой мы добавим его в список.

Creatures.Add(Troll);

А вот так мы достанем его из списка, зная его индекс х. (Creatures[х] as TTroll)

Ключевое слово as — универсальный преобразователь типов. Однако пользуйтесь им только тогда, когда точно уверены, что преобразуемые типы совместимы, например, находятся в связи предок-потомок. Если вы попробуете привести один тип к другому, совершенно с ним не совместимому, ничего хорошего не выйдет.

Зная индекс элемента, можно удалить его из списка.

Creatures.Delete(х);

Ну а что делать, если у вас есть объект и вы хотите получить его индекс в списке? Воспользуйтесь этой командой:

х:^Creatures.IndexOf(Troll);

После выполнения этой строчки в х окажется индекс объекта Troll. Количество элементов в списке можно прочитать из его свойства Count. Как перебирать все объекты списка, вы уже знаете.

Напоследок — одно важное замечание. В списке не хранятся сами объекты, а только указатели на них. Все манипуляции с элементами (добавление, удаление, сортировка) никак не отражаются на самих объектах. То есть, списки — просто удобный инструмент для структурированного хранения информации.

Иерархия GLScene

Принципы, изложенные выше, активно использовали разработчики GLScene. Эта графическая библиотека имеет крайне продуманную и удобную иерархию классов. Причем дерево классов довольно развесисто. Самые длинные цепочки наследования содержат до десяти уровней! А базовых классов, над которыми строятся все остальные, не больше десятка (всего классов больше трехсот!). Давайте рассмотрим несколько наиболее интересных ветвей этого могучего дерева. Это поможет лучше понять принципы наследования. Кроме того, многие родительские классы тех классов, которыми мы часто пользуемся, интересны и сами по себе. С их помощью можно реализовать многие вещи, недоступные на самом верхнем уровне иерархии.

Самый главный класс GLScene — сам TGLScene. В нем содержатся все данные о сцене, ее описание (объекты, камеры, источники света и т.д.) и вспомогательная информация, необходимая для рейдера. Спустимся вниз по дереву иерархии до стандартного класса Delphi. Им будет TComponent, который воплощает основные свойства визуальных компонентов (т.е. классов, объектами которых программист может манипулировать иначе, чем через код). Поднимемся на уровень выше— TGLCadenceAbleCornponent. Этот класс добавляет возможность работы с TGLCadencer — его предназначение мы подробно разобрали в предыдущем разделе. Идем еще выше и встречаем TGLUpdateAbleComponent. Он добавляет возможность обновления данных для стандартных компонентов GLScene. Идем еще выше и встречаем сам TGLScene. Эта цепочка оказалась короткой.


⇐ Предыдущая страница| |Следующая страница ⇒