Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
max_Script синтаксис.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
196.1 Кб
Скачать

Простейшие математические операторы и выражения

С числами

4/3 * pi * 2.5^3 -- формула объема сферы радиусом 2.5. Возвращает 49.0874

3 as string -- возвращает “3”

 

Со строками

a = “MAXScript”; b = “ FOREVER”

a + b -- возвращает “ MAXScript FOREVER”

3” as float -- возвращает 3.0

3.56as integer -- возвращает 3

 

Создание случайных чисел

Тип числа зависит от типа первого аргумента в операторе random

random 1 100 -- возвращает случайное целое число между 1 и 100

random 1.0 100 -- возвращает случайное вещественное число между 1 и 100

Числа будут одинаковыми всякий раз при перезагрузке 3ds max. Чтобы избежать этого, можно использовать оператор seed <number>, где <number> это любое целое или вещественное число. Пример: seed 5

 

Приращения

<переменная> += <выражение>              добавляет <выражение> к переменной

<переменная> -= <выражение>               вычитает <выражение> из переменной

<переменная> *= <выражение>              умножает переменную на <выражение>

<переменная> /= <выражение>               делит переменную на <выражение>

Поэтому запись x = x + 1 равносильна записи x += 1

 

Операторы сравнения

<compare_operand> == <compare_operand>         оба операнда равны

<compare_operand> != <compare_operand>          оба операнда не равны

<compare_operand> < <compare_operand>           левый операнд меньше правого

<compare_operand> <= <compare_operand>         левый меньше или равен правому

<compare_operand> > <compare_operand>           левый операнд больше правого

<compare_operand> >= <compare_operand>         левый больше или равен правому

Логические операторы

<logical_operand>     and      <logical_operand>     истина, если истинны оба

<logical_operand>     or         <logical_operand>     истина, если истинен хотя бы один

not       <logical_operand>     истина, если операнд ложен

 

Управляющие конструкции

if <if_expr> then <expr> [else <expr>]

if <if_expr> do <expr>

Результат выполнения выражения <if_expr> должен быть либо истиной (true), либо ложью (false).

Пример 1:

if a > b and a < c do (print d; print e)

if a == b then c = 0

a = (if d == 0 then 0 else a / d)

Пример 2:

if a > b then

            (

            print c

            x = sqrt (c)

            )

else (print d; x = sin (e))

Выражения, находящиеся внутри круглых скобок, образуют блок. Значение последнего выражения в блоке является значением всего блока. Поэтому можно писать, например, так: if a > (y = sin b; sqrt (y*z)) then print c

 

case [ <case_expr> ] of ( <cases> )

Выражение <case_expr> сравнивается с метками выражений <cases>:

<factor>: <expr>

default: <expr>

Пример:

new_width = case obj.width of

            (

            2: copy $Box01

            3: instance $Box01

            default: reference $Box01

)

Выражение после ключевого слова default будет выполнено, если не выполнятся остальные условия. Если default не задано и другие условия не выполнились, выражение case возвращает значение undefined.

Если выражение <case_expr> не задано, метки должны быть булевыми (Boolean) величинами или выражениями, и первая метка, дающая истину, определяет выполняемое выражение <expr>. Пример:

case of

 (

            (a > b): print “a is big”

            (b < c): print “b is little”

            (c <= d*3): ...

default: ...

 )

 

Циклы

do <expr> while <test_expr>               -- форма do

while <test_expr> do <expr>               -- форма while

Циклы while и do повторяют выполнение выражения <expr> до тех пор, пока тестовое выражение <test_expr> не возвратит ложь, т.е. пока оно истинно, они работают. Форма do выполняется минимум один раз, вычисляя тестовое выражение в конце каждого прохода. Форма while вычисляет тестовое выражение в начале каждого прохода и может не выполниться ни разу. Обе формы в качестве своего значения возвращают результат выражения <expr> после последнего удачного прохода. Форма while возвратит значение undefined, если тестовое выражение ложно изначально и ни одного прохода не выполнится.

Пример 1:                               Пример 2:

x = -10                                     do

while x < 0 do                         (

            ( print x                                   exchanged = false

x += 1                                      for i=1 to imax do

)                                               (

                                                            j=i+gap

                                                            if (compare array[j] array[i]) do

                                                                        (swap array[j] array[i];exchanged=true)

                                                            )

                                                )

                                                while exchanged

 

for <var_name> (in | = ) <sequence> (do | collect) <expr>

            Цикл for повторяет определенное число проходов, которое может задаваться диапазоном чисел, временным интервалом или последовательностью определенных величин, таких, как массив или набор выделенных объектов. Переменной с именем <var_name> последовательно присваиваются значения из набора <sequence>, формат которого бывает либо такой: <expr> [where <expr>], либо такой: <expr> to <expr> [by <expr>] [where <expr>]

Примеры:

for i = 1 to 10 do print i -- последовательность чисел

for item in array1 do x = x + item.height -- последовательность элементов массива

for t in 0f to 100f by 5f do ... -- временной интервал (0–100) через каждые 5 фреймов

 

Следующий пример собирает объекты в массив bigones:

bigones = for obj in $box*                 -- для всех объектов, чье имя начинается с box

 where obj.height > 100 collect obj    -- собирать объекты с высотой больше 100

Выражение <expr>, стоящее после ключевого слова where, вычисляется перед каждым проходом и должно возвращать либо true – тогда проход просчитывается, либо false – цикл игнорирует текущий проход и переходит к следующему.

 

 

 

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