Главная | iClone 3.1
Анимация поддерживает репутацию страны
Предыдущая Следующая
Убедившись в возможности автоматизации конкретных операций с помощью сценария MAXScript, можно приступать к написанию надежного сценария с соответствующими элементами пользовательского интерфейса.
Разархивируйте файл Lightcle.zip, находящийся в папке CHAPTER22/MAXSCRIPT на сопровождающем эту книгу CD-ROM, а затем файл LightCleaner_vlOOa.zip (буква а в конце имени этого файла означает, что это не исходный, а несколько упрощенный для данной главы сценарий LightCleaner). После этого загрузите файл сценария в редактор текста Notepad или TextPad и продолжите работу над ним, используя материал этой главы. Данный сценарий содержит следующий код:
-- Функции --fn turn_on = (
if $ == undefined then
(MessageBoxi "Please select at least one object" Btitle:"LightCleaner") else
(
for i = 1 to selection. count do
(
if superclassof selection[i] — light then (
selection[i].showNearAtten = true
selection[i].showFarAtten = true
if classof selection[i] = targetSpot or
classof selection[i] = freeSpot or
classof selection[i] ==
^TargetDirectionallight or
classof selection[i] = Directionallight
^then
selection[i].showCone = true )
)
)
)
Глава 22. Создание сценариев для специализированной анимации 695
fn turn_off =
(
if $ = undefined then
(MessageBox "Please select at least one object"
Ktitle:"LightCleaner")
else
(
for i = 1 to selection, count do
(
if superclassof selection[i] == light then <
selection[i].showNearAtten = false
selection[i].showFarAtten = false
if classof selection[i] = targetSpot or
classof selection[i] == freeSpot or
classof selection[i] ==
KTargetDirectionallight or
classof selection[i] == Directionallight
Kthen
selection[i].showCone = false )
)
)
)
-- Сценарий --
rollout lightcleaner_rollout "LightCleaner"
(
button button_on "On" width:150 align:#center toolTip:"On" button button_off "Off" width:150 align:#center toolTip:"Off" on button__on pressed do turn_on () on button__off pressed do turn_off ()
)
lightcleaner_floater = newRolloutFloater "LightCleaner vl.00" 230 123
addRollout lightcleaner_rollout lightcleaner_floater
Разделим данный сценарий на ряд логических частей.
Здесь имеются две функции turn_off и turn_on. В данный момент принцип их действия особого значения не имеет, поэтому их можно представить себе в виде некоторою черного ящика с пользовательской информацией на входе и обработанными функцией данными на выходе, причем для пользователя важен результат выполнения функции, а не то, как он получается. В частности, в результате выполнения функции turn_offрежим отображения диапазона ослабления всех источников света отключается, а в результате выполнения функции turoon — включается.
696 Часть VI. Анимация
Далее следует определение свитка, который появляется на перемешаемой панели. В этом свитке должны быть две кнопки button_on и button_off. Затем следуют две команды, определяющие выполнение функции turn_on при нажатии кнопки buttonon, а также функции turn_ofT при нажатии кнопки button_off. И, наконец, данный сценарий завершается определением перемещаемой панели. Напомним, что свиток (rollout) представляет собой лишь набор кнопок и других элементов пользовательского интерфейса, а перемещаемая панель (floater) — окно, которое может содержать несколько свитков и перемещаться по всему интерфейсу. В нашем случае перемещаемая панель содержит один свиток, поэтому сначала определяется эта панель, а затем в нее вводится свиток. Вот вкратце и все содержание данного сценария.
Символический код
В символическом коде настоящий сценарий может иметь следующий вид: Функция turn_off Функция turn_on Свиток lightcleaner_rollout (
Кнопка button_off Кнопка button_on
При нажатии кнопки button off выполнить функцию turn off При нажатии кнопки button_on выполнить функцию turn_on )
Создать перемещаемую панель lightcleaner_floater
Ввести свиток lightcleaner_rollout в перемещаемую панель 1ightcleaner_floater
Такой код помогает представить в символическом виде основные функции сценария, а затем перейти к написанию конкретного кода.
А теперь обратимся к более подробному анализу функций turn_on и turn_off.
Функции
Функции относятся к наиболее важным частям сценария, и поэтому должны быть представлены в самом общем виде. Допустим, например, что имеется функция ran num. О коде этой функции пользователю необходимо знать лишь то, что она дает произвольное число, а как это она делает, особого значения не имеет. Ниже приведен пример такой функции:
Предыдущая Следующая