Метод базовой точки
Следующая простая программа показывает, как можно заставить двигаться изображение, сформированное из графических примитивов. Окно и форма программы приведены на рис. 23.10.
Рис. 3.14. Окно и форма программы
На поверхности формы находится один-единственный компонент Timer, который используется для генерации последовательности событий, функция обработки которых обеспечивает вывод и удаление рисунка. Значок компонента Timer находится на вкладке System (рис. 23.11). Следует обратить внимание, что компонент Timer является невизуальным. Это значит, что во время работы программы компонент в диалоговом окне не отображается. Поэтому компонент Timer можно поместить в любую точку формы. Свойства компонента Timer приведены в табл. 3.7.
Рис. 3.15. Значок компонента Timer
Таблица 3.7. Свойства компонента Timer
Свойство | Определяет |
Name | Имя компонента. Используется для доступа к свойствам компонента |
Interval | Период возникновения события OnTimer, Задается в миллисекундах |
Enabled | Разрешение работы. Разрешает (значение true) или запрещает (значение false) возникновение события OnTimer |
Компонент Timer генерирует событие OnTimer. Период возникновения события onTimer измеряется в миллисекундах и определяется значением свойства interval. Следует обратить внимание на свойство Enabled. Оно дает возможность программе "запустить" или "остановить" таймер. Если значение свойства Enabled равно false, то событие onTimer не возникает. В рассматриваемой программе вывод изображения выполняет функция ship, которая рисует на поверхности формы кораблик. В качестве параметров функция ship получает координаты базовой точки. Базовая точка (X0, Y0) определяет положение графического объекта в целом; от нее отсчитываются координаты графических примитивов, образующих объект (рис. 23.16). Координаты графических примитивов можно отсчитывать от базовой точки не в пикселах, а в относительных единицах. Такой подход позволяет легко выполнить масштабирование изображения.
Рис. 3.16. Базовая точка (х0, у0) определяет положение объекта
Перед тем как нарисовать кораблик на новом месте, функция обработки события от таймера стирает кораблик, нарисованный в процессе обработки предыдущего события onTimer. Изображение кораблика стирается путем вывода прямоугольника, перекрывающего его. Функции обработки события OnTimer, функция Ship и функция FormCreate, обеспечивающая настройку таймера, приведены в листинге 3.6
Листинг 3.6. Простая мультипликация
int х = -68, у = 50; // начальное положение
// базовой точки
// рисует на поверхности формы кораблик
void __fastcall TForml::Ship(int x, int y)
{
int dx=4,dy=4; // шаг сетки
// корпус и надстройку будем рисовать
// при помощи метода Polygon
TPoint pi[7]; // координаты точек корпуса
TPoint p2[8]; // координаты точек надстройки
TColor pc,bc; // текущий цвет карандаша и кисти
// сохраним текущий цвет карандаша и кисти
рс = Canvas->Pen->Color;
be = Canvas->Brush->Color;
// установим нужный цвет карандаша и кисти
Canvas->Pen->Color = clBlack;
Canvas->Brush->Color = clWhite;
// рисуем ... 11 корпус
pl[0].x = x; pl[0].y = y;
pl[l].x=x; pl[l].y = y-2*dy;
pl[2].x = x+10*dx; pi[2].у = y-2*dy;
pl[3].x = x+ll*dx; pl[3].y = y-3*dy;
pl[4]-x = x+17*dx; pi[4].у =y-3*dy;
pl[5].x = x+14*dx; pi[5].у =y;
pl[6].x = x; pl[6].y =y;
Canvas->Polygon(pl,6);
// надстройка
p2[0].x = x+3*dx; p2[0].y = y-2*dy;
p2[l].x = x+4*dx; p2[l].y = y-3*dy;
р2[2].х = x+4*dx; p2[2].y = y-4*dy;
р2[3].х = x+13*dx; p2[3].y = y-4*dy;
р2[4].х = x+13*dx; p2[4].y = y-3*dy;
р2[5].х = x+ll*dx; p2[5].y = y-3*dy;
р2[6].х = x+10*dx; p2[6].y = y-2*dy;
р2[7].х = x+3*dx; p2[7].y = y-2*dy;
Canvas->Polygon(p2,7);
Canvas->MoveTo(x+5*dx,y-3*dy);
Canvas->LineTo(x+9*dx,y-3*dy);
// капитанский мостик
Canvas->Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy);
// труба
Canvas->Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);
// иллюминаторы
Canvas->Ellipse(x+ll*dx,y-2*dy,x+12*dx,y-l*dy);
Canvas->Ellipse(x+13*dx,y-2*dy,x+14*dx,y-l*dy);
// мачта
Canvas->MoveTo(x+10*dx,y-5*dy);
Canvas->LineTo(x+10*dx,y-10*dy);
// оснастка
Canvas->Pen->Color = clWhite;
Canvas->MoveTo(x+17*dx,y-3*dy);
Canvas->LineTo(x+10*dx, y-10*dy);
Canvas->LineTo(x,y-2*dy);
// восстановим цвет карандаша и кисти
Canvas->Pen->Color = рс;
Canvas->Brush->Color = be;
}
// обработка события OnTimer
void__fastcall TForml::TimerlTimer(TObject *Sender)
{
//стереть кораблик - закрасить цветом,
// совпадающим с цветом фона (формы)
Canvas->Brush->Color = Forml->Color;
Canvas->FillRect(Rect(x-1,y+l,x+68,y-40));
// вычислить координаты базовой точки х+=3;
if (x > ClientWidth)
{
// кораблик "уплыл" за правую границу формы
х= -70; // чтобы кораблик "выплывал" из-за
// левой границы формы
y=random(Forml->ClientHeight);
}
// нарисовать кораблик на новом месте
Ship(х, у) ;
}
// обработка события OnCreate для формы
void__fastcall TForml::FormCreate(TObject *Sender)
{
/* Таймер можно настроить во время разработки программы (в процессе создания формы) или во время работы программы. */
// настройка и запуск таймера
Timerl->Interval = 100; // период события OnTimer —0.1 сек.
Timerl->Enabled = true; // пуск таймера
}
- Московский государственный университет
- Компоненты
- Событие и функция обработки события
- Редактор кода
- Система подсказок
- Навигатор классов
- Шаблоны кода
- Справочная система
- Сохранение проекта
- Компиляция
- Предупреждения и подсказки
- Компоновка
- Запуск программы
- Ошибки времени выполнения
- Внесение изменений
- Настройка приложения
- Название программы
- Значок приложения
- Перенос приложения на другой компьютер
- Структура простого проекта
- 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. Задание на выполнение работы
- Литература