Как рисовать спрайты в DXDraw DelphiX - Delphi, Pascal, ObjectPascal - Программирование
Навигация по сайту
Сайт:

Дополнительно:

Файловый архив:

Каталог статей:

Форум:


Категории раздела
Delphi, Pascal, ObjectPascal [18]
Программирование на Delphi, Pascal, ObjectPascal
C, C++, C# [7]
Программирование на C, C++, C#
ПХП (PHP) [6]
Все что связано с программированием на PHP.
DirectX [0]
Программирование с использованием графического API DirectX
OpenGL [0]
Программирование с использованием графического API OpenGL
Работа с базами данных (БД) [0]
Работа с базами данных MySQL и т.д. Разработка, теории, алгоритмы.
Сетевое программирование [0]
Сетевое программирование, организация сетей.
Программирование игр [0]
Все что связано с программированием игр, организацией их разработки.
Работа с мультимедиа данными [0]
Загрузка, обработка, воспроизведение и все что связано со звуком и видео.
Работа с устройсвами ввода и вывода [0]
Программирование устройств ввода и вывода. Работа с геймпадом, рулем и многим другим.
Программирование HTML 5 игр [0]
Программирование HTML 5 игр, html верстка, JS (JavaScript)
Остальное [0]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Какой ОС Вы пользуетесь?
Всего ответов: 1209

Партнеры сайта
....

 Главная » Статьи » Программирование » Delphi, Pascal, ObjectPascal » Как рисовать спрайты в DXDraw DelphiX

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

00:28
Подготовка к использованию:

Для начала допустим, что у нас есть исходная форма Form1 типа TForm
Внести в форму следующие компоненты из вкладки DelphiX
DXSpriteEngine1 - спрайтовый движок DelphiX
DXDraw1 - графический движок DelphiX
DXImageList1 - будущая коллекция наших спрайтов
DXTimer1 - таймер связанный с DXSpriteEngine1
DXInput1 - слежение за мышью/джойстиком/клавиатурой
Изменить тип исходной формы на TDXForm вместо TForm
Внести в DXImageList1 необходимые нам рисунки спрайтов - для этого нужно дважды кликнуть на компоненте и в открывшемся меню выбрать нужные спрайты.
Выставить в компоненте DXImageList1 в поле TDXDraw значение нашего графического движка - DXDraw1, чтобы связать их.
В методе OnCreate нашей формы создаём палитру из цветов выбранных из наших спрайтов и заполняем соответствующие поля графического движка DXDraw1 :
DXImageList1.Items.MakeColorTable;
DXDraw1.ColorTable := DXImageList1.Items.ColorTable;
DXDraw1.DefColorTable := DXImageList1.Items.ColorTable;
DXDraw1.UpdatePalette;

Настраиваем разрешение и др. параметры графического движка 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;

Заполняем метод OnTimer компонента DXTimer1 (не забыть выставить поле Interval этого компонента):
// регулярное обновление событий клавиатуры/мыши
DXInput1.Update;
//смещаем все спрайты в целом на 5 шагов
//(правила смещения отдельного спрайта описываются позже в самом спрайте).
DXSpriteEngine1.DoMove (5);
//замораживаем спрайтовый движок;
DXSpriteEngine1.Dead;
//очистка экрана (очень быстрая)
DXDraw1.Surface.Fill(0);
//прорисовываем все спрайты (пока только в памяти)
DXSpriteEngine1.Draw;
//отображаем всё что получилось на экран
DXDraw1.Flip;

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

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

TSprite - простой неанимированный спрайт - может совершать лишь поступательные движения и неспособен менять свой рисунок.
TImageSrite - простой анимированный спрайт - может совершать поступательные движения и пробегать при этом анимационный ряд (последний интуитивно устанавливается в компоненте DXImageList1).
TImageSpriteEx - самый сложный из доступных - может совершать не только поступательные движения но и вращаться (разумеется в плоскости монитора) да ещё при этом пробегать анимационный ряд.
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 - по всему этому обращайтесь тут же.


Категория: Delphi, Pascal, ObjectPascal | Просмотров: 5778 | Добавил: ДядяВолк (11.08.2010) | Рейтинг: 0.0/0
Теги: DXDraw, Спрайты, как, DelphiX, рисовать
Источник: http://quadrathell.cn.ua/ |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Создание РПГ (0)
Функции D3D в Game Maker (2)
Наглядный пример использования переменных (0)
Создание многопользовательской(online) игры на Game Maker. (часть 3) (0)
Поиск файлов на винчестере в Delphi (0)
Frame by frame в 3d RAD (2)
Циклы (0)
Наложение Текстуры На Модель в 3DGS (MED) (0)
Borland Assembler (BASM) уроки для начинающих (урок 7 часть 1) (0)
startDrag или как заставить объект двигаться за мышью? (0)
Обмен информацией по TCP/IP-протоколу (Delphi) (0)
Создание многопользовательской(online) игры на Game Maker. (часть 4) (1)
О игрострое, движках и людях (1)
PHP и MySQL – Теоретический курс. Введение. (2)
Пишем модуль для работы с системным таймером (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Поиск по всему сайту:
Поиск по разделу:

Панель пользователя
Здравствуйте, Гость


Ник:
Пароль:
Запомнить :

Ваш IP: 3.142.135.24

Случайные конструкторы

Случайные движки

Случайные статьи

Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

На сайте были:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр