Использование битовых образов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Рассмотрим, как можно реализовать перемещение заранее подготовленного при помощи графического редактора изображения. Эффект перемещения объекта достигается за счет периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. Перед выводом картинки в новой точке предыдущее изображение должно быть удалено, а фоновый рисунок, который был перекрыт – восстановлен. Удалить картинку и одновременно восстановить фон можно путем перерисовки той ее части, которая была перекрыта объектом.

Восстановление фона выполняется при помощи метода 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, просмотров: 220.