
- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
Литералы
Литералы, или иными словами константы, записанные в тексте программы, могут использоваться, например, для присвоения начальных значений переменным. Поскольку переменные могут содержать данные разных типов, то разных типов могут быть и литералы.
Числовые литералы
MAXScript поддерживает два типа числовых данных – с плавающей точкой, называемые еще вещественными, и целые 32-х битовые. Целые могут быть записаны в десятичной или в шестнадцатеричной форме. Например
0.128
2.56
-0.03
0.2e-8
вещественные числа, а
123
-5
0x12E
целые. Последнее число записано в шестнадцатеричной системе счисления. В этом случае ему предшествует два символа – ноль и малое икс.
Строковые литералы
Строковые литералы используются для записи символьных строк и окружаются двойными кавычками. Например:
“I can’t speak English”
строковый литерал
Для записи в строковом литерале некоторых управляющих символов или тех же двойных кавычек применяется знак обратного слеша - \
\” – двойные кавычки
\n – переход на новую строку
\r – возврат каретки
\t – знак табуляции
\? – вопросительный знак
\* - звездочка
\\ - обратный слеш
\% - знак процента
Чтобы ввести в строковый литерал символ, которого нет на клавиатуре, можно использовать последнее стандартное сочетание с обратным слешем.
\x<две шестнадцатеричные цифры>
Например
text = “Copyright \xA9 2002, Petrov & Co”
вставляет в текст символ ©, шестнадцатеричный код которого – A9. Поскольку в именах файлов часто используются знаки обратного слеша, в MAXScript принято записывать их примерно так
path = “c:\\3dsmax4\\meshes”
хотя допускается заменять два обратных слеша на один прямой и записать тот же литерал так
path = “c:/3dsmax4/meshes”
Литералы времени
Работая с анимацией, трудно обойтись без времени. В MAXScript время измеряется в минутах, секундах, фреймах и тиках (tick). В одной секунде 4800 тиков или тридцать фреймов. Возможны два формата записи времени. Первый может выглядеть примерно так
2.8s – две и восемь десятых секунды
3m5s2f4t – три минуты, пять секунд, два фрейма, четыре тика
73f – семьдесят три фрейма
Второй пишется так – сначала минуты, через двоеточие секунды, через точку фреймы. Тики в такой записи не указываются. Например
2:6.28 – то же самое, что 2m6s28f
0:0.73 – то же самое, что 73f
Литералы имен объектов
Поскольку MAXScript предназначен для работы с объектами, составляющими сцену, логично иметь возможность работы с именами этих объектов и, соответственно, иметь литералы, обозначающие имена объектов. Для этого записывается имя объекта, то самое, которое появляется в списке при выборе объекта в 3ds max, а к нему слева приписывается знак $. Например
$box01
Поскольку объекты часто объединяются в иерархии, для их обозначения применяются такие литералы
$man/torso/hand
то есть данным литералом поименован объект hand, который является дочерним по отношению к объекту torso, который в свою очередь происходит от объекта man.
С помощью литералов имен объектов можно выбрать и целую группу объектов с похожими именами. Для этого используются символы * и ?. Например литерал
$box*
обозначает все объекты, имена которых начинаются с box. При этом звездочку можно ставить не только в конце, но и в любом месте литерала и даже в нескольких местах. Например, такая строка
$*box*
именует все объекты, в имени которых сочетание букв box находится в любом месте имени. Очень удобно использовать символ * при работе с иерархиями объектов. Например, литерал
$man/*
выберет всех прямых потомков объекта man.
Если Вам надо выбрать не только прямых, но всех прочих потомков какого-либо объекта на всех уровнях иерархии, то для этого используют такую запись
$man/…/*
или, что то же самое
$man…*
При этом если надо найти всех потомков, чьи имена начинаются, например, на букву h, то можно написать
$man…h*
Разница между символами * и ? следующая. Если символ * заменяет любую группу символов, то ? любой одиночный символ. Представим себе сцену, в которой содержатся три объекта: box1, box2 и box16. В этом случае скрипт
hide box*
скроет все объекты сцены, а
hide box?
только box1 и box2.
кроме того, существует и один специальный литерал - $. Он означает все выбранные объекты сцены. Например
hide $
скроет все выбранные в данный момент объекты. Однако эту возможность следует использовать с осторожностью, так как в случае, если в сцене нет выбранных объектов, такой скрипт выдаст ошибку. Для работы с выделенными объектами лучше использовать переменную selection. Например
hide selection
выполнит ту же самую работу аккуратнее.
В именах объектов могут использоваться пробелы или специальные символы. В таком случае для написания подобных имен, как и для имен переменных, используются одинарные кавычки. Например
$’Snow man’
При этом в число символов, защищаемых кавычками, не входят * и ?. Поэтому если Вы хотите именовать объекты, в имени которых содержатся эти символы, используйте обратный слеш. Например, имя объекта konjak*** запишется так
$’konjak\*\*\*’
Символ пробела, защищаемый кавычками, может быть заменен символом подчеркивания “_”. Например, приведенные ниже литералы обозначают имя одного и того же объекта
$’Snow Man’
$Snow_Man