[url]http://sban.biz/386[/url]
Flash Player 10更改了9的异步跳桢机制,这比开发者带来极大方便,利用这个改进,或许可以在AS3中实现阻塞编程。
1,Flash Player 9中的跳桢问题
Flash Player 9应当退出历史舞台了,余不待说,仅是异步跳桢这一个理由便充分了。在Flash Player 9中,以下代码将返回null:
// go to a specific frame where myDisplayObject is located
container.gotoAndStop ( 25 );
// output : null
trace( container.myDisplayObject );//该对象位于第25桢中
而在Flash Player 10中,它却可以返回实例。
2,另一个Flash Player 9的关于gotoAndStop的bug
设主场景中有一mc,此mc中有两桢,第二桢代码为:
trace(2)
主场景第一桢代码为:
mc.gotoAndStop(2);
毫无疑问,输出应该是:
2
然而实际却是:
2
2
这是Flash Player 9的一个bug,在Flash Player 10中不存在这个问题。
3,Flash Player 9与10的跳桢区别
Flash Player 9的跳桢是异步的,而10的跳桢却是同步的。
当gotoAndStop发生时:
[list]
[*]Flash Player 9 [*]Flash Player 10
[*]对比桢差异,移除所有非动态添加的、在新桢中不存在的对象,移动播放头 [*]对比桢差异,移除所有非动态添加的、在新桢中不存在的对象 [*]非动态:非代码添加
[*]执行gotoAndStop之后代码 [*]添加静态对象,执行桢代码,移动播放头
[*]… [*]执行gotoAndStop之后代码
[*] 在一代代码执行周期中,在enterFrame事件监听中,添加静态对象,执行桢代码 [*]
[/list]
4,Flash Player如何比对静态对象是否相同
1) 如果静态对象在新桢中没有新的关键桢,则一定保留
2) 如果静态对象在新桢中有新的关键桢,但该对象未与任何类关联,则保留,否则移除
5,两个版本跳桢的不同对桢周期的影响
在Flash Player一个完整的桢周期中,共做两件事情:执行代码与渲染,又细分为五小步:
1) Player事件调度 – 比如Timer事件,鼠标事件,ENTER_FRAME事件,URLLoader事件等等。
2) 用户代码执行 – 所有侦听上一步相应事件的代码被执行。
3) RENDER事件调度 – 在用户代码执行期间调用stage.invalidate()会触发这一特殊事件。
4) 最后的用户代码执行 – 侦听上述第三步特殊事件的用户代码此时被执行。
5) Player更改显示列表。
在第2小步时,在Flash Player 9中,包括执行桢代码,这是由对enterFrame监听引起的;而在Flash Player 10中,同样的桢代码是在第1小步内执行完成的。Flash Player 10对跳桢的改进有利于减少桢周期中代码执行的环节。
Flash Player 10更改了9的异步跳桢机制,这比开发者带来极大方便,利用这个改进,或许可以在AS3中实现阻塞编程。
1,Flash Player 9中的跳桢问题
Flash Player 9应当退出历史舞台了,余不待说,仅是异步跳桢这一个理由便充分了。在Flash Player 9中,以下代码将返回null:
// go to a specific frame where myDisplayObject is located
container.gotoAndStop ( 25 );
// output : null
trace( container.myDisplayObject );//该对象位于第25桢中
而在Flash Player 10中,它却可以返回实例。
2,另一个Flash Player 9的关于gotoAndStop的bug
设主场景中有一mc,此mc中有两桢,第二桢代码为:
trace(2)
主场景第一桢代码为:
mc.gotoAndStop(2);
毫无疑问,输出应该是:
2
然而实际却是:
2
2
这是Flash Player 9的一个bug,在Flash Player 10中不存在这个问题。
3,Flash Player 9与10的跳桢区别
Flash Player 9的跳桢是异步的,而10的跳桢却是同步的。
当gotoAndStop发生时:
[list]
[*]Flash Player 9 [*]Flash Player 10
[*]对比桢差异,移除所有非动态添加的、在新桢中不存在的对象,移动播放头 [*]对比桢差异,移除所有非动态添加的、在新桢中不存在的对象 [*]非动态:非代码添加
[*]执行gotoAndStop之后代码 [*]添加静态对象,执行桢代码,移动播放头
[*]… [*]执行gotoAndStop之后代码
[*] 在一代代码执行周期中,在enterFrame事件监听中,添加静态对象,执行桢代码 [*]
[/list]
4,Flash Player如何比对静态对象是否相同
1) 如果静态对象在新桢中没有新的关键桢,则一定保留
2) 如果静态对象在新桢中有新的关键桢,但该对象未与任何类关联,则保留,否则移除
5,两个版本跳桢的不同对桢周期的影响
在Flash Player一个完整的桢周期中,共做两件事情:执行代码与渲染,又细分为五小步:
1) Player事件调度 – 比如Timer事件,鼠标事件,ENTER_FRAME事件,URLLoader事件等等。
2) 用户代码执行 – 所有侦听上一步相应事件的代码被执行。
3) RENDER事件调度 – 在用户代码执行期间调用stage.invalidate()会触发这一特殊事件。
4) 最后的用户代码执行 – 侦听上述第三步特殊事件的用户代码此时被执行。
5) Player更改显示列表。
在第2小步时,在Flash Player 9中,包括执行桢代码,这是由对enterFrame监听引起的;而在Flash Player 10中,同样的桢代码是在第1小步内执行完成的。Flash Player 10对跳桢的改进有利于减少桢周期中代码执行的环节。