Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METHOD-rdo.doc
Скачиваний:
55
Добавлен:
31.03.2015
Размер:
606.72 Кб
Скачать

3.2. Объект кадров анимации

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

Описание кадра имеет формат:

$Frame<имя_кадра>

[Show_if<условие_показа_кадра> ]

$Back_picture =<описание_фоновой_картинки>

[<описание_элементов_отображения> ]

$End

Имя кадра представляет собой простое имя. Имена должны быть различными для всех кадров и не должны совпадать с ранее определенными именами. Условие показа кадра используется при автоматическом переключении кадров и представляет собой логическое выражение. Это логическое выражение вычисляется при каждом событии. Если оно истинно, то кадр отображается, если ложно нет. Если при очередном событии значение выражения меняется, то кадр либо появляется на экране, либо исчезает. Условие показа вместе с зарезервированным словомShow_ifможет отсутствовать. Кадры с заданным условием показа называют условными. Если при некотором состоянии моделируемой системы выполняются условия показа нескольких условных кадров, то отображается тот из них, который в объекте описания кадров встречается раньше других.

Пример условия показа кадра:

Show_if Time_now > 0.2 and Time_now <= 0.3

Такой условный кадр будет изображаться, если время в моделируемой системе находится в интервале от 0.2до 0.3 часа. Time_now  глобальная системная переменная (будет рассмотрена далее в главе 5). При первом событии после того, как системное время станет больше 0.2,кадр автоматически появится на экране, при первом событии после0.3 кадр автоматически исчезнет.

Описание фоновой картинки имеет формат:

[ <цвет_фона> ] <размеры_кадра>|<имя_объекта_фона>

Цвет фона задает цвет части кадра, которая находится за пределами фоновой картинки. Цвет задается тремя численными константами целого типа, разделенными пробелами и заключенными в угловые скобки. Каждое число должно находиться в диапазоне [0, 255] изадает интенсивность одной из трех цветовых составляющих: первое число красной, второе зеленой, а третье синей.

Пример на описание различных цветов:

< 0 0 0 > черный

<255 0 0 > красный

< 0 255 0 > зеленый

< 0 0 255> синий

<255 255 0 > желтый

<255 255 255> белый

<127 127 127> серый

Цвет фона является необязательным параметром. Если он не задан, используется значение по умолчанию, равное < 0 1000 > (это значение соответствует темно-зеленому цвету).

Для описания фоновой картинки задают либо имя объекта, содержащего фоновое изображение, либо размер фоновой картинки. Объект фоновой картинки должен быть растровым изображением, сохраненным в формате независимой от устройства битовой карты (BMP-формате) и иметь тип .bmp. Такой объект может быть создан графическими редакторами, такими какPaintbrush,CorelDrawи др.

Имеется другая возможность задания фоновой картинки. Для этого вместо имени объекта указывают размеры фоновой картинки. В этом случае РДО-имитатор сам создает фоновую картинку, которая представляет собой прямоугольник указанного размера с цветом фона и границей черного цвета толщиной в один пиксель. Размеры задают двумя численными константами целого типа. Первое число задает ширину фоновой картинки и должно быть в диапазоне [1, 800], второе число задает высоту и должно находиться в диапазоне[1, 600].

Пример на описание фоновых картинок:

$Back_picture = <0 0 100> backgrd {фоновая картинка находится в объектеbackgrd.bmp, за ее пределами фон кадра имеет темно-синий цвет;}

$Back_picture = backgrd {фоновая картинка находится в объекте backgrd.bmp, зa ее пределами фон кадра имеет цвет по умолчанию;}

$Back_picture = <255 255 0> 640 480 {фоновая картинка есть прямоугольник желтого цвета (с границей черного цвета) шириной 640 и высотой 480 пикселей, за ее пределами фон кадра имеет желтый цвет;}

$Back_picture = 640 480 {фоновая картинка есть прямоугольник шириной 640 и высотой 480 пикселей с цветом фона по умолчанию (темно-зеленый) и границей черного цвета, за ее пределами фон кадра имеет цвет по умолчанию.}

Элементы отображения могут отсутствовать.

Пример кадра без элементов отображения:

$Frame Кадр_3

Show_if Ресурс_1.Параметр_5 = Свободен

