Графика и Игры \ DirectX и DelphiX \ Как рисовать?
Автор: @lex
WEB-сайт: http://shimigon.narod.ru
Я думаю, что если вы решили создать собственную игру, то уже должны понимать основные моменты создания математического блока, осталось научиться выводить графику.
Здесь я опишу самые элементарные вещи по отображению графики посредством DelphiX, без использования DxSpriteEngine и прочих примочек.
Итак! На форме из средств DelphiX нам понадобятся только:
DXDraw - экран для рисования
DXImageList - емкость для картинок
DXTimer - короче таймер
Обзовите все эти вещи как-нибудь покороче а затем слинкуйте DXImageList с DXDraw,
выбрав в первом свойстве у DXImagelist имя вашего DXDraw.
Подробную информацию о настройках излагать не буду, так как эта статья написана для
Delphi World
, а там уже есть не одно подробное описание DelphiX.
В DXImageList можно добавлять изображения или же загружать из файлов в процессе работы программы.
Создать новое изображение в DXImageList можно так: DXImageList1.Items.Add - функция возвращает номер изображения.
Ему можно задать имя: DXImageList1.Items.Items[x].Name:='smth'; где х-номер изображения, а потом обращаться к нему "по имени": DXImageList1.Items.Find('smth')... Или же по номеру: DXImageList1.Items.Items[x]...
Самая простая функция для отображения это: DXImageList1.Items.Items[x].Draw(DXDraw.surface,X,Y,PatternIndex)
Она позволяет только лишь отображать немасштабированные изображения на поверхности DXDraw Гораздо более продвинутая функция это DXImageList1.Items.Items[x].DrawRotate(DXDraw.surface,X,Y,Width,Height,PatternIndex,CenterX,CenterY,Angle)
Пару слов о ее параметрах:
DXDraw.surface - ссылка на поверхность DXDraw
X,Y - Координаты для отображения (Integer)
Width,Height - Размеры изображения (для масштабирования, Integer)
PatternIndex - С этим честно говоря не разбирался, задание палитры, насколько я понимаю, ставьте 0 - не ошибетесь!
CenterX,CenterY - Ось вращения, 0.5,0.5 - центр изображения (Double)
Angle - угол поворота, но не совсем обычный. ПИ радиан равны 128 градусов по этой мере, а при увеличении значения, вращение идет по часовой стрелке.
Тепеть пару слов по синтаксису.
Где нибудь в начале (например OnFormCreate) пропишите инициализацию DXDraw: DXDraw1.Initialize;
Функцию отображения вызывается по таймеру DXTimer, интервал которого ставиться минимальным, тобиш 0.
Только не попадите в ловушку, если два раза кликнуть по нему, то откроется процедура OnActivate а не OnTimer :)
В функции отображения можно очистить старый кадр командой: DXDraw1.Surface.Fill(0); - заполняет экран черным цветом
Команда DXDraw1.flip; прописывается в конце функции и выводит отрисованый кадр на экран.
На этом теория заканчивается, и начинается практика. Посмотрите мой пример. Он неплохо закомментирован и поможет понять некоторые моменты работы с графикой. Сделаю одно замечание: при включении ручного управления, CheckBox должен оставаться выделенным, потому что обработка нажатий клавиш идет через него.
|