- •Задача 1. Конвертер
- •Задача 2. Фунты-килограммы
- •Задача 3. Сила тока.
- •Задача 4. Сопротивление
- •Задача 5. Кафе
- •Задача 6. Любимый напиток
- •Задача 7. Электроэнергия
- •Задание 8. Осаго
- •Задание 9.Просмотр иллюстраций
- •Задача 10. Калькулятор
- •Задача 11. Калькулятор-2
- •Задача 12.Секундомер
- •Задача 13. Угадай число
- •Задание 14.Угадай число-2
- •Задание 15.Запуск Internet Explorer
- •Задание 16.Конвертор
- •Задание 17.Конвертор 2
- •Задание 18.Погода
- •Задание 19.Средняя температура
- •Задание 20. Простая база данных
- •Задание 21. Редактор текста
- •Задание 22. Приветствие
- •Задача 23. Олимпийский флаг
- •Задание 24. Диаграмма
- •Задача 26. Круговая диаграмма.
- •Задача 27. Просмотр иллюстраций.
- •Задача 28 .Часы
- •Задача 29. Пинг понг.
- •Задача 30. Полет в облаках
- •Задача 31.Баннер
- •Задача 32. Фоновый рисунок
- •Задача 33. Wav
- •Задача 34. Mp3 Player
- •Задача 35.Воспроизведение midi
- •Задача 36.Compact Disk Player (версия 1)
- •Задача 37.Compact Disk Player (версия 2)
- •Задача 38.VideoPlayer
- •Задача 39. Анимация
- •Задача 40. Записная книжка
- •Задача 41 Магазин
- •Задача 42. Ежедневник
- •Задача 43. Сапер
- •Часть 1. Примеры и задачи
- •Часть 1. Примеры и задачи
- •Задача 44 Игра 15
- •Часть 1. Примеры и задачи
- •Задача 45. Игра "Собери картинку" (Puzzle)
- •Задача 46 Игра "Парные картинки"
- •Задача 47. Экзаменатор
- •Задача 48. Экзаменатор-2
- •Задача 49. Календарь
- •Задача 50. Будильник
- •Задача 51. Очистка диска
- •Задача 52.Печать
- •Задачи для самостоятельного решения Задача 1. Скидка
- •Задача 2.Доход по вкладу
- •Задача 3. Таблица умножения
- •Задача 4.Поездка на автомобиле
- •Задача 5.Стоимость разговора
- •Задача 6. Стеклопакет
- •Задача7. Калькулятор
- •Задача 8. Электроэнергия
- •Задача 9. Добрый день
- •Задача 10. Часы
- •Задача 11. Узоры
- •Задача 12. Курс доллара
- •Задача 13. Диаграмма
- •Задача 14. Домашние животные
- •Задача 15. Кораблик
- •Задача 16. Сапер
- •Задача 17 .Экзаменатор
- •Задача 18. База данных "Расходы"
Задача 30. Полет в облаках
Программа Полет в облаках (Рис. 37) демонстрирует принципы мультипликации (движение объекта на фоне картинки)
Рис 37
Вывод: В этом задании мы научились создавать анимацию движения самолёта с помощью кода и компонента Timer.
Листинг
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Graphics::TBitmap *back;
Graphics::TBitmap *sprite;
Graphics::TBitmap *kadr;
int x,y;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
back = new Graphics::TBitmap();
back->LoadFromFile("C:\\Полет в облаках\\123.bmp");
// установить размер клиентской (рабочей) области формы
// в соответствии с размером фонового рисунка
ClientWidth = back->Width;
ClientHeight = back->Height;
// загрузитькартинку
sprite = new Graphics::TBitmap();
sprite->LoadFromFile("imgpreview.bmp");
sprite->Transparent = true;
// сформироватькадр
kadr = new Graphics::TBitmap();
kadr->LoadFromFile("imgpreview.bmp");
// исходное положение самолета
x = -40; // чтоб самолет "вылетал" из-за левой границы окна
y = 20;
Timer1->Interval = 10;
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TRect badRect; // положение и размер области фона,
// которую надо восстановить
TRect frameRect ;
badRect = Rect(x,y,x+sprite->Width,y+sprite->Height);
frameRect = Rect(0,0, kadr->Width, kadr->Height);
#ifdef ONCANVAS
Canvas->CopyRect(badRect,back->Canvas,badRect);
// вычислим новые координаты спрайта
x +=2;
if (x > ClientWidth)
{
// самолет улетел за правую границу формы
// изменим высоту и скорость полета
x = -20;
y = random(ClientHeight - 30); // высота полета
// скорость полета определяется периодом возникновения
//события OnTimer, который, в свою очередь, зависит
// от значения свойства Interval
Timer1->Interval = random(20) + 10; // скорость
// "полета" от 10 до 29
}
Canvas->Draw(x,y,sprite);
#else
// изображение формируем на рабочей поверхности,
// затем выводим на поверхность формы
// сформировать очередной кадр
// скопироватьфрагментфона
kadr->Canvas->CopyRect(frameRect, back->Canvas,badRect);
// нарисоватьобъект
kadr->Canvas->Draw(0,0,sprite);
Form1->Canvas->Draw(x,y,kadr);
// вычислим новые координаты спрайта
x += 1;
if (x > ClientWidth)
// самолет улетел за правую границу формы
// изменим высоту и скорость полета
x = -20;
y = random(ClientHeight - 30); // высота полета
// скорость полета определяется периодом возникновения
// события OnTimer, который, в свою очередь, зависит
// от значения свойства Interval
Timer1->Interval = random(20) + 10; // скорость
// "полета" от 10 до 29
#endif
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
Canvas->Draw(0,0,back);
}