$Back_picture = <0 0 255> backgrd

$End

Этот кадр будет автоматически появляться на экране, если Параметр_5ресурса Ресурс_1 имеет значение "Свободен". Общий фон кадра синий, фоновая картинка хранится в объектеbackgrd.bmp.

Элементы отображения разбивают на множества отображения. Множества бывают условными (элементы множества отображаются только в том случае, если условие показа истинно) и безусловными.

Формат описания условного множества:

Show_if <условие_показа>

{ <элемент_отображения> }

Формат описания безусловного множества:

Show

{ <элемент_отображеня> }

В кадре может быть произвольное количество условных и безусловных множеств. Они могут располагаться в произвольном порядке. Количество и порядок следования элементов отображения произвольны. Условие показа представляет собой логическое выражение. Элемент отображения (спрайт) имеет формат:

<тип_элемента> "["<свойства_элемента> "]"

Тип элемента задают одним из следующих зарезервированных слов:

  • text –текстовый элемент;

  • bitmap –битовая карта;

  • s_bmp– масштабируемая битовая карта;

  • rect – прямоугольник;

  • r_rect– прямоугольник со скругленными углами;

  • linе –отрезок прямой;

  • ellipse– эллипс (окружность);

  • triangr– треугольник.

Порядок записи, количество и смысл свойств элемента зависят от типа элемента. Свойства элементов записываются в прямых скобках и разделяются запятыми.

Первые два свойства элементов всех типов их координаты. Координаты элемента есть координаты в пикселях левого верхнего угла прямоугольника, являющегося границей элемента. Их задают арифметическими выражениями, которые являются относительными, т.е. отсчитываются от левого верхнего угла кадра вправо и вниз. Если результат вычисления арифметического выражения имеет вещественный тип, то он округляется.

Свойствами многих элементов являются также размеры (ширина и высота в пикселях) и цвета. Размеры элемента задаются арифметическими выражениями, вещественные значения округляются до целого числа пикселей. Цвет задается тремя численными константами целого типа, разделенными пробелами и заключенными в угловые скобки. Каждое число должно находиться в диапазоне [0, 255] изадает интенсивность одной из трех цветовых составляющих: первое число красной, второе зеленой, а третье синей.Задавая разные значения цветовых составляющих, можно получить более шестнадцати миллионов цветов. Реальное максимально возможное количество цветов определяется видеоадаптером и режимом его работы. Если видеоадаптер не может изобразить заданный цвет, то системаWindowsзаменяет заданный цвет ближайшим из числа возможных. Фон текстовых элементов и внутренние части фигур могут быть также прозрачными. Для этого необходимо вместо цвета фона записать зарезервированное словоtransparent.

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

Далее рассматриваются элементы различных типов.

Текстовый элемент (text) имеет формат:

text "["<Х_координата>,<Y_координата>,<ширина>,<высота>,

<цвет_фона>,<цвет>,[<способ_ размещения>] <содержимое> "]"

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

"<" сдвинуть к левому краю;

"=" выровнять по центру;

">" сдвинуть к правому краю.

В том случае, если длина выводимой строки больше ширины элемента, строка усекается.

Содержимое элемента описывают одним из следующих способов:

  • арифметическим выражением (выводимая строка представляет собой результат вычисления выражения; это целое либо вещественное число, или имя значения перечислимого типа);

  • строковой константой (выводимой строке присваивается значение строковой константы).

Для изображения строк текста используется системный шрифт Windows.

Пример на описание текстовых элементов:

text [497, 76, 250, 15, <255 255 255>, <204 153 153>,

'Количество студентов в очереди:']

text [650,76, 100, 15, transparent, <255 0 0>,

> Зачет_1.Количество_студентов_в_очереди]

Битовая карта (bitmap) имеет формат:

bitmap "["<X_координата>, <Y_координата>, <имя_объекта_битовой_карты>, <имя_объекта_маски> "]"

Для создания элемента отображения в виде битового образа произвольной формы необходимы два объекта: объект изображения и объект маски. Оба этих объекта должны иметь формат аппаратно-независимой битовой карты (BMP-формат).Они могут быть созданы с помощью графического редактора. Имена этих объектов без типа указывают в описании свойств элемента. Тип объектов должен быть .bmp.

