ЖУРНАЛ ХАКЕР

Графика в Linux/Kylix

Xakep, номер #035, стр. 035-071-2


У холста есть очень хороший метод - Draw, который может рисовать картинки. Ему надо только передать три параметра: X и Y позицию картинки и саму картинку. Вот это я и делаю.

СОЗДАЕМ АНИМАЦИЮ

Брось куда-нибудь на форму компонент TTimer с закладки Additional. Выдели его и в объектном инспекторе установи в параметре Interval значение 50. Мы уже пользовались таймером, и ты должен знать, что каждые Х миллисекунд таймер будет генерировать событие, которое мы можем выловить. "Х" в данном случае не журнал, а количество миллисекунд, указанное в свойстве Interval.

Теперь перейди на закладку Events и создай обработчик события OnTimer. Там напиши все, что написано в листинге 3. Итак, каждые 50 миллисекунд будет вызываться эта процедура. В ней мы будем изменять X и Y позиции нашей картинки, чтобы она перемещалась по экрану. Давай посмотрим, как я это делаю.

В первой строке X:=X+XR я переменной X присваиваю ее текущее значение плюс XR. То есть увеличиваю позицию картинки на значение скорости. То же самое я делаю и с Y.

Дальше идет проверка, не пересекла ли картинка край окна. Если X<0, то я присваиваю скорости (XR) значение 5. Если Х больше значения ширины экрана (Width) минус ширина картинки (fbitmap.Width), то есть картинка пересекла ширину окна, то значению скорости (XR) я присваиваю -5. Это заставит двигаться картинку в обратную сторону. Почему? Да потому что когда будет выполняться строка X:=X+XR, где XR=-5, значение Х будет уменьшаться. Если ты и сейчас не понял, то бегом в первый класс средней школы, ты пропустил очень много интересного в своей жизни :).

Те же операции происходят и с Y координатой картинки. Так что здесь я останавливаться не буду.

Самая последняя функция - FormPaint(nil) - заставляет экран перерисоваться.

УСТАЛЛА АЛЛА

Все, пример готов. Можешь нажать F9, чтобы запустить прогу. На рисунке 4 ты можешь увидеть результат его работы. Как видишь, после картинки остается след ее движения. Я специально его оставил, чтобы ты мог увидеть результат в полном объеме. Если ты хочешь от него избавиться, то в обработчике события OnPaint первыми строчками (перед рисованием картинки) напиши:

Canvas.Brush.Color:=clWhite;

Canvas.FillRect(ClientRect);

Это заставит прогу сначала закрасить все окно белым цветом, а потом на чистый экран вывести картинку.

Все!!! На сегодня новостей больше нет. Исходник ты, как всегда, сможешь забрать с моего сайта www.cydsoft.com/vr-online/. Удачи тебе!!!

Листинг 1

procedure TForm1.FormCreate(Sender: TObject);

begin

fbitmap:=TBitmap.Create;

fbitmap.LoadFromFile('Bart.bmp');

X:=0;

Y:=0;

XR:=5;

YR:=5;

end;

Листинг 2

procedure TForm1.FormPaint(Sender: TObject);

begin

Canvas.Draw(X,Y,fbitmap);

end;

Листинг 3

procedure TForm1.Timer1Timer(Sender: TObject);

begin

X:=X+XR;

Y:=Y+YR;

if X<0 then XR:=5;

if X>Width-fbitmap.Width then XR:=-5;

if Y<0 then YR:=5;

if Y>Height-fbitmap.Height then YR:=-5;

Назад на стр. 035-071-1  Содержание  Вперед на стр. 035-071-3