假如一个影片剪辑实例,在开始的时候没有命名实例名称,而以后的某一帧命名了实例名称。那么影片剪辑将会从第一帧到影片结束一直使用系统默认的实例名称,形如:instanceXX,XX是不重复的。
假如一个影片剪辑从它出现的那一帧就被命名了实例名称,那么以后将一直使用这个实例名称,直到给他赋予了新的实例名称。
假如一个影片剪辑(实例名称是MY_MC)的实例出现在第N帧,而在第N+1帧这个影片剪辑被复制了,或者又从库中拖出了相同的影片剪辑。而且这两个影片剪辑的实例名称都被命名为MY_MC,那么在设计时最先被拖进场景的,或者“被”复制的影片剪辑将成为真正的MY_MC实例。
另外一个影片剪辑虽然_name也是MY_MC,但是对这条语句并不会有反映
MY_MC._alpha = 50;
因为它只对设计中首先出现的真正的MY_MC有效果。
假如将“刚才变透明”的“真正的”MY_MC实例的实例名称删除。效果还是一样的因为,刚才说过“假如一个影片剪辑从它出现的那一帧就被命名了实例名称,那么以后将一直使用这个实例名称,直到给他赋予了新的实例名称”因为没有新名字替代,他将一直使用MY_MC这个实例名。而“复制出来的”,或者“后来从库中拖进场景”的实例名也是MY_MC的影片剪辑,他总比不上“刚才变透明”的MY_MC“正宗”。
下面看这条语句:
for (i in _root) {
if (_root[i]._name == "MY_MC") {
trace(_root[i]._alpha);
}
}
输出是 :
100
100
这很轻易理解,以为他们的_name都为MY_MC。我门利用这个性质可以把场景中几个需要输出属性的MC 标记他们的实例名,然后使用for (i in _root) {},来选择性的输出。
再看下面的代码:
for (i in _root) {
if (_root[i]._name == "MY_MC") {
_root[i]._alpha = 0;
}
}
你一定以为所有实例名为MY_MC的影片剪辑都会变成透明,可是结果只有原始的MY_MC变成透明的了。可见无论使不使用循环,都无法把多个相同实例名的影片剪辑同时更改属性。
假如再在场景上拖进几个实例名为“A”的影片剪辑,和几个实例名不设置的影片剪辑(他们在运行时将使用系统默认不重复的实例名)
使用如下代码:
for (i in _root) {
if (_root[i]._name != "MY_MC") {
_root[i]._alpha = 0;
}
}
你将发现:
实例名为A的“没有透明”,
实例名为MY_MC“没有透明”,
使用不重复实例名或者没有设置实例名的“变成透明了”。
总结一下,一般情况下不建议使用相同实例名称的影片剪辑。因为只能获得他们的属性,不能更改他们的属性。FLASH之所以没有限制你使用相同的实例名,应该是 使你在使用for (i in _root) 的时候,可以方便你将某些实例名相同的实例“排除在外”。而不是设置、更改 所有实例名相同的实例。
里面的性质还要自己亲自试试,体会体会的。
以上内容版权归wizim所有,因本人水平有限,难免有错误的地方,欢迎讨论。