Объект изображения содержит рисунок элемента (спрайта), изображенный на черном фоне. Маска содержит силуэт спрайта. Она черная на белом фоне. Такое сочетание изображения и маски приводит к тому, что в тех областях, где маска черная, будет изображаться рисунок спрайта, а там, где маска белая, будет виден фон, на котором изображается элемент.

Пример на описание элемента типа битовая карта:

bitmap [Дверь.Координата_X, Дверь.Координата_Y, door1, door1msk]

Содержимое объектов door1 и door1msk приведено ниже (маска справа).

При использовании таких изображения и маски на экране будет видна приоткрытая дверь на фоновой картинке кадра. При изменении параметров Дверь.Координата_X и Дверь.Координата_Y дверь будет перемещаться.

Маштабируемая битовая карта (s_bmp) имеет формат:

s_bmp "[" <Х_координата>, <Y_координата>, <ширина>, <высота>, <имя_объекта_битовой_карты>, <имя_объекта_маски> "]"

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

Пример на описание элемента типа масштабируемая битовая карта, в котором исходный битовый образ перемещается по осям и масштабируется по оси X:

s_bmp [ Рис.Координата_X, Рис.Координата_Y, Рис.Координата_X / 50, 40, ring, ringmsk]

Прямоугольник (rect) имеет формат:

rect "[" <Х_координата>, <Y_координата>, <ширина>, <высота>, <цвет_фона>, <цвет> "]"

Этот элемент изображает в заданных координатах прямоугольник заданного размера с указанным цветом границы и заполнения. Стороны прямоугольника параллельны координатным осям. Если координаты или размеры любого графического элемента описаны в виде арифметических выражений, то при изменении их значений элемент будет перемещаться и изменятся в размерах. Граница изображается линией толщиной в один пиксель.

Пример описания прямоугольника:

rect [ 486, 80, 264, 440, transparent, <0 0 0>]

В этом примере изображается прозрачный прямоугольник, верхний левый угол которого расположен в точке (486, 80), длина стороны по оси X равна 264, а по оси Y  440. Граница прямоугольника имеет черный цвет.

Прямоугольник со скругленными углами (r_rect) имеет формат:

r_rect "[" <X_координата>, <Y_координата>, <ширина>, <высота>, <цвет_фона>, <цвет> "]"

Этот элемент описывается так же, как и прямоугольник. Различие в изображении состоит в округлении углов прямоугольника, которое производится дугой окружности с радиусом, равным минимальному из двух размеров прямоугольника, деленному на два.

Отрезок прямой (line) имеет формат:

line "[" <Х_координата_1>, <Y_координата_1>, <Х_координата_2>, <Y_координата_2>, <цвет> "]"

Этот элемент изображает отрезок прямой заданного цвета между двумя точками с указанными координатами. Толщина линии равна одному пикселю.

Эллипс (ellipse) описывается в формате:

ellipse "[" <Х_координата>, <Y_координата>, <ширина>, <высота>, <цвет_фона>, <цвет> "]"

Этот элемент изображает в заданных координатах эллипс с заданными длинами осей с указанным цветом границы и заполнения. Оси эллипса параллельны координатным осям. Координаты задают положение левого верхнего угла описанного прямоугольника со сторонами, параллельными координатным осям. Ширина определяет длину оси эллипса, параллельной оси X, высота  длину оси эллипса, параллельной оси Y. Граница изображается линией толщиной в один пиксель.

Треугольник (triang) имеет формат:

triang "[" <Х_координата_1>, <Y_координата_1>, <Х_координата_2>, <Y_координата_2>, <X_координата_3>, <Y_координата_3>, <цвет_фона>, <цвет> "]"

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

Пример задания множеств отображения:

Show

text [175, 80, 50, 20, <255 255 0>, <0 0 255>,

< Экзамен.Очередь1 ]

text [417, 80, 50, 20, <255 255 0>, <0 0 255>,

< Экзамен.Очередь2 ]

{Очередь за дверью из примера Examen:}

Show_if Экзамен.Очередь1 => 1

bitmap [40, 360, say, saymask]

Show_if Экзамен.Очередь1 => 2

bitmap [41, 370, say, saymask]

Show_if Экзамен.Очередь1 => 3

bitmap [42, 380, say, saymask]

. . . . . .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]