maya语言mel文本教学第五课-流程管理(下)
- 格式:doc
- 大小:43.00 KB
- 文档页数:8
第五课流程管理下
公布上一节课的作业答案
请用mel写出, 可以满足条件为 $a大于3并且小于10 或者 $a 大于20并且小于35 并且$a不能等于22 的判断语句
int $a =21;
if (($a>3&&$a<10)||($a>20&&$a<35)&&($a!=22))
{print "ok!";}
else
{print "bad!";}
当然我也看过大家的答案,不一定跟我完全一样,但是也写的不错。
下面我们进行今天的课程内容,今天的课程内容比较多,因此我们明天修课一天,大家把今天的内容好好消化总结,我们后天将继续为大家讲解第六课
---------------------------------------------------------------------------
正文开始:
流程管理下
循环语句
循环语句包括
while
do...while...
for...
for...in.
在循环语句内部使用相关的语句如下
break 跳出
continue 跳出本次
switch...case 开关语句
首先我们先介绍一下while循环语句。while 语句是循环语句中最简单的语句。格式如下
while(条件语句)
{ 操作语句; }
在while语句的运算流程是先判断条件语句是否成立,如果成立的话,执行大括号里面的操作语句。如果不成立的话退出循环语句继续向下执行其他语句的操作。当条件成立,执行大括号里面的操作语句后在返回到条件语句中来进行判断,看是否条件成立,如果条件还成立那么继续执行大括号里面的操作语句。直到条件语句不成立之后退出循环操作,向下执行其他语句。下面我们看一个简单的例子:
如果我们要通过mel计算 1+2+3+4+5+6+7...+100
= ?
该如何操作呢?当然在数学中我们可以使用简单的方法如(1+100)×50。如果我们需要用硬件对其进行逐一计算的话的方法如下
int $a = 1;
int $b = 0;
while($a<101)
{
$b+=$a;
$a++;
}
print $b;
给大家解释一下上面的while循环语句,首先我们定义一个变量$a = 1;再定义一个变量$b,我们到循环语句查看条件是否满足(因为我们设置的变量是整型变量,所以我们要进行从1到100的相加,设定$a<101就是把$a的值控制在了1~100之间)。此时$a等于1小于101,条件成立mel执行大括号里面的操作语句,$b+=$a的意思是,$b当前等于0,加上$a当前等于1。继续向下执行$a++的含义是在$a的基础上加1,此时$a等于2,在回到while傍边的括号里的条件进行判断,看是否满足条件,此时$a等于2仍然满足条件$a<101,所以继续执行下面大括号里面的操作。一直到$a的值等于101的时候,条件语句不成立因为$a已经不小于101,此时循环语句结束,跳出while循环语句向下执行print $b; 我们打印$b的结果为5050。
下面再给大家介绍一下do...while语句,我们先看一个实例
我们还是以 计算 1+...+100=?的操作为例看看如何用 do...while语句表现
int $a = 1;
int $b = 0;
do
{
$b+=$a;
$a++; }
while($a<101);
print $b;
我们可以将do...while循环语句和while循环语句进行对比我们发现,do...while循环语句与while循环语句本质上的区别在于,do...while是先执行操作然后进行判断条件,而while是先执行判断条件后在执行操作。在使用do...while循环语句的时候大家注意要在while后面的括号里写完条件之后要加; 不然mel会提示语法错误。关于do...while,在这里就讲这么多,具体用法以后我们接触到实际例子我会单独为大家讲解。
下面我给大家讲解一下mel中最常用的循环语句 for循环语句和 for...in.循环语句,这是本节课的重点
首先是介绍一下for循环语句,for 循环语句格式如下:
for(初始化命令语句;判断语句;操作语句a)
{ 操作语句b; }
for循环语句的运算方法为 ,首先执行for后面括号里的 初始化命令语句 然后查看后面的
判断语句 是否成立,如果不成立的话就退出for循环,如果成立的话就执行
下面大括号里面的 操作语句b
然后在执行for后面括号里面的 操作语句a(注意操作语句a一般都是增量操作),然后在去执行 判断语句 如果成立在执行 下面大括号里面的 操作语句b 然后执行for后面括号里的 操作语句a 形成一个循环操作,直到 判断语句 条件不成立的时候退出 for循环语句。注意在整个for循环语句中for后面括号里的初始化语句,仅在第一次运算的时候操作,只执行一次。
下面还是以 计算 1+...+100=?的操作为例看看如何用 for 语句表现
int $a;
int $b = 0;
for($a=1; $a<101; $a++)
{ $b+=$a; }
print $b;
为大家解释一下上面的语句操作流程。
首先我们定义了一个整型变量 $a 此时我们并没有对 $a 赋值,此时的$a可以是任何整数。然后我们定义了一个整型变量$b=0;执行for循环语句的操作,在for循环中首先执行初始值将$a赋值为$a = 1; 然后进行判断$a是否小于101,此时$a等于1,小于101,满足$a<101的条件。所以进行下面大括号里面的操作$b+=$a,含义为 $b= $b + $a。就是在原$b的值为,在原$b的基础上加上$a的值。然后执行$a++。$a++的含义为$a=$a+1;。然后在对$a进行判断是否小于101,经过前面的a++的操作,此时$a的值为2,仍然满足$a<101的条件,因此继续执行大括号里面的操作,一直到$a的值为101的时候此时,$a<101的条件不成立,退出for循环操作。此时打印$b的结果为5050。
这就是for循环语句的基本流程。
下面为大家讲解一下在maya中运用最频繁的语句 for...in.循环语句
for...in.循环语句跟前三个我为大家介绍的三种循环语句操作不同,for...in.循环语句不执行判断操作,for...in.循环语句的格式如下
for(变量 in 数组)
{ 操作语句 }
下面我为大家解释一下for...in.循环语句的计算流程。首先我们要注意的一点是在for...in.循环语句中的括号里的第一个变量如果是整型变量的话,那么跟在in后面的数组就是整数数组,如果in前面的变量为浮点变量的话,那么in后面就是浮点数组,同样in前面的变量是字符串变量的话,in后面的数组也应该为字符串数组。在括号里面的 变量in数组 的含义为,变量 是在 数组中的任意数。也就是说将数组中的数字或者字符串逐一放到大括号里面的操作语句中操作一次
因为for...in.这个循环语句用前面的例子不容易理解,下面我将for...in.循环语句中运用到场景操作,以便于大家更好的理解for...in.的实际用法
首先我们在场景里面创建 任意数量的polySphere,并摆放到场景任意的位置中。在前面的课程中我们知道了ls
-sl 这个命令的用法。我们本例中要将任意选择的多个polySphere的Z轴进行缩放为0.5。我们首先使用for循环语句来执行操作,然后在通过for...in.循环语句执行操作。我们进行对比,从而更好的了解for...in.的用法。请看下面的实例
使用for循环语句操作
string $s[] = `ls -sl `;
int $i;
for ($i = 0;$i { setAttr ($s[$i]+".scaleZ") 0.5; } 上面是用for循环语句来统一对polySphere 的Z轴缩放进行了修改。首先我们通过ls -sl 将选择的物体的名字设置成为一个字符串数组。在设置一个整型变量$i。然后我们通过for循环与君进行操作,在这个循环中初始化设置为 $i = 0 判断条件是$i小于所选择的物体的数量,此时$i=1 符合判断条件,因此执行 大括号里面的操作。然后 执行 变量$i加1的操作。注意大括号里面的setAttr 用于我们修改对象属性的时候,这个是一个命令,当我们需要修改物体属性的时候 就将setAttr放在要修改对象的名字前面 要修改的对象名称和修改参数内容要加引号,后面跟修改参数。在前面我们讲过要提取数组中单独某一个元素所使用的方法,在这里不再重复。因为 $s[$i]+".scaleZ" 是一个表达式,里面有加号操作,所以我们需要用括号将这个语句括起来。执行 setAttr ($s[$i]+".scaleZ") 0.5; 这条语句的含义就是将,数组$s中的每个物体的Z轴缩放为0.5。 我们运行这个for的循环语句发现被选择的物体的z轴都做了相应的缩放。 下面我们通过for...in.循环语句的方式来执行相同的操作 string $s[] = `ls -sl `; string $i; for ($i in $s) { setAttr ( $i + ".scaleZ") 0.5; } 大家可以看到我们使用 for...in.循环语句来操作就相对简单很多。 我来给大家解释一下for...in.在这个例子中的计算流程。 string $s[] = `ls -sl `;我们通过ls -sl 将选择的物体的名字设置成为一个字符串数组。 string $i; 我们定义了一个空的字符串变量 for ($i in $s); 我们将字符串变量$i 作为了 字符串变量数组$s中其中的一个字符串 { setAttr ( $i + ".scaleZ") 0.5; } 此时的$i代表了数组$s 中的一个字符串变量。我们将每一个字符串逐一通过for...in. 循环语句扫描操作执行修改 缩放选择物体的Z轴缩放值的命令。 下面跟大家说一下 关于 break(跳出操作) continue(跳出本次操作) 这两个命令的用法 break 是属于完全退出循环操作,也就是说只要是在 break后面的语句完全不执行 continue 只是跳出当前这一次的循环操作,之后还继续执行循环语句 实例如下 string $s[] = `ls -sl `; string $i; for ($i in $s)