362________________________________________________Глава 5

значения num рисуется один или другой кадр, причем в рисунке учитывается по-
зиция Xpos и направление движения revers.

Сохраните ваше приложение и выполните его. Щелкнув на кнопке вы можете
заставить вашего человечка перемещаться. Достигнув края формы он будет пово-
рачиваться и шагать в обратном направлении. При вторичном щелчке на кнопке
он будет останавливаться.

Конечно, пока движения нашего человечка очень неуклюжи. Чуть позже мы
научим его двигаться более плавно. А пока обсудим некоторые проблемы, связан-
ные с построением даже простеньких мультипликаций.

Первая из них — создание фона. Наш человечек движется в пустом простр;,
стве и мы не замечаем этой проблемы. Но попробуйте вставить в программу i
кой-нибудь фон. Например, вставьте в начало процедуры FormCreate следуют
операторы, рисующие черный прямоугольник:

Imagel->Canvas->Brush->Color = 0;

Imagel->Canvas->Rectangle(90,0,200,100);

Imagel->Canvas->Brush->Color = clWhite;

Выполните теперь свое приложение. Во время движения человечка вы уви;:

те картину, приведенную на рис. 5.16 а. На черном фоне черный человечек стаг
вится белым. Если мультипликация черно-белая, то такой результат может толь
радовать, поскольку черное на черном просто исчезало бы. Но при разноцветп
пестром фоне картина становится безрадостной. Вы можете в этом убедиться, е<
введете в свое приложение компонент OpenPictureDialog и в начале процеду:

FormCreate вставите оператор

if (OpenPictureDialogl->Execute())

Imagel->Picture->LoadFromFile(OpenPictureDialogl->FileName);

который позволит вам перед началом работы приложения загрузить в виде фо
какой-нибудь графический файл. Тогда вы получите результат, показанный
рис. 5.16 б. Если у вас хорошее зрение, то вы может быть найдете человечка i,,
фоне земного шара, но, наверное, с трудом.

Какие возможны выходы из положения? Наиболее простой — ограничиваться
черно-белой мультипликацией или, во всяком случае, не использовать пестрых
фонов. Если же по какой-то причине это невозможно, то, вероятнее всего, вам при-
дется отказаться от режима пера pmNotXor и использовать буферизацию фона.

В нашем примере это можно было бы сделать следующим образом. Открой
свой предыдущий проект мультипликации и сохраните его под новым имен;

командой File | Save Project As... . Затем сохраните под новым именем файл моду.
командой File Save As... . Теперь вы можете вводить в модуль изменения, не опас
ясь испортить свой предыдущий проект.

Введите глобальную переменную типа TBitmap:

Graphics::TBitmap *BitMap;

Это будет объект, в котором вы будете сохранять фрагменты фона, испорчг
ные очередным кадром. Переделайте процедуру FormCreate следующим образом

Рис. 5.16

Изменение цвета
мультипликации
при наложении
на однотонный
(а) и пестрый (б)
фон