MAYA 脚本语言 MEL 系列教程(6)

2019-09-01 10:28

}

在一个case 语句之后,可以有任何语句,包括流控制。为了防止MEL连续地执行下一个case语句,可以使用一个break语句。

在一个switch内,一个break语句使switch语句的其余部分被忽略。 例:break 语句 int $sway = rand(3); switch ($sway) { case 0:

print(\break; case 1:

print(\break; case 2:

while (rand(10) < 7) // These statements print(\print(\break; }

提示:虽然在一个switch语句里的最后的一个case语句不需要一个break语句,因为这是switch的结束, 但加上一个break仍然是个好想法。如果你想要再增加case 给该switch语句,break语句已经在这儿了。 如果你想要该switch继续执行下一个case语句,可以不要break语句。但是,当以后修改这段程序代码时有可能会出现问题。 int $argo = rand(2); switch ($argo) { case 0:

print(\case 1:

print(\break; }

可以用多于一条case语句去执行同一个MEL语句块。如,如果想要使\和\的控制值都执行一些语句,可以写与以下例子相似的程序:

string $mt = rand(2) < 1 ? \string $mp = rand(2) < 1 ? \string $XXz = rand(2) < 1 ? $mt : $mp; switch ($XXz) { case \case \

print(\break;

26

case \case \

print(\break; }

在这个例子中,变量$mt可以是\或者\,变量$mp可以是\或者\。另外,变量$XXz可以是可变量。这意味着$XXz和控制值可以是\、\、\或\。

要说明一个要执行的语句块,即使没有与控制值相匹配的case值,可以使用缺省标号。 该标号可以被定位在switch语句的任何地方,但是它总是出现在所有的case语句的后面。 如果没有缺省标号和没有与控制值相匹配的case值,则该switch语句什么事也不做。 例子:缺省标号

vector $mgb = <<1, 1, 0>>; switch ($mgb) {

case <<0, 1, 1>>:

print(\break;

case <<1, 0, 1>>:

print(\break; default:

print(\break; // <<0, 1, 1>> or <<1, 0, 1>> }

在上述例子中,执行了缺省的case,并显示\。

定义作用(2)

4、环

当某个测试条件为真时条件语句执行语句。而当某个测试条件为真时环语句重复地执行语句。

虽然环允许你在写脚本中进行有效的控制,但是它也是产生问题的根源。语句无休止地重复执行的环会永远没有停止。如,执行\(1);\,Maya会不停止的执行这一行;不要试做它,除非你准备退出Maya。 本节描述三种主要的环语句:while、do-while和for。也描述了环的中断语句:continue和break。 while

一个while环继续执行一些希望执行的语句,一直到某个条件为真时为止。它有以下格式: while (test condition) statement;

如果测试条件为真,Maya便执行该语句。Maya随后再次检测该测试条件。如果测试条件为真,就再次执行该语句。继续这个过程,直到该测试条件为假。这时退出环。 int $files = 5; while ($files > 2)

print(\以上的例子程序的输出如下: There are 5 files left. There are 4 files left. There are 3 files left.

27

上例中当该条件第一次被检测时,files有值5 ,5大于2,产生了一个真条件。 因此,执行显示指令,并将files减量为4。

在这点,测试条件再次由4对files进行判断。测试条件再次为真,因此再执行显示语句,并将files减量为3。然后测试条件再次为真,再执行显示语句,并将files减量为2。这次测试条件为假,因为2不大于2。while语句退出。

当测试条件为真时,如果有多于一行的MEL脚本程序被执行,可以使用分组。 int $t = -10; while ($t < 0) {

print(\$t = $t + 1; }

print(\do-while

一个do-while环非常相似于一个while环,因为两者都执行一些说明的语句,直到某个测试条件为真。但是,do-while环先执行语句,然后检查是否要重复这个环。这就是说该语句至少要执行一次。 一个do-while环有以下格式: do statement;

while (test condition); 注意do-while loop必须以分号(do

print(\while (rand(2));

在以上的例子中,rand(2)是一个在0与2之间的浮点值。这个数转换成一个整数后为0, 1或者2。1 或 2 的值会使该环重复;0 值则退出该环。每次测试条件被评价时,rand(2)可以返回一个不同的数。因此,测试条件测试条件具有大约50%的机会为真;有大约50%的机会为假。 这里是一个使用分组的类似的一个例子: do {

print(\print(\} while (rand(2)); for

你可能常常希望一个具有初始化设置、测试和条件语句的改变的环控制。为此可以使用for环。for环有以下格式:

for (initializer; test condition; change of condition) statement;

初始化只被执行一次,在for环被执行之前。初始化是一条语句,它一般使用于把一个值标注给测试条件中的一个变量。可以使用初始化执行任何语句或者也可以完全地不进行初始化。但是,它不能被用于声明一个变量。

for环在执行语句之前判断测试条件。for环的这一部分完全象while环。事实上,一个for环正是一个具有初始化和条件语句改变的while环。但是,如果缺少了测试条件,测试条件则总是被假定为真,在一个while环中会产生一个错误。当测试条件为真时,该语句被执行;一旦被判断为假,就退出该环。 在环的每一次反复中执行的条件语句的改变可以加在环的最后。典型地,条件语句的改变用于改变一些环

终止。

28

控制变量,虽然你可以对任何语句使用它或者完全不用它。 int $Index;

for ($Index = 0; $Index < 2; $Index++) print(\for ($Index = 0; $Index < 3{

print(\$Index = $Index + 1; }

for (; $Index--for (;

print(\if (rand(5))

print(\else break;

这些例子显示出了当使用for环时一些不同的可能性。在最后的for环中,if else语句被认为是一条单语句。

虽然初始化不能用于声明一个变量,但它可以被用于隐含声明一个变量。 for ($xxx = 0; $xxx < 3; $xxx++) print(\

for环也允许你使用多个初始化或者多个增量器。为此,用逗号(,)把各个初始化和条件语句的改变分离开。 int $nx1, $nx2;

for ($nx1 = 0, $nx2 = 10; $nx1 < $nx2; $nx1++, $nx2--) print(\float $cg = 25.3;

for (; $cg < 93.8; $nx1--, $nx2 = rand(11), $cg *= 1.7) {

print(\print( \} for-in

for-in环是for环的一个引申。它专门工作在阵列中。你可能常常想隐含地通过一个阵列的所有元素。当一个for环需要一个索引变量、初始化、测试条件和增量器时,for-in环只需要一个元素变量。for-in环有以下格式:

for (element in array) statement; 例子: for-in 环 string $car;

string $cars[3] = {\for ($car in $cars)

print(\结果是: I have an NSX.

29

I have a Porsche. I have an Acura. 例子: for loop int $carIndex;

string $cars[3] = {\for ($carIndex = 0; $carIndex < size($cars); $carIndex++) print(\

以上的for环都是等价的,但是for-in环需要的输入较少些。 vector $coordinates[2] = {<<1, 2, 3>>, <<4, 3, 7>>}; for ($coordinate in $coordinates) {

print(\print(\} continue

continue语句都出现在环内。它聚焦在要发生的环的下一次反复,跳过该环的所有其余的语句。 例子:

float $fox = 5;

for ($fox = 0; $fox < 5; $fox++) {

print(\if ($fox > 2) continue;

print(\} 输出是: $fox equals: 0 Got here $fox equals: 1 Got here $fox equals: 2 Got here $fox equals: 3 $fox equals: 4

没有if语句,在该$fox quals: 3 和 $fox equals: 4行之后环也输出Got here。Maya忽略了continue语句直到$fox增加到一个大于2的值。当$fox 成为3 或更大时,continue语句执行并跳过环中其余的语句,显示出got here。 break

break语句立即退出一个环。可以使用一个break语句在所有的环之内。 float $free = 0; while ($free < 10) {

print(\if ($free++ == 3)

30


MAYA 脚本语言 MEL 系列教程(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版初二英语下册1--5单元基础检测

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: