主题:  关于attachMovie的问题

黑鸟

职务:普通成员
等级:1
金币:0.0
发贴:27
#12002/6/27 18:21:27
按钮上的脚本
on(realse)
_root.attachMovie(1,2,1000);
with(_root.2){
gotoAndPlay(2);
}
这段代码我随便写的,在flash中我想没有写错的

库中已经输出了mc1

问题是:mc1的第一帧是stop的,假设有十帧,我觉得应该按钮按下去以后,_root中的mc2应该是从它的第二帧开始播放直到结束,
可是实践按钮按下去,就停到了第二帧,不播放mc2了,这是怎么回事??望高手指点。



5D限制级

职务:普通成员
等级:6
金币:10.0
发贴:4970
#22002/6/27 19:44:17
实际上只执行了一条语句
_root.attachMovie(1,2,1000);
然后就去执行被复制的MC(2)里的动作了



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#32002/6/27 20:37:56
在这里一定要注意flash的程序播放的顺序问题
对于attach的mc来说,flash是先播放完成mc外场景的as然后再执行mc内部的as,对于这个例子来说也就是先执行了
gotoAndPlay
然后才执行了
stop
所以mc不会动
在flash中as的执行顺序问题是非常重要的,一般初学者也不是太注意这个问题,下面是5d即将出版的书flash疑难解答百例中关于这个问题的阐述:
(1)同在一个场景下面,同在帧上面的程序,哪个先执行?
我们在场景下面建立两个层,里面分别写上能输出不同语句的程序,我们的程序是:
trace("This is the Layer 1 of _root.");

trace("This is the Layer 2 of _root.");
写好了程序我们调整两个层的位置,然后分别运行,我们会发现,当Layer2在上面一层的时候运行结果如图9.36,先运行的Layer 2层里面的程序:

图9.36 Layer 2在上面时的运行结果
而当我们将Layer 2拖入下面后再执行,其运行结果变成图9.37,先运行的Layer 1上面的程序:

图9.37 Layer 1在上面时的运行结果
由此可见,当在同一场景下面,一帧里面的程序(层上),在上面层的程序总比下面层的程序先执行。
(2)层上与mc上的程序谁先执行?
在flash里面建立一个mc,然后拖出,在上面加入as语句:
onClipEvent (load) {
    trace("This is on mc.");
}
然后我们隐藏掉刚才Layer 2里面的as,这样我们的运行结果是:

图9.38 层上与mc共有as的运行结果
如图9.38是先运行了层里面的程序然后运行了mc里面的程序(如果我们是EnterFrame也是一样的),也许你是以为mc在Layer 1层的下面才后执行的,我们把mc层拖到Layer 1的上面去再运行,发现结果还是如图9.38,所以我们可以下结论就是flash先执行帧上的程序然后执行mc上面的程序。
(3)场景下面和mc里面的程序谁先执行?
我们在上面一步的基础上面再在mc里面的帧上面加上程序:
trace("This is in mc.");
这样我们来判断一下mc里面的程序怎么样执行,如下图就是程序运行结果:

图9.39 mc内加入程序后的运行结果
由此我们可以判断出,flash是先执行帧上面的程序,然后再执行mc上面的程序,然后再执行mc里面的程序,对于一个mc来说也符合这个过程。
(4)同一场景下面,不同mc上面的as怎么执行?
我们再建立另一个mc,取名为mc2,在mc2里面加入程序:
trace("This is in mc2.");
然后拖出mc2单独放在一层里面,在mc2上加入程序:
onClipEvent (load) {
    trace("This is on mc2.");
}
然后我们运行程序,这时候mc2所在的层在mc上面,如图9.40是程序运行结果:

图9.40 mc2在上层的运行结果
是不是有点晕,接着看,我们把mc2拖到mc1的下面,结果如图9.41:

图9.41 mc2在下层时候的运行结果
从两个运行结果可以看出,越在下层的mc越先加载,如果我们把load触发改成EnterFrame的话,运行结果又有变化,如图9.42是mc2在下面时候的运行结果:

图9.42 EnterFrame触发mc2在下面的运行结果

有这个程序的运行结果我们才真正看出不同mc上的程序的执行顺序,在mc加载的时候,下面的mc先加载完成,并且运行mc内部的程序,然后当加载完成后,mc上面的程序又按照上层先执行的规则来执行。下面还有个问题就是如果在mc里面还有mc上面又as,那在什么时候执行呢?我们在mc里面拖入一个mc2,然后加上输出程序,如图9.43的结果我们可以证明我们的结论就是加载的时候运行完成所有的mc内部的as。

图9.43 mc内部mc2上面的程序运行
(5)在同一层里面的mc的程序按什么顺序执行?
在上一步的基础上面,我们把mc与mc2放在同一个层里面,我们先拖入mc,然后拖入mc2(应该是mc2遮挡mc1),运行发现运行结果与图9.43相同,如果我们我们先拖入mc2后突入mc的结果与图9.42相同,由此可以看出,在同一层里面的mc也是下面的先加载,上面的mc上的程序先执行(利用Modify工具修改上下关系无效)。

编辑历史:[这消息被goldgoat编辑过(编辑时间2002-06-28 08:23:38)]
[这消息被goldgoat编辑过(编辑时间2002-06-28 08:26:00)]

5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

黑鸟

职务:普通成员
等级:1
金币:0.0
发贴:27
#42002/6/27 20:50:12
呵呵,受益匪浅那,谢谢各位了。



黑鸟

职务:普通成员
等级:1
金币:0.0
发贴:27
#52002/6/27 20:58:04
对了,这些都是从哪里学来的呢?难道是你们自己琢磨出来的么??flash的帮助没有这么详细的啊?
还有哪些flash的高级教程的站点??斑竹能推荐些么??
除了
www.flashkit.com
www.were-here.com
www.ultrashock.com
这几个是我常去的,可你上面讲的我根本就没有接触过啊

编辑历史:[这消息被黑鸟编辑过(编辑时间2002-06-27 21:00:13)]


金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#62002/6/27 21:16:57
这些都是我在具体使用过程中积累的经验


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

黑鸟

职务:普通成员
等级:1
金币:0.0
发贴:27
#72002/6/27 22:24:26
我弄了一个下午都没有搞懂啊,真是感激你啊!
那还有什么经验呢??什么时候把你这些经验做个总结啊。
对了,上面提到的那本书什么时候出啊,邮购的么??



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#82002/6/27 23:42:03
山羊写得好!加分

美中不足是没看见图呀 ,快贴上吧



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#92002/6/28 8:27:09
图已经贴上了,大家这回看清楚了


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

仇笑天

职务:普通成员
等级:1
金币:0.0
发贴:34
#102002/7/2 16:16:30
除了“高”我没有话要说。