Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 00:54 Василий
 
 
Во Флориде и в Королевстве сейчас  01:03[Войти] | [Зарегистрироваться]

Как рисовать спрайты в DXDraw DelphiX

Динар Шакиров
дата публикации 12-08-2004 11:47

Как рисовать спрайты в DXDraw DelphiXПодготовка к использованию:

  1. Для начала допустим, что у нас есть исходная форма Form1 типа TForm
  2. Внести в форму следующие компоненты из вкладки DelphiX
    • DXSpriteEngine1 - спрайтовый движок DelphiX
    • DXDraw1 - графический движок DelphiX
    • DXImageList1 - будущая коллекция наших спрайтов
    • DXTimer1 - таймер связанный с DXSpriteEngine1
    • DXInput1 - слежение за мышью/джойстиком/клавиатурой
  3. Изменить тип исходной формы на TDXForm вместо TForm
  4. Внести в DXImageList1 необходимые нам рисунки спрайтов - для этого нужно дважды кликнуть на компоненте и в открывшемся меню выбрать нужные спрайты.
  5. Выставить в компоненте DXImageList1 в поле TDXDraw значение нашего графического движка - DXDraw1, чтобы связать их.
  6. В методе OnCreate нашей формы создаём палитру из цветов выбранных из наших спрайтов и заполняем соответствующие поля графического движка DXDraw1 :
          DXImageList1.Items.MakeColorTable;
          DXDraw1.ColorTable := DXImageList1.Items.ColorTable;
          DXDraw1.DefColorTable := DXImageList1.Items.ColorTable;
          DXDraw1.UpdatePalette;
  7. Настраиваем разрешение и др. параметры графического движка DXDraw1 в том же методе OnCreate нашей формы:
    //если нам необходим полноэктанный режим
          DXDraw1.Options := DXDraw1.Options + [doFullScreen];
          DXDraw1.Width := 1024;
          DXDraw1.Height := 768;
          DXDraw1.Display.Width := 1024;
          DXDraw1.Display.Height := 768;
          DXDraw1.Display1.BitCount := 32; // глубина цвета
          DXForm1.BorderStyle := bsNone;  //  если нужно убрать рамку формы
          DXDraw1.Left := 0;
          DXDraw1.Top := 0;
          DXDraw1.Cursor := crNone;  //  если нужно убрать курсор;
    	  //   всё - графический движок запущен и готов к использованию.
          DXDraw1.Initiate;
    
  8. Заполняем метод OnTimer компонента DXTimer1 (не забыть выставить поле Interval этого компонента):
    // регулярное обновление событий клавиатуры/мыши
          DXInput1.Update;
    	  //смещаем все спрайты в целом на 5 шагов
          //(правила смещения отдельного спрайта описываются позже в самом спрайте).
          DXSpriteEngine1.DoMove (5);
    	  //замораживаем спрайтовый движок;
          DXSpriteEngine1.Dead;
    	  //очистка экрана (очень быстрая)
          DXDraw1.Surface.Fill(0);
    	  //прорисовываем все спрайты (пока только в памяти)
          DXSpriteEngine1.Draw;
    	  //отображаем всё что получилось на экран
          DXDraw1.Flip;
    

После всего этого графический движок уже может нормально функционировать - остаётся только создать и зарегистрировать наши спрайты и их поведение в спрайтовом движке.

Создание фона и спрайтов:

Существует несколько типов спрайтов, которые можно легко использовать в приложении. Необходимо уяснить для себя какими свойствами обладает тот или иной спрайт (как он движется) и ограничить себя необходимым типом:

  1. TSprite - простой неанимированный спрайт - может совершать лишь поступательные движения и неспособен менять свой рисунок.
  2. TImageSrite - простой анимированный спрайт - может совершать поступательные движения и пробегать при этом анимационный ряд (последний интуитивно устанавливается в компоненте DXImageList1).
  3. TImageSpriteEx - самый сложный из доступных - может совершать не только поступательные движения но и вращаться (разумеется в плоскости монитора) да ещё при этом пробегать анимационный ряд.
  4. TBackgroudSprite - фон - неанимирован фиксирован относительно спрайтового движка (хотя можно перемещаться относительно него - при этом он периодически повторяется в бесконечном пространстве)

Для создания спрайта необходимо описать его тип - его начальные данные и поведение.

type
      TMySprite = class (TImageSpriteEx);
        constructor Create (AParent : TSprite) ; override;
        procedure DoMove (movecount : Integer) ; override;
      end;
Начальные данные задаются в конструкторе:
constructor TMySprite.Create(AParent : TSprite) ;
        begin
		  //регистрация в спрайтовом движке
          inherited Create (AParent);
		
		  //задаём картинку или анимационный ряд нашего спрайта - берём их из
          //коллекции рисунков DXImageList1
          Image := DXForm1.DXImageList1.Items.Find ('мой спрайт.bmp');
          Width := Image.Width;
		  //указываем размеры спрайта как у его рисунка.
          Height := Image.Height;
		  //координата X нашего спрайта;
          X :=
		  //координата Y нашего спрайта;
          Y :=
		  //глубина на которой спрайт находится - если Z спрайта больше,
		  //чем у других - он всех будет крыть.
          Z :=

          //Только для анимированных спрайтов:
		  //указывает сколько рисунков в анимационном ряду.
          AnimCount := Image.PatternCount;
          AnimLooped := //true - если ряд зациклен, false - если нет
          AnimPos := //начальный рисунок в анимационном ряду.

          //Только для вращающихся спрайтов
          //Angle - угол поворота спрайта - 0 вверх, 64 вправо, 128 вниз,
          //192 - влево, 256 - вверх и так далее.

          //Только для фона:
		  //если неоходимо периодически заполнить всё
          //пространство одним рисунком, false - если нет такой необходимости.
          Tile := true
        end;

Конечно же не обязательно описывать всё это в конструкторе - это можно сделать и в runtime после создания спрайта. Сам объект спрайт в runtime создаётся (и регистрируется) обычно, как и все другие объекты - нужно лишь указать наш спрайтовый движок:

MySprite := TMySprite.Create (DXSpriteEngine1.Engine);

И теперь, в общих словах, о поведении спрайтов. Все те свойства, которые были описаны в конструкторе разумеется можно менять. Поведение каждого спрайта должно быть описано в его методе DoMove, который впоследствии автоматически вызывается - когда мы вызываем метод нашего движка DXSpriteEngine1.Move(5) - вызываются автоматически все методы DoMove для всех зарегистрированных спрайтов (причём в данном случае ровно 5 раз). Описание поведения для отдельного спрайта будет выглядеть так:

procedure TMySprite.DoMove (movecount : Integer);
begin
  inherited DoMove (movecount);
  //а здесь задаём поведение(меняем координаты- X,Y,Z, угол
  //поворота - Angle , рисунок в анимационном ряду - AnimPos и т.п.)
end;

И напоследок замечу, что можно менять и положение экрана относительно фона - для этого существуют поля DXSpriteEngine1.Engine.X и DXSpriteEngine1.Engine.Y соответственно.

Если нужна более полная информация или дополнительная - о механизме столкновения и обработке событий клавиатуры через DXInput1 - по всему этому обращайтесь тут же.




Смотрите также материалы по темам:
[DirectX, DirectShow etc.] [Анимация]

 Обсуждение материала [ 16-04-2010 16:00 ] 1 сообщение
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования