|
Встречаются два квакера. - Hу как
жизнь? - Да так, процентов на тридцать.
|
Итак, цель нашего первого урока - вывести текст и графику.
Сначала определимся, куда же пихать эти самые текст и графику.
Сначала поставьте на форму DXDraw, при этом в свойствах, в разделе
"Options" измените "doFullScreen" и "doFlip" на "True", чтобы при
запуске программа заполняла весь экран. Запустите и проверьте. Если
вы видите черный экран, все нормально. Выходить придется
Ctrl-Alt-Del'ом, так как процедуры выхода из программы мы еще не
написали. "Рабочий стол" готов.
Теперь нарисуйте какую-нибудь картинку, по размерам экрана. Я
возьму "Космос"( черный экран и белые точки, рисуется распылителем в
Paint'e), сохраняем, как "cosmos.bmp". Вроде этого:
Теперь нарисуем то, что должно будет двинаться по "космосу" в
следующих уроках, а пока это самое будет просто отображаться. Я
опять же нарисую в Paint'у летающую тарелку(жирный
овал,"tarelka.bmp"), вроде этого:
Копируем эти рисунки, в папку с Дельфи-проектом. Ставим на форму
DXSpriteEngine и DXImageList. Выбираем в их свойстве "DXDraw"
"DXDraw1", уже сконфигурированный нами в предыдущем абзаце. В
свойствах Имаг-листа(DXImageList) выбираем "Items". В раскрывшемся
окне создаем два объекта, назовем их "cosmos" и "tarelka", в
свойстве "Picture" укажем путь к "cosmos.bmp" и "tarelka.bmp"
соответственно.
Теперь самое сложное: поскольку ДельфИкс создавал какой-то, хоть
и очень умный, но один человек, а не корпорация, нам придется
ВРУЧНУЮ прописывать класс спрайтов(рисунков). Открываем редактор
кода, в части "Implementation", после "Var" пишем "type" и с новой
строчки:
TCosmos = class(TImageSprite)
public
constructor Create(AParent: TSprite); override;
end;
TTarelka = class(TImageSprite)
public
constructor Create(AParent: TSprite); override;
end;
|
Разбираемся: "Tcosmos" - имя будущего класса,
"Class(TImageSprite)" - указывает, что будущий класс относится к
ImageSprite'ам, "Public" - указывает, что следующий раздел
глобальный, "Constructor" - указывает, что следующая процедура
относится к подклассу конструкторов, "Create(AParent: TSprite);
Override;" - надо заучить как молитву, т.к. эта процедурка будет
создавать ВСЕ спрайты в ваших программах, "End;" обозначает, что
описание класса завершено.
Но процедуры мало Описать, их надо ещё и ПРОписать. В этом же
разделе, после описания всех классов, пишем:
constructor Tcosmos.Create(AParent: TSprite);
begin
inherited Create(AParent);
Image := Form1.ImageList1.Items.Find('cosmos');
X := x;
Y := x;
Z := z;
Width := Image.Width;
Height := Image.Height;
PixelCheck := True;
end;
|
Учить точно так же, как и описание этого самого конструктора.
Изменятся будут только подчеркнутые элементы.
"Form1.ImageList1.Items.Find('cosmos')" - путь к спрайту "cosmos",
меняться будут толко имена спрайтов. "x" - координата по
горизонтали, у всех фоновых рисунков равна единице. "y" - координата
по вертикали, у всех фоновых рисунков также равна единице. "z" -
глубина рисунка, при наслоении двух спрайтов отображается тот, у
которого "z" больше, у всех фоновых рисунков равна минус единице.
Также пишем и тарелку:
constructor Ttarelka.Create(AParent: TSprite);
begin
inherited Create(AParent);
Image := Form1.ImageList1.Items.Find('tarelka');
X := 50;
Y := 50;
Z := 1;
Width := Image.Width;
Height := Image.Height;
PixelCheck := True;
end;
|
Как видите, изменилась только подчеркнутая часть. Итак, описания
закончены.
Теперь перейдем непосредственно к выводу на экран. Создаем
DXTimer, в событие onTimer пишем:
if not DXDraw.CanDraw then
exit;
DXDraw.Surface.Fill(0);
SpriteEngine.Move(1000 div 10);
SpriteEngine.Dead;
SpriteEngine.Draw;
with DXDraw.Surface.Canvas do
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 8;
Textout(20, 3, 'Так выводится текст под ДельфИкс);
Release;
End;
DXDraw.Flip;
|
Разбираем: а разбирать тут и нечего, учить надо, это процедура
инициализации DirectX! Второй абзац - процедура вывода текста,
последняя строка отрисовывает все объекты. Теперь смотрив события
формы и создаем обработчик события onCreate. Пишем:
Ttarelka.create(SpriteEngine.Engine);
Tcosmos.create(SpriteEngine.Engine);
|
Запускаем, и видим тарелку на звездном фоне!
Если не видим, то тут три возможности:
- обратиться к офтальмологу
- включить монитор
- проверить формат рисунков: ДельфИкс поддерживает только .bmp и
.dib, если у вас рисунок другого формата, нужно пойти на хитрость:
в Picture Editor'e надо сначала нажать "copy", а потом "paste",
тогда оба рисунка сконвертируются в формат .bmp
Готовую программу можно скачать здесь или на сайте автора http://instrumentari.narod.ru/ и свериться, если
что-то не работает |