Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование битовых образов




End.

Begin

Begin

Begin

Var

Implementation

Var

Private

Type

Uses

Interface

Листинг. Кораблик

unit ship_;

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls;

TForm1 = class(TForm)

Timer1: TTimer;

procedure Timer1Timer(Sender: TObject);

procedure FormActivate(Sender: TObject);

{ Private declarations } public

{ Public declarations } end;

Form1: TForm1;

x,y: integer; // координаты корабля (базовой точки)

{$R *.DFM}

// вычерчивает кораблик

procedure Titanik(x,y: integer; // координаты базовой точки

color: TColor); // цвет корабля

const dx = 5; dy = 5;

buf: TColor;

with form1.canvas do begin

buf:=pen.Color; // сохраним текущий цвет

pen.Color:=color;

// установим нужный цвет

// рисуем...

// корпус MoveTo(x,y);

LineTo(x,y-2*dy);

LineTo (x+10*dx, y-2*dy);

LineTo (x+ll*dx, y-3*dy);

LineTo (x+17*dx,y-3*dy);

LineTo (x+14*dx, y);

LineTo (x,y);

// надстройка

MoveTo(x+3*dx,y-2*dy);

LineTo (x+4*dx, y-3*dy);

LineTo (x+4*dx, y-4*dy);

LineTo (x+13*dx,y-4*dy);

LineTo (x+13*dx, y-3*dy);

MoveTo(x+5*dx,y-3*dy);

LineTo (x+9*dx, y-3*dy);

// капитанский мостик

Rectangle (x+8*dx, y-4*dy, x+ll*dx, y-5*dy)

// труба

Rectangle (x+7*dx, y-4*dy, x+8*dx, y-7*dy);

// иллюминаторы

Ellipse (x+ll*dx,y-2*dy,x+12*dx,y-l*dy);

Ellipse (x+13*dx, y-2*dy, x+14*dx, y-l*dy);

// мачта

MoveTo(.x+10*dx,y-5*dy); LineTo(x+10*dx,y-10*dy);

// оснастка

MoveTo(x+17*dx,y-3*dy);

LineTo(x+10*dx,y-10*dy);

LineTo(x,y-2*dy);

pen.Color:=buf; // восстановим старый цвет карандаша

end;

end;

// обработка сигнала таймера

procedure TForm1.Timer1Timer(Sender: TObject);

Titanik(x,y,form1.color); // стереть рисунок

if x < Form1.ClientWidth

then x:= x+5

else begin // новый рейс x:= 0;

у:= Random(50) + 100;

end;

Titanik(x,у,clWhite); // нарисовать в новой точке end;

procedure TForml.FormActivate(Sender: TObject);

x:=0; y:=100;

Form1.Color:=clNavy;

Timerl.Interval:= 50; // сигнал таймера каждые 50 миллисекунд

end;

Отрисовку и стирание изображения кораблика выполняет процедура Titanik, которая получает в качестве параметров координаты базовой точки и цвет, которым надо вычертить изображение кораблика. Если при вызове процедуры цвет отличается от цвета фона формы, то процедура рисует кораблик, а если совпадает — то "стирает". В процедуре Titanik объявлены константы dx и dy, определяющие шаг (в пикселах), используемый при вычислении координат точек изображения. Меняя значения этих констант, можно проводить масштабирование изображения.

В предыдущем примере изображение формировалось из графических примитивов. Теперь рассмотрим, как можно реализовать перемещение одного сложного изображения на фоне другого, например перемещение самолета на фоне городского пейзажа. Эффект перемещения картинки может быть создан путем периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. При этом предполагается, что перед выводом картинки в новой точке сначала удаляется предыдущее изображение. Удаление картинки может быть выполнено путем перерисовки всей фоновой картинки или только той ее части, которая перекрыта битовым образом движущегося объекта. В рассматриваемой программе используется второй подход. Картинка выводится применением метода Draw к свойству canvas компонента Image, a стирается путем копирования (метод copyRect) нужной части фона из буфера на поверхность компонента Image. Форма программы приведена на рис., а текст — в листинге 10. Компонент image используется для вывода фона, а компонент Timer — для организации задержки между циклами удаления и вывода на новом месте изображения самолета.




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 454; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.