Первая анимация

Xakep, номер #044, стр. 044-060-3


srcrect.Left:=0;

srcrect.Top:=State*90;

srcrect.Right:=180;

srcrect.Bottom:=State*90+90;

FBackgroundSurface.BltFast (X, Y, FTransImageSurface, @srcrect,

DDBLTFAST_WAIT or DDBLTFAST_SRCCOLORKEY);

Вначале я заполняю структуру srcrect, которая будет указывать область, которую мы хотим скопировать. Так как у нас спрайты самолета выстроены в столбик, то левая и правая позиции неизменяемы - левая равна нулю, а правая равна 180.

Верх и низ области нужно рассчитывать, чтобы правильно вывести нужный спрайт в зависимости от состояния самолета. Высота каждого спрайта равна 90, значит верхняя позиция области копирования будет равна State*90, а нижняя еще на 90 пикселей больше.

Все готово к отображению самолета, и можно вызывать функцию BltFast. В качестве первых двух параметров нужно только указать текущую позицию самолета - Х и Y.

Disconnect

Как видишь, компьютерная анимация не так уж и сложна. Это только на первый взгляд требуются глубокие знания математики. Для реализации анимации на основе спрайтов мы обошлись только простыми операциями сложения, вычитания и умножения (даже деления, кажется, не было). Лично я пока не встречал в компьютерной графике ничего такого, что не укладывалось бы в школьный курс алгебры и геометрии. Конечно же, бывают сложные проекты, но большинство обходится школьным курсом.

Как всегда, исходники примера будут доступны на моем сайте www.cydsoft.com/vr-online после выхода этого номера в свет, а те, у кого нет Инета, могут найти их на нашем диске. Удачи!!!

P.S.У меня к тебе просьба, на сто баксов :). Не пиши мне большие письма. После появления рубрики «Кодинг» меня каждый день валят вопросами. Я не в состоянии всем рассказывать то, о чем пишут книги. Я могу что-то подсказать, где-то помочь, но не больше. А просьбы типа помоги написать прогу вообще нереальны. Я отвечаю только на те вопросы, где ответ займет несколько строчек. Целые лекции по мылу я разводить не могу. Я бы с удовольствием помог всем, но это НЕВОЗМОЖНО. Вас слишком много, а я один :(((. Поэтому лучше разбей свой вопрос на несколько маленьких и спрашивай постепенно, а не все сразу.

Назад на стр. 044-060-2  Содержание