Циклы в MEL

Теперь исследуем циклы (looping).  Предположим, что,  используя команды  MEL,  на сцене необходимо создать пять кубов. Команду polyCube -n   box можно,  конечно, вве­ сти пять раз вручную, но можно создать цикл for, который выполнит эту задачу автома­ тически. Чтобы создать пять кубов, можно использовать следующий код:

in t    $i ;

fo r   ($ i   =   1; $i   <=   5;  $i++) { polyCub e    – n   box1 ;

}

Вот все пять кубов  от box l до Ьох5. (Чтобы рассмотреть  кубы  как  отдельные  объек­

ты,  их  следует  растащить по  сторонам.   Вскоре  это  действие будет  автоматизировано.) Обратите внимание  на то,  что  после  оператора  fo r  нет  точки  с  запятой:   MEL  ожидает, что  после  него  расположена  одна  или  несколько   команд  (в  фигурных скобках   {}),  по­ этому  точка  с  запятой  здесь  не  нужна.   Кроме  того,  закрывающая  фигурная скобка   (} ) выступает в  роли  точки  с запятой,  поэтому  в  последней  строке  точка  с запятой  тоже  не нужна.  Цикл fo r имеет  следующий синтаксис:

fo r     (начальное_значение;  проверяемое_значение;  приращение)

Начальное_значение— это  то  значение, которое  имеет переменная-счетчик  в  начале. Проверяемое_значение — это логический оператор  (возвращающий значение  да  или  нет, 1 или  0, Вкл.  или Выкл.,  tru e или  false , истин а или ложь), который определяет,  следует ли  продолжать  итерации  цикла. (См. документацию Maya  по логическим (Boolean)  операто­ рам.)  Приращение (или  инкремент) — это величина,  на  которую  изменяется значение счет­ чика ($i+ + — сокращение выражения "увеличить при каждом  цикле значение переменной  $i на 1"). Цикл fo r в предыдущем  примере можно  прочитать следующим образом:  присвоить сначала переменной  i значение 1, пока ее значение меньше или равно 5, увеличивать его на 1 после каждого  цикла выполнения операторов в фигурных скобках.

Чтобы   сделать   этот  цикл  немного   больше   полезным,   заставим его  смешать   кубы вдоль оси  Y по мере их создания, чтобы  они  не накладывались друг на друга:

fo r    ($ i   =   1 ; $i< =   5 ;  $i++) { polyCub e    – n    box ;

move   -r   0 (2 => $i )    0;

}

Теперь,  по  мере  создания кубов, каждый  из  них будет  переме­

щен  от  места  создания на расстояние, вдвое большее  значения  пе­ ременной  $i .  Как  видно на  рис. 16.7,  кубы  больше  не  накладыва­ ются друг на друга.

В языке  ME L существует несколько  других типов  циклов.  Син­ таксис и  пример каждого  из них приведен в  следующих разделах.

Ц ИК Л  for  –  in

Синтаксис

fo r     {элемент массива){ опера торы;

}

Пример                                                                                                                     Рис. 16.7.  Кубы,  соз-

strin g   $student ;                                                                                                    данные  и  перемещае- strin g   $clas s [3] =   ("Brian" ,    "Nathan" ,    "Josh"} ;                 мые сценарием MEL fo r     ($studen t    i n    $class) {

prin t     ($studen t   +    "\n") ;       / /    \ n   =   нова я   строк а

}

Результат

Bria n Natha n Jos h

Цикл   while

Синтаксис

while   [условие     проверки)    { опера    торы;

}

Пример

int $i = 0; whil e ($i < 5){

print $i;

$i++;   // инкремен т i на 1

}

Результат

01234

ЦИК Л  do   –   while

Синтаксис do   {

опера   торы;

}  whil e  (условие    проверки)   ,-

Пример

int $i = 5; do {

print $i;

$i— ;    // декремен т i на 1

} while($ i > 0) ;

Результат

54321

Источник: Кундерт-Гиббс, Джон,  Ларкинс, Майк,  Деракшани, Дариус, Кунзендорф, Эрик,  и др., Освоение Maya  8.5.:  Пер.  с англ.  – М.:  ООО  «И.Д.  Вильямс», 2007.  – 928  с.:  ил.

По теме:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий