Переходы MEL

Переходы   (branching) ,  или  условные  операторы,   позволяют  задать  вопрос и   в   за­ висимости   от  полученного   ответа  принят ь  решение,  какие  действия следует   пред­ принять.   (Фактическ и    оператор    fo r содержит  условный   оператор    в    его   части проверяемое_значение.)    Модифицируем  предыдущий   сценарий   и      поместим   в     цикл for условный оператор if, содержащий выражения:

for ($i = 1; $i <= 5; $i++){ polyCub e -n box ;

if ($i<=3){

mov e -r 0 (2 => $i) 0;

}

else{

mov e -r (2 => $i) 0 0;

}

}

Что  произойдет при  выполнении  этих команд?   Первые три  куба  будут  расположены

один над другим по оси Y (пока значение переменной  $i меньше или равно 3), а послед-

ние  два  распределены по оси  X  (когда переменная  $i  имеет значения 4 и   5, которые больше, чем 3). Результат выполнения этого сценария представлен на рис. 16.8.

Рис. 16.8. Создание и перемещение ку­ бов с использованием команд for и if

В абстрактном виде оператор if имеет следующий  синтаксис: if   (проверка) {

команды;

}

els e   i f   (проверка) {

команды;

}

else {

команды;

}

Для работы  оператора  i f  операторы  els e     i f  и   els e  необязательны.  Оператор  els e

if  позволяет осуществить  столько проверок, сколько  необходимо (т.е. условный  опера­ тор  if  может иметь множество операторов  els e    if) .  Это позволяет  организовать  про­ верку нескольких возможных вариантов  в  одном большом  условном  операторе. В таких случаях последним элементом всегда должен быть  оператор else , это "стандартный" от­ вет, если  никакие  другие условия  не  удовлетворяются.  Все команды, расположенные в разделах if , els e    if  и  else ,  следует заключать в  фигурные скобки  ({}) . При  желании код создания перемещения  кубов  можно усовершенствовать с помощью оператора els e if  следующим образом:

fo r  ($ i  =  1; $ i  <=  10 ; $ i  +  +  )  {

polyCub e    – n   box ;

i f    ($ i   <=   3){

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

}

els e   if   ($ i   >   3 &&  $i   <=   6){

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

}

else {

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

}

}

Здесь кубы выстраиваются по оси  Y, если  значение переменной $i меньше или  равно

3, по оси Z, если оно находится между 4 и б, и по оси X, если оно больше 6.

Если  после оператора if  располагается только  одна команда,  нужды в  фигурных  скобках нет.  Будьте внимательны  при  расстановке отступа в  соответствии  с фигурными  скобками, пропуск скобки  и  неверное выравнивание   в многоступенчатом операторе if   els e способ­ ны привести к длительной отладке.

Еще   один  способ   организации   перехода   заключается   в     применении    оператора switch .  Оператор  switc h создает разветвление  потока выполнения  кода  на основании значения управляющей переменной.  Управляющая переменная  может  иметь тип   int , float ,  strin g или  vector .  Если  значение управляющей  переменной равно одному и з значений, указанных в  разделах cas e (они должны иметь тот же тип, что и  управляющая переменная), то выполняются операторы,  начиная с этого раздела case . Ниже приведен базовый синтаксис оператора switch ,

switc h    (управление)

{

cas e    значение1: оператор1; break ;

cas e    значение2: оператор2; break ;

cas e    значение3: операторЗ; break ;

default : оператор4; break ;

}

Оператор  brea k  используется для  выхода из  оператора  switc h  и   предотвращения

выполнения операторов  последующих разделов  case . Оператор defaul t  выполняется в случае, если  значение ни  одного из  предыдущих  разделов  cas e  не  соответствует значе­ нию  управляющей переменной. Оператор defaul t  необязателен. Оператор brea k так­ же можно пропустить, если  необходимо организовать  выполнение операторов от данного раздела  cas e  и   следующих  разделов   case ,  расположенных  ниже. (Это  довольно не­ обычно,  но  иногда  применяется, поэтому  всегда используйте оператор break ,  если  не уверены  абсолютно  точно,   что  в   данном  случае  он  не  нужен.)

Рассмотрим  применение оператора switc h в  примере с кубами:

fo r   ($ i   =   0; $i   <   3;  $i++) { polyCub e    – n   box ; switch($i) {

cas e   0 :

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

break ;

cas e    1 :

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

break ;

cas e   2 :

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

default :

break ;

}

}

Здесь создаются три  куба, каждый из  которых перемещается по другой оси. Когда  зна­ чение переменной $i равно 0, происходит перемещение  по оси  X, когда  1 — по  оси  Y, а когда 2 — по оси Z. Значение 3 переменной $i соответствует условию раздела default, в котором нет операторов перемещения нового куба (поэтому куб и не перемещается).

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

По теме:

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

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