C++ Builder - вопросы программирования

       

с размером фонового рисунка GlientWidth



Листинг 3.7.

Полет над городом
void _fastcall TForml::FormCreate(TObject *Sender) { // загрузить фоновый рисунок из bmp-файла back = new Graphics::TBitmap();
back->
LoadFromFile("factory.bmp");
// установить размер клиентской (рабочей) области формы // в соответствии с размером фонового рисунка GlientWidth = back->
Width; ClientHeight = back->
Height; // загрузить картинку sprite = new Graphics::TBitmap();
sprite->
LoadFromFile("aplane.bmp");
sprite->
Transparent = true; // исходное положение самолета x=-20; // чтобы самолет "вылетал" из-за левой границы окна У=20; } void _fastcall TForml::FormPaint(TObject *Sender) { Canvas->
Draw(0,0,back);
//фон Canvas->
Draw(x,у,sprite);
// рисунок } void__fastoall TForml::TimerlTimer(TObject *Sender) { TRect badRect; // положение и размер области фона, // которую надо восстановить badRect = Rect(x,y,x+sprite->
Width,y+sprite->
Height);
// стереть самолет (восстановить "испорченный" фон) Canvas->
CopyRect(badRect,back->
Canvas,badRect);
// вычислим новые координаты спрайта (картинки) х +=2; if (х >
ClientWidth) { // самолет улетел за правую границу формы // изменим высоту и скорость полета х = -20; у = random(ClientHeight —30);
// высота полета" // скорость полета определяется периодом возникновения // события On Timer, который, в свою очередь, зависит // от значения свойства Interval Timerl->
Interval = random(20) + 10; // скорость "полета" меняется // от 10 до 29 } Canvas->
Draw(х,у,sprite);
}
Для хранения битовых образов (картинок) фона и самолета используются два объекта типа TBitmap, которые создает функция TFormi:: Formcreate (объявления этих объектов надо поместить в заголовочный файл проекта). Эта же функция загружает из файлов картинки фона (factory.bmp) и самолета (aplane.bmp).

Восстановление фона выполняется при помощи метода copyRect, который позволяет выполнить копирование прямоугольного фрагмента одного битового образа в другой. Объект, к которому применяется метод copyRect, является приемником копии битового образа. В качестве параметров методу передаются: координаты и размер области, куда должно быть выполнено копирование; поверхность, с которой должно быть выполнено копирование; положение и размер копируемой области. Информация о положении и размере восстанавливаемой (копируемой на поверхность формы) области фона находится в структуре badRect типа TRect.

Следует обратить внимание на то, что начальное значение переменной х, которая определяет положение левой верхней точки битового образа (движущейся картинки) — отрицательное число, равное ширине битового образа картинки. Поэтому в начале работы программы самолет не виден и картинка отрисовывается за границей видимой области. С каждым событием OnTimer значение координаты х увеличивается и на экране появляется та часть битового образа, координаты которой больше нуля. Таким образом, у наблюдателя создается впечатление, что самолет вылетает из-за левой границы окна.
 


Содержание раздела