Главная страница
Навигация по странице:

  • Draw

  • Timer

  • TBitmap

  • OnTimer

  • Рис. 3.17

  • Add ListBox1ItemsAdd("Roman") Примердля ListBox'а. Для вставки строки в определенное место служит метод Insert


    Скачать 0.59 Mb.
    НазваниеAdd ListBox1ItemsAdd("Roman") Примердля ListBox'а. Для вставки строки в определенное место служит метод Insert
    Дата09.02.2022
    Размер0.59 Mb.
    Формат файлаdocx
    Имя файлаC.docx
    ТипУрок
    #356179
    страница11 из 17
    1   ...   7   8   9   10   11   12   13   14   ...   17

    Использование битовых образов. Загрузка битового образа из ресурса программы.


    В последнем примере изображение формировалось из графических примитивов. Теперь рассмотрим, как можно реализовать перемещение заранее подготовленного при помощи графического редактора изображения.

    Как и в предшествующей программе, эффект перемещения объекта (картинки) достигается за счет периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. Перед выводом картинки в новой точке предыдущее изображение должно быть удалено, а фоновый рисунок, который был перекрыт – восстановлен.

    Удалить (стереть) картинку и одновременно восстановить фон можно путем перерисовки всей фоновой картинки или только той ее части, которая была перекрыта объектом. В рассматриваемой программе используется второй подход. Изображение объекта выводится применением метода Draw к свойству canvas формы, а стирается путем копирования (метод CopyRect) нужной части фона из буфера в битовый образ, соответствующий поверхности формы.

    Форма программы приведена на рис. 3.17, а текст – в листинге 3.6. Компонент Timer используется для организации цикла удаления и вывода изображения самолета.

    Для хранения битовых образов (картинок) фона и самолета используются два объекта типа TBitmap, которые создает функция TFormi::Formcreate (объявления этих объектов надо поместить в заголовочный файл проекта). Эта же функция загружает из файлов картинки фона (factory.bmp) и самолета (aplane.bmp).

    Восстановление фона выполняется при помощи метода copyRect, который позволяет выполнить копирование прямоугольного фрагмента одного битового образа в другой. Объект, к которому применяется метод copyRect, является приемником копии битового образа. В качестве параметров методу передаются: координаты и размер области, куда должно быть выполнено копирование; поверхность, с которой должно быть выполнено копирование; положение и размер копируемой области. Информация о положении и размере восстанавливаемой (копируемой на поверхность формы) области фона находится в структуре badRect типа TRect.

    Следует обратить внимание на то, что начальное значение переменной х, которая определяет положение левой верхней точки битового образа (движущейся картинки) – отрицательное число, равное ширине битового образа картинки. Поэтому в начале работы программы самолет не виден и картинка отрисовывается за границей видимой области. С каждым событием OnTimer значение координаты х увеличивается и на экране появляется та часть битового образа, координаты которой больше нуля. Таким образом, у наблюдателя создается впечатление, что самолет вылетает из-за левой границы окна.


    Рис. 3.17. Форма программы "Полет над городом"

    спользование битовых образов. Загрузка битового образа из ресурса программы.


    Листинг 3.7. Полет над городом.

    void _fastcall TForml::FormCreate(TObject *Sender)

    {

    // загрузить фоновый рисунок из bmp-файла

    back = new Graphics::TBitmap();

    back › LoadFromFile("factory.bmp");

    // установить размер клиентской (рабочей) области формы

    // в соответствии с размером фонового рисунка

    GlientWidth = back › Width;

    ClientHeight = back › Height;

    // загрузить картинку

    sprite = new Graphics::TBitmap();

    sprite › LoadFromFile("aplane.bmp");

    sprite › Transparent = true;

    // исходное положение самолета

    x=-20; // чтобы самолет "вылетал" из-за левой границы окна У=20;

    }

    void _fastcall TForml::FormPaint(TObject *Sender)

    {

    Canvas › Draw(0.0,back); //фон

    Canvas › Draw(x,у,sprite); // рисунок }

    void__fastoall TForml::TimerlTimer(TObject *Sender)

    {

    TRect badRect; // положение и размер области фона,

    // которую надо восстановить

    badRect = Rect(x,y,x+sprite › Width,y+sprite › Height);

    // стереть самолет (восстановить "испорченный" фон)

    Canvas › CopyRect(badRect,back › Canvas,badRect);

    // вычислим новые координаты спрайта (картинки)

    х +=2;

    if (х > ClientWidth)

    {

    // самолет улетел за правую границу формы

    // изменим высоту и скорость полета

    х = -20;

    у = random(ClientHeight – 30); // высота полета"

    // скорость полета определяется периодом возникновения

    // события On Timer, который, в свою очередь, зависит

    // от значения свойства Interval

    Timerl › Interval = random(20) + 10;

    // скорость "полета" меняется

    // от 10 до 29 }

    Canvas › Draw(х,у,sprite);

    }

    Загрузка битового образа из ресурса программы


    В программе "Полет над городом" (листинг 3.7) картинки (битовые образы) фона и объекта (самолета) загружаются из файлов. Такой подход не всегда удобен. C++ Builder позволяет поместить нужные битовые образы в исполняемый файл программы и по мере необходимости загружать их непосредственно оттуда.

    Битовый образ, находящийся в выполняемом файле программы, называется ресурсом, а операция загрузки битового образа из выполняемого файла – загрузкой битового образа из ресурса.

    Для того чтобы воспользоваться возможностью загрузки картинки из ресурса, сначала надо создать файл ресурсов и поместить в него нужные картинки.
    1   ...   7   8   9   10   11   12   13   14   ...   17


    написать администратору сайта