Использование битовых образов
В последнем примере изображение формировалось из графических примитивов. Теперь рассмотрим, как можно реализовать перемещение заранее подготовленного при помощи графического редактора изображения.
Как и в предшествующей программе, эффект перемещения объекта (картинки) достигается за счет периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. Перед выводом картинки в новой точке предыдущее изображение должно быть удалено, а фоновый рисунок, который был перекрыт — восстановлен. Удалить (стереть) картинку и одновременно восстановить фон можно путем перерисовки всей фоновой картинки или только той ее части, которая была перекрыта объектом. В рассматриваемой программе используется второй подход. Изображение объекта выводится применением метода Draw к свойству canvas формы, а стирается путем копирования (метод CopyRect) нужной части фона из буфера в битовый образ, соответствующий поверхности формы. Форма программы приведена на рис. 23.9, а текст — в листинге 3.6. Компонент Timer используется для организации цикла удаления и вывода изображения самолета.
Рис. 23.9. Форма программы "Полет над городом"
Листинг 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 значение координаты х увеличивается и на экране появляется та часть битового образа, координаты которой больше нуля. Таким образом, у наблюдателя создается впечатление, что самолет вылетает из-за левой границы окна.
- Московский государственный университет
- Компоненты
- Событие и функция обработки события
- Редактор кода
- Система подсказок
- Навигатор классов
- Шаблоны кода
- Справочная система
- Сохранение проекта
- Компиляция
- Предупреждения и подсказки
- Компоновка
- Запуск программы
- Ошибки времени выполнения
- Внесение изменений
- Настройка приложения
- Название программы
- Значок приложения
- Перенос приложения на другой компьютер
- Структура простого проекта
- 2. Задание на выполнение работы
- 1. Электроэнергия.
- 2. Игра «угадай число».
- 3. Гороскоп
- 4. Межгород
- 6. Алфавит
- 7. Палиндром
- 8. Метеослужба
- 9. Статистика
- 10. Кафе.
- Лабораторная работа №22 Графика.
- Карандаш и кисть
- Графические примитивы
- Ломаная линия
- Прямоугольник
- Многоугольник
- Окружность и эллипс
- Лабораторная работа №23 Иллюстрации
- Битовые образы
- Мультипликация
- Метод базовой точки
- Использование битовых образов
- Загрузка битового образа из ресурса программы
- Создание файла ресурсов
- Подключение файла ресурсов
- Int w, h; // размер кадра
- Int с; // номер воспроизводимого кадра
- Лабораторная работа №25
- 1. База данных и субд
- Локальные и удаленные базы данных
- Структура базы данных
- Псевдоним
- Компоненты доступа и манипулирования данными
- Создание базы данных
- Доступ к базе данных Доступ к базе данных обеспечивают компонентыDatabase, Table, Query и DataSource.Значки этих компонентов находятся на вкладкахData Accessи bde(рис. 25.8).
- Отображение данных
- Манипулирование данными
- Выбор информации из базы данных
- Перенос программы управления базой данных на другой компьютер
- 2. Задание на выполнение работы
- Литература