Рассмотрим, как можно реализовать перемещение заранее подготовленного при помощи графического редактора изображения. Эффект перемещения объекта достигается за счет периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. Перед выводом картинки в новой точке предыдущее изображение должно быть удалено, а фоновый рисунок, который был перекрыт – восстановлен. Удалить картинку и одновременно восстановить фон можно путем перерисовки той ее части, которая была перекрыта объектом.
Восстановление фона выполняется при помощи метода CopyRect, который позволяет выполнить копирование прямоугольного фрагмента одного битового образа в другой. В качестве параметров методу передаются: координаты и размер области, куда должно быть выполнено копирование; поверхность, с которой должно быть выполнено копирование; положение и размер копируемой области.
Например:
TRect rect; // задаем прямоугольную область под копируемый объект
rect =Rect(x,y, x+plane->Width, y+plane->Height); // задаем координаты объекта с
// именем plane
Canvas->CopyRect(rect, sky->Canvas, rect); // восстанавливаем фон sky под этим
//объектом, копируя его в область rect
x+=3; // меняем координату
Canvas->Draw(x,y, plane); // перерисовываем объект plane в новом положении
Практикум
1. Разработать программу «Полет над городом». Изображение фона и объекта загружаются из файла.
2. Реализовать мультик, состоящий из 5-6 кадров, поочередно сменяющих друг друга (например, идущий человек, полет птицы).
УПРАВЛЕНИЕ ОБЪЕКТАМИ
Рассмотрим, как в Builder C++ можно кнопками управлять объектом, например, при создании игр.
Проанализируем движение стрелками влево, вправо. Для этого нам потребуется обрабатывать события FormKeyDown и FormKeyUp, и определять, какая именно клавиша была нажата. Заведем переменную rd, которая и будет указывать направление движения.
Для того, чтобы постоянно реагировать на нажатие клавиш нам потребуется таймер. Добавим отрисовку битового образа и осуществим его движение по горизонтали.
Нижеследующая таблица показывает некоторые названия именованных констант, шестнадцатеричные значения, и эквиваленты мыши или клавиатуры для кодов виртуальных клавиш, используемых системой.
Константа | Значение | Предназначение |
VK_BACK | 08 | Клавиша BACKSPACE (возврата на позицию). |
VK_TAB | 09 | Клавиша TAB (табуляции). |
VK_RETURN | 0D | Клавиша ENTER (ввод). |
VK_SPACE | 20 | Клавиша SPACEBAR (пробел). |
VK_LEFT | 25 | Клавиша LEFT ARROW (стрелка влево). |
VK_UP | 26 | Клавиша UP ARROW (стрелка вверх). |
VK_RIGHT | 27 | Клавиша RIGHT ARROW (стрелка вправо). |
VK_DOWN | 28 | Клавиша DOWN ARROW (стрелка вниз). |
VK_INSERT | 2D | Клавиша INS (вставить). |
При создании игр полезным бывает знать, столкнулся один объект с другим или нет. Для этого можно воспользоваться функцией IntersectRect, которая вычисляет пересечение двух исходных прямоугольников и помещает координаты перекрытого прямоугольника в прямоугольник назначения. Если прямоугольники пересекаются, возвращаемое значение - не нуль. Если прямоугольники не пересекаются, возвращаемое значение - нуль.
Например:
Результат:
Практикум
1. Создать простейший аналог игры Pacman. Случайным образом появляются объекты, добавляющие жизнь и отнимающие.
РАБОТА С ДВУМЯ ФОРМАМИ
Для добавления еще одной формы в проект заходим File->New->Form
Для того, чтобы формы могли взаимодействовать друг с другом, в модуле Unit1.cpp добавим директиву препроцессора #include "Unit2.h", в модуле Unit2.cpp добавим #include "Unit1.h"
Теперь попробуем осуществить взаимодействие между двумя формами. Допустим, первая форма по нажатию на кнопку будет вызывать вторую форму.
Для отображения формы используется следующий метод:
В этом случае будет возможным переходить с одного окна на другое. Если форму нужно сделать главной и запретить переход, используется метод
Form2->ShowModal();
Обращаем внимание, при закрытии второй формы проект еще работает, так как не закрыта главная первая форма. Чтобы изменить приоритет формы (т.е. та, которая будет первой открываться при запуске проекта), необходимо сделать следующее:
Project->Options
Для закрытия формы используется метод
Form2->Close();
Метод Hide делает компонент невидимым
Form1->Hide();
В этом случае при закрытии второй формы (событие OnClose) нужно обратно сделать видимой первую форму:
Рассмотрим теперь как можно использовать элементы первой формы, работая со второй.
Во второй форме используем событие OnActivate (событие OnCreate возникает сразу для двух форм).
При необходимости передавать значения переменной из одной формы в другую, переменные описываются в Unit1.h в классе public:
Практикум
1. Добавить в любой разработанный проект форму регистрации. При переходе на вторую форму в заголовке формы указывать имя, введенное в первой.
МУЛЬТИМЕДИА
Большинство современных программ, работающих в среде Windows, являются мультимедийными. Такие программы обеспечивают просмотр видеороликов и мультипликации, воспроизведение музыки, речи, звуковых эффектов. Типичные примеры мультимедийных программ – игры и обучающие программы.
C++ Builder предоставляет в распоряжение программиста два компонента, которые позволяют разрабатывать мультимедийные программы:
Animate – обеспечивает вывод простой, не сопровождаемой звуком анимации;
MediaPlayer – позволяет решать более сложные задачи, например воспроизводить видеоролики, звук и сопровождаемую звуком анимацию.
Компонент Animate
Компонент Animate , значок которого находится на вкладке Win32, позволяет воспроизводить простую, не сопровождаемую звуком анимацию, кадры которой находятся в AVI-файле. Компонент Animate добавляется к форме обычным образом. После того как компонент будет добавлен к форме, следует выполнить его настройку – установить значения свойств.
Свойства компонента Animate
Свойство | Описание |
Name | Имя компонента. Используется для доступа к свойствам компонента и для управления его поведением |
FileName | Имя AVI-файла, в котором находится анимация, отображаемая при помощи компонента |
FrameWidth | Ширина кадров анимации |
FrameHeight | Высота кадров анимации |
FrameCount | Количество кадров анимации |
AutoSize | Признак автоматического изменения размера компонента в соответствии с размером кадров анимации |
Center | Признак центрирования кадров анимации в поле компонента. Если значение свойства равно true и размер компонента больше размера кадров (AutoSize = false), кадры анимации располагаются в центре поля компонента |
StartFrame | Номер кадра, с которого начинается отображение анимации |
StopFrame | Номер кадра, на котором заканчивается отображение анимации |
Active | Признак активизации процесса отображения анимации |
Color | Цвет фона компонента (цвет "экрана"), на котором воспроизводится анимация |
Transparent | Режим использования "прозрачного" цвета при отображении анимации |
Repetitions | Количество повторов отображения анимации |
Например: программа Анимация демонстрирует воспроизведение AVI-анимации при помощи компонента Animate. Анимация загружается из выбранного файла. Открытие файла обеспечивает компонент OpenDialog 1, который находится на вкладке Dialogs.
Практикум
1. Реализовать приложение «Просмотр анимации»
Требования:
После запуска программы в форме будет выведен первый кадр анимации, которая находится в каталоге проекта. Если ни одного файла с расширением .avi в каталоге проекта нет, то поле компонента Animate останется пустым.
Имя файла, в котором находится анимация, можно ввести в поле Edit1 или выбрать в стандартном диалоговом окне Открыть файл, которое становится доступным в результате щелчка на кнопке Выбрать. Доступ к стандартному диалоговому окну Открыть файл обеспечивает компонент Opendialog1.
Программа "Просмотр анимации" обеспечивает два режима просмотра: непрерывный и по кадрам. Кнопка Button1 используется как для инициализации процесса воспроизведения анимации, так и для его приостановки. Процесс непрерывного воспроизведения анимации инициирует процедура обработки события OnClick на кнопке Пуск, которая присваивает значение true свойству Active. Эта же процедура заменяет текст на кнопке Button1 с "Пуск" на "Стоп".
При покадровом просмотре анимации начальный и конечный кадр задается одним и тем же значением:
// отобразить кадр с номером nAnimate1->StartFrame =n;Animate1->StopFrame = n;Компонент MediaPlayer
Компонент MediaPlayer обеспечивает воспроизведение звуковых файлов различных форматов (WAV, MID, RMI, МР3), полноценной, сопровождаемой звуком анимации и видеороликов (AVI) и музыкальных компакт-дисков. Значок компонента MediaPlayer находится на вкладке System.
Компонент MediaPlayer представляет собой группу кнопок, подобных тем, какие можно видеть на обычном аудио – или видеоплеере.
Кнопки компонента MediaPlayer
Кнопка | Обозначение | Действие |
Воспроизведение | btPlay | Воспроизведение звука или видео |
Пауза | btPause | Приостановка воспроизведения |
Стоп | btStop | Остановка воспроизведения |
Следующий | btNext | Переход к следующему кадру |
Предыдущий | btPrev | Переход к предыдущему кадру |
Шаг | btStep | Переход к следующему звуковому фрагменту, например, к следующей песне на CD |
Назад | btBack | Переход к предыдущему звуковому фрагменту, например, к предыдущей песне на CD |
Запись | btRecord | Активизирует процесс записи |
Открыть | btEject | Открывает CD-дисковод компьютера |
Дата: 2019-04-23, просмотров: 260.