Задание6_Мультипликация (1076723)
Текст из файла
Задание 6
Вывод иллюстраций и мультипликация
Задание 6.1. Создайте программу, которая демонстрирует движение окружности из левого нижнего в правый верхний угол окна программы.
Задание 6.2. Летящий самолет.
Вывод иллюстраций
Наиболее просто вывести иллюстрацию, которая находится в файле с расширением bmp, jpg или ico, можно при помощи компонента image, значок которого находится на вкладке Additional палитры (рис. 1).
Рис. 1. Значок компонента Image
В табл. 1 перечислены основные свойства компонента image.
Таблица 1. Свойства компонента Image
Свойство Определяет
P
icture Иллюстрацию, которая отображается в поле компонента
Width, Height Размер компонента. Если размер компонента меньше размера иллюстрации, и значение свойств AutoSize и Strech равно False, то отображается часть иллюстрации
AutoSize Признак автоматического изменения размера компонента в
соответствии с реальным размером иллюстрации
Strech Признак автоматического масштабирования иллюстрации в со ответствии с реальным размером компонента. Чтобы было выполнено масштабирование, значение свойства AutoSize долж[но быть False
Visible Отображается ли компонент, и, соответственно, иллюстрация, на поверхности формы
И
ллюстрацию, которая будет выведена в поле компонента image, можно задать как во время разработки формы приложения, так и во время работы программы.
Во время разработки формы иллюстрация задается установкой значения свойства picture путем выбора файла иллюстрации в стандартном диалоговом окне, которое появляется в результате щелчка на командной кнопке Load окна Picture Editor (рис. 10.12). Чтобы запустить Image Editor, нужно в окне Object Inspector выбрать свойство Picture и щелкнуть на кнопке с тремя точками.
Если размер иллюстрации больше размера компонента, то свойству Strech нужно присвоить значение True и установить значения свойств Width и Height пропорционально реальным размерам иллюстрации.
Чтобы вывести иллюстрацию в поле компонента Image во время работы программы, нужно применить метод LoadFromFile к свойству Picture, указав в качестве параметра имя файла иллюстрации. Например, инструкция
form1.Image1.Picture.LoadFromFile('e:\temp\bart.bmp')
загружает иллюстрацию из файла bart.bmp и выводит ее в поле вывода иллюстрации (Image1).
Метод LoadFromFile позволяет отображать иллюстрации различных графических форматов: BMP, WMF, JPEG (файлы с расширением jpg).
Битовые образы
При работе с графикой удобно использовать объекты типа TBitMap (битовый образ). Битовый образ представляет собой находящуюся в памяти компьютера, и, следовательно, невидимую графическую поверхность, на которой программа может сформировать изображение. Содержимое битового образа (картинка) легко и, что особенно важно, быстро может быть выведено на поверхность формы или области вывода иллюстрации (Image). Поэтому в программах битовые образы обычно используются для хранения небольших изображений, например, картинок командных кнопок.
Загрузить в битовый образ нужную картинку можно при помощи метода LoadFromFile, указав в качестве параметра имя BMP-файла, в котором находится нужная иллюстрация.
Например, если в программе объявлена переменная pic типа TBitMap, то после выполнения инструкции
pic.LoadFromFile('e:\images\aplane.bmp')
битовый образ pic будет содержать изображение самолета.
Вывести содержимое битового образа (картинку) на поверхность формы или области вывода иллюстрации можно путем применения метода Draw к соответствующему свойству поверхности (Canvas). Например, инструкция
Imagel.Canvas.Draw(x,у, bm)
выводит картинку битового образа bm на поверхность компонента Image1 (параметры х и у определяют положение левого верхнего угла картинки на поверхности компонента).
Если перед применением метода Draw свойству Transparent объекта TBitMap присвоить значение True, то фрагменты рисунка, окрашенные цветом, совпадающим с цветом левого нижнего угла картинки, не будут выведены — через них будет как бы проглядывать фон. Если в качестве "прозрачного" нужно использовать цвет, отличный от цвета левой нижней точки рисунка, то свойству TransparentColor следует присвоить значение символьной константы, обозначающей необходимый цвет.
Создайте проект, который включает процедуру, приведенную в листинге 1. Программа демонстрирует использование битовых образов для формирования изображения из нескольких элементов.
Листинг 1. Использование битовых образов
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
sky,aplane: TBitMap; // битовые образы: небо и самолет
procedure TForm1.FormPaint(Sender: TObject);
begin
// создать битовые образы
sky := TBitMap.Create;
aplane := TBitMap.Create;
// загрузить картинки
sky.LoadFromFile('sky.bmp');
aplane.LoadFromFile('plane.bmp');
Form1.Canvas.Draw(0,0,sky); // отрисовка фона
Form1.Canvas.Draw(20,20,aplane); // отрисовка левого самолета
aplane.Transparent:=True;
// теперь элементы рисунка, цвет которых совпадает с цветом
// левой нижней точки битового образа, не отрисовываются
Form1.Canvas.Draw(120,20,aplane); // отрисовка правого самолета
// освободить память
sky.free;
aplane.free;
end;
После запуска программы в окне приложения (рис. 2) появляется изображение летящих на фоне неба самолетов. Фон и изображение самолета — битовые образы, загружаемые из файлов. Белое поле вокруг левого самолет показывает истинный размер картинки битового образа aplane. Белое поле вокруг правого самолета отсутствует, т. к. перед его выводом свойству Transparent битового образа было присвоено значение True.
Рис. 2. Влияние значение свойства Transparent
на вывод изображения
Мультипликация
Под мультипликацией обычно понимается движущийся и меняющийся рисунок. В простейшем случае рисунок может только двигаться или только меняться.
Обеспечить перемещение рисунка, сформированного из графических примитивов (линий, окружностей, дуг, многоугольников и т. д.), довольно просто: надо сначала вывести рисунок на экран, затем через некоторое время стереть его и снова вывести этот же рисунок, но уже на некотором расстоянии от его первоначального положения. Подбором времени между выводом и удалением рисунка, а также расстояния между старым и новым положением рисунка (шага перемещения), можно добиться того, что у наблюдателя будет складываться впечатление, что рисунок равномерно движется по экрану.
Задание 1. Создайте программу, которая демонстрирует движение окружности из левого нижнего в правый верхний угол окна программы. При этом радиус окружности должен уменьшаться от r0 до 0, чтобы имитировать удаление объекта. Вид формы программы показан на рис. 3.
Рис. 3. Форма программы Движущаяся окружность
Основную работу должна выполнять процедура Ris, которая стирает окружность и выводит ее на новом месте. Стирание окружности выполняется путем перерисовки окружности поверх нарисованной, но цветом фона.
Для обеспечения периодического вызова процедуры Ris в форму программы добавлен невизуальный компонент Timer (таймер), значок которого находится на вкладке System палитры компонентов (рис. 4). Свойства компонента Timer перечислены в табл. 2.
Рис. 4. Значок компонента Timer
Таблица 10.9. Свойства компонента Timer
Свойство Определяет
N
ame Имя компонента. Используется для доступа к компоненту
Interval Период генерации события OnTimer. Задается в миллисекундах
Enabled Разрешение работы. Разрешает (значение True) или запрещает
(значение False) генерацию события OnTimer
Д
обавляется компонент Timer к форме обычным образом, однако, поскольку компонент Timer является невизуальным, т. е. во время работы программы не отображается на форме, его значок можно поместить в любое место формы.
Компонент Timer генерирует событие OnTimer. Период возникновения события OnTimer измеряется в миллисекундах и определяется значением свойства Interval.
Механизм периодического вызова процедуры Ris реализуется следующим образом: событие OnTimer запускает процедуру Timer1.Timer, которая, в свою очередь, вызывает процедуру Ris.
Использование битовых образов
В предыдущем задании изображение формировалось из графических примитивов. Теперь рассмотрим, как можно реализовать перемещение одного сложного изображения на фоне другого, например перемещение самолета на фоне городского пейзажа.
Эффект перемещения картинки может быть создан путем периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. При этом предполагается, что перед выводом картинки в новой точке сначала удаляется ее предыдущее изображение. Удаление картинки может быть выполнено путем восстановления той части фона, которая была перекрыта битовым образом движущегося объекта-картинки.
Задание 2. Летящий самолет. Разработайте процедуру обработки события onTimer для программы, приведенной в приложении 1. Программа должна выводить на экран самолет, летящий на фоне городского пейзажа Файлы с картинками фона (factory.bmp) и самолета (plane.bmp) скопируйте в папку проекта. Картинка выводится применением метода Draw к свойству Canvas компонента Image, a стирается путем копирования (метод CopyRect) нужной части фона из буфера на поверхность компонента Image.
Форма программы приведена на рис. 5.
Компонент Image используется для вывода фона, а компонент Timer — для организации задержки между циклами удаления и вывода на новом месте изображения самолета.
Рис. 5. Форма программы Самолет
Для хранения битовых образов (картинок) фона и самолета, а также копии области фона, перекрываемой изображением самолета, используются объекты типа TBitMap, которые создаются динамически процедурой FormActivate. Эта же процедура загружает из файлов картинки фона (factory.bmp) и самолета (plane.bmp), а также сохраняет область фона, на которую первый раз будет накладываться картинка.
Сохранение копии фона выполняется при помощи метода CopyRect, который позволяет выполнить копирование прямоугольного фрагмента одного битового образа в другой. Объект, к которому применяется метод CopyRect, является приемником копии битового образа. В качестве параметров методу передаются координаты и размер области, куда должно быть выполнено копирование, поверхность, откуда должно быть выполнено копирование, а также положение и размер копируемой области.
Информация о положении и размере копируемой в буфер области фона, на которую будет наложено изображение самолета и которая впоследствии должна быть восстановлена из буфера, находится в структуре BackRct типа TRect. Для заполнения этой структуры используется функция Bounds.
Для того чтобы в начале работы программы у наблюдателя создавалось впечатление, что самолет вылетает из-за левой границы окна, задайте начальное значение переменной x, которая определяет положение левой верхней точки битового образа движущейся картинки, отрицательным числом, равным ширине битового образа картинки. Тогда в начале работы программы изображение самолета не появляется, картинка отрисовывается за границей видимой области. С каждым событием onTimer значение координаты x будет увеличиваться, и на экране появится та часть битового образа, координаты которой больше нуля.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















