Использование Модификаторов-управление объектом
Автор: Antalis
Такие новости:
Создал отдельный модуль для предка всех модификаторов ModificatorAncestor; Дописал процедуру AddObjectList - чтобы можно было бы записывать сразу целый массив ( В модуле GlobalTypeVar описал глобальный тип: TObjectIDList = array of Cardinal;
TModificator=class
private
protected
FObjectCount:Cardinal;
FIndexArray:array of Cardinal;
public
constructor Create;
destructor Destroy;
property Count:Cardinal read FObjectCount;
procedure SetCount(const Count:Cardinal);
procedure AddObject(Number:Cardinal); virtual;
procedure AddObjectList(ObjectIDList:TObjectIDList); virtual;
procedure RemoveObject(Number:Cardinal); virtual;
procedure UpdateObjects(ObjectArray:TObjectArray); virtual;
end;
Далее создал модуль Modificators - где расположились разные потомки модификатора-предка. Создал 3 модификатора:
TModifMoveFromProp - перемещает объекты в зависимости от величин записынных в начальных свойствах объектов, TModifGravity - заставляет объект смещаться вниз, TModifDriver2D - перемещает объекты взависимости от полученного значения (направо,налево,вверх,вниз).
В модуле main добавел экземпляр класса TModifDriver2D (то есть для его использования понадобилось, чтобы он был независимым объектом, также пришлось Менеджеру сцены добавить свойство property ObjectBANK:TObjectArray read FObjectBANK; - то есть сделать массив объектов доступным извне.
Добавил форме обработчик нажатия клавиш FormKeyDown.
В этой процедуре я использую клавиши стрелка влево (VK_LEFT), стрелка вправо (VK_RIGHT), стрелка вверх (VK_UP), стрелка вниз (VK_DOWN) - взависимости от этого передаю разные значения модификатору ModifDriver2D.
Для анимации в процедуре таймера добавил:
ModifDriver2D.UpdateObjects(APSceneMenager.ObjectBANK);
Теперь можно одним из объектов управлять!
------------------------------------------------------------------------
Данный пример убедил меня разбить класс TAPSceneMenager на 2 класса: первый - TGlobalObjectBANK - будет загрузчиком и хранителем списка всех объектов, второй класс - SceneRender - класс-отрисовщик сцены. Думаю, так будет лучше и понятнее - каждый класс будет заниматься своим собственным делом.
Исходники примера можно скачать:
http://www.gamedev.ru/download/?id=4231
14 сентября 2006
Комментарии [3]