grupa AntalisaСтатьи

Использование Модификаторов-управление объектом

Автор:

Такие новости:
Создал отдельный модуль для предка всех модификаторов 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]