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

  • Рис. 3.14

  • Timer

  • Рис. 3.15

  • Свойство Определяет Name

  • Interval Период возникновения события OnTimer

  • Enabled Разрешение работы. Разрешает (значение true

  • FormCreate

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


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

    Мультипликация. Метод базовой точки.


    Под мультипликацией обычно понимается движущийся и меняющийся рисунок. В простейшем случае рисунок может только двигаться или только меняться.

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

    Метод базовой точки


    Следующая простая программа показывает, как можно заставить двигаться изображение, сформированное из графических примитивов. Окно и форма программы приведены на рис. 3.14.


    Рис. 3.14. Окно и форма программы

    На поверхности формы находится один-единственный компонент Timer, который используется для генерации последовательности событий, функция обработки которых обеспечивает вывод и удаление рисунка. Значок компонента Timer находится на вкладке System (рис. 3.15). Следует обратить внимание, что компонент Timer является невизуальным. Это значит, что во время работы программы компонент в диалоговом окне не отображается. Поэтому компонент Timer можно поместить в любую точку формы. Свойства компонента Timer приведены в табл. 3.7.


    Рис. 3.15. Значок компонента Timer

    Таблица 3.7. Свойства компонента Timer.

    Свойство

    Определяет

    Name

    Имя компонента. Используется для доступа к свойствам компонента

    Interval

    Период возникновения события OnTimer, Задается в миллисекундах

    Enabled

    Разрешение работы. Разрешает (значение true) или запрещает (значение false) возникновение события OnTimer

    Компонент Timer генерирует событие OnTimer. Период возникновения события onTimer измеряется в миллисекундах и определяется значением свойства interval. Следует обратить внимание на свойство Enabled. Оно дает возможность программе "запустить" или "остановить" таймер. Если значение свойства Enabled равно false, то событие onTimer не возникает.

    В рассматриваемой программе вывод изображения выполняет функция ship, которая рисует на поверхности формы кораблик. В качестве параметров функция ship получает координаты базовой точки. Базовая точка (X0, Y0) определяет положение графического объекта в целом; от нее отсчитываются координаты графических примитивов, образующих объект (рис. 3.16). Координаты графических примитивов можно отсчитывать от базовой точки не в пикселах, а в относительных единицах. Такой подход позволяет легко выполнить масштабирование изображения.


    Рис. 3.16. Базовая точка (х0, у0) определяет положение объекта

    Мультипликация. Метод базовой точки.


    Перед тем как нарисовать кораблик на новом месте, функция обработки события от таймера стирает кораблик, нарисованный в процессе обработки предыдущего события onTimer. Изображение кораблика стирается путем вывода прямоугольника, перекрывающего его.

    Функции обработки события OnTimer, функция Ship и функция FormCreate, обеспечивающая настройку таймера, приведены в листинге 3.6.

    Листинг 3.6. Простая мультипликация.

    int х = -68, у = 50; // начальное положение базовой точки

    // рисует на поверхности формы кораблик

    void __fastcall TForml::Ship(int x, int y)

    {

    int dx=4,dy=4; // шаг сетки

    // корпус и надстройку будем рисовать

    // при помощи метода Polygon

    TPoint pi[7]; // координаты точек корпуса

    TPoint p2[8]; // координаты точек надстройки

    TColor pc,bc; // текущий цвет карандаша и кисти

    // сохраним текущий цвет карандаша и кисти

    рс = Canvas › Pen › Color;

    be = Canvas › Brush › Color;

    // установим нужный цвет карандаша и кисти

    Canvas › Pen › Color = clBlack;

    Canvas › Brush › Color = clWhite;

    // рисуем… 11 корпус

    pl[0].x = x; pl[0].y = y;

    pl[l].x = x; pl[l].y = y-2*dy;

    pl[2].x = x+10*dx; pi[2].у = y-2*dy;

    pl[3].x = x+ll*dx; pl[3].y = y-3*dy;

    pl[4]-x = x+17*dx; pi[4].у =y-3*dy;

    pl[5].x = x+14*dx; pi[5].у =y;

    pl[6].x = x; pl[6].y =y;

    Canvas › Polygon(pl,6);

    // надстройка

    p2[0].x = x+3*dx; p2[0].y = y-2*dy;

    p2[l].x = x+4*dx; p2[l].y = y-3*dy;

    р2[2].х = x+4*dx; p2[2].y = y-4*dy;

    р2[3].х = x+13*dx; p2[3].y = y-4*dy;

    р2[4].х = x+13*dx; p2[4].y = y-3*dy;

    р2[5].х = x+ll*dx; p2[5].y = y-3*dy;

    р2[6].х = x+10*dx; p2[6].y = y-2*dy;

    р2[7].х = x+3*dx; p2[7].y = y-2*dy;

    Canvas › Polygon(p2.7);

    Canvas › MoveTo(x+5*dx,y-3*dy);

    Canvas › LineTo(x+9*dx,y-3*dy);

    // капитанский мостик

    Canvas › Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy);

    // труба

    Canvas › Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);

    // иллюминаторы

    Canvas › Ellipse(x+ll*dx,y-2*dy,x+12*dx,y-l*dy);

    Canvas › Ellipse(x+13*dx,y-2*dy,x+14*dx,y-l*dy);

    // мачта

    Canvas › MoveTo(x+10*dx,y-5*dy);

    Canvas › LineTo(x+10*dx,y-10*dy);

    // оснастка

    Canvas › Pen › Color = clWhite;

    Canvas › MoveTo(x+17*dx,y-3*dy);

    Canvas › LineTo(x+10*dx, y-10*dy);

    Canvas › LineTo(x,y-2*dy);

    // восстановим цвет карандаша и кисти

    Canvas › Pen › Color = рс;

    Canvas › Brush › Color = be; }

    // обработка события OnTimer

    void__fastcall TForml::TimerlTimer(TObject *Sender)

    {

    // стереть кораблик – закрасить цветом, совпадающим

    // с цветом фона (формы)

    Canvas › Brush › Color = Forml › Color;

    Canvas › FillRect(Rect(x-1,y+l,x+68,y-40));

    // вычислить координаты базовой точки х+=3;

    if (x > ClientWidth)

    {

    // кораблик "уплыл" за правую границу формы

    х= -70; // чтобы кораблик "выплывал" из-за левой границы формы

    y=random(Forml › ClientHeight); }

    // нарисовать кораблик на новом месте Ship(х, у);)

    // обработка события OnCreate для формы

    void__fastcall TForml::FormCreate(TObject *Sender)

    {

    /* Таймер можно настроить во время разработки программы

    (в процессе создания формы) или во время работы программы. */

    // настройка и запуск таймера

    Timerl › Interval = 100; // период события OnTimer – 0.1 сек.

    Timerl › Enabled = true; // пуск таймера

    }
    1   ...   6   7   8   9   10   11   12   13   ...   17


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