庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>媒体动画>Director>基础教程>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

Shockwave 预载技术(1)

 作者:本站收集   日期:2005-6-22
字号选择〖 〗/ 双击滚屏 单击停止   
Shockwave 预载技术
   原著:Lingoworkshop
   翻译:alphachi

   当我们要预载一个Shockwave影片时,通常需要做到:(1)指定预载元素的URL;(2)了解预载工作的当前状态;(3)知道预载何时结束。因此本教程的第一部分将会创建一个“Preloader”剧本,用来从一个指定的URL预载文件。预载工作或许要花一些时间,所以我们将创建某种“进度条”,告诉用户离下载完成还有多长时间。本教程的第二部分将对创建动态进度条的方法进行介绍。

第一部分:“Preloader”父代剧本

   preloadNetThing()函数在Lingo词典中的解释如下:“将一个文件从Internet预载到本地缓存,以便稍候能够无延迟地使用。”此函数会返回一个网络ID号,但不会停止影片的播放。

   除了开始下载进程之外,preloadNetThing()函数单独不会做任何事情。我们可以使用getStreamStatus(ID)知道已下载了多少字节,还可以使用netDone(ID)检测网络操作是否已经完成。一般情况下,我们可以在任何时候调用这些函数,甚至在超时对象的配合下使整个过程更加容易。无需在一个全局变量中存储此网络ID,也不用在各处安插用于监测影片运行状态的剧本,我们只需创建一个简洁的自包容剧本即可开始下载并监视其进度。考虑下面这个名为“Preloader”的父代剧本:

"Preloader" Parent Script (v.1)

property myNetID

on new ( me , netAddress)
   myNetID = preloadNetThing (netAddress)
   aTimerObj = timeout ( me . string ). new ( 100 , # Timer_CheckProgress, me )
end

on Timer_CheckProgress ( me , aTimer)
   finished = netDone (myNetID)
if finished then
put "All done!!"
     aTimer. forget ()
else put "Still downloading..."
end

   当影片运行时,在消息窗口中输入下面的代码来创建此剧本的一个新的实例:

script ( "Preloader" ). new ( "http://www.lingoworkshop.com/Tutorials/Preloader/Main.dcr" )

   新的对象一旦被创建,将会调用preloadNetThing()函数,它使用指定的URL作为一个参数。此函数返回的网络ID被存储在一个名为“myNetID”的属性变量中。接下来,一个超时对象会被创建,它会每100毫秒调用一次此对象的Timer_CheckProgress处理程序。

   此剧本中的new处理程序不会像平时那样返回对象的引用(参数“me”),这是由于对象需要一个持久的引用以保持其活动状态,否则Director会认为已经不再需要此对象而将其从内存中移除。在这个例子中,超时对象保存了此对象的一个引用,因此我们也无需在其他任何地方二次存储了。

   当Timer_CheckProgress处理程序被超时对象调用时,“Preloader”对象将使用netDone(ID)检测预载是否已经完成。一旦完成,它便利用被作为参数传递给超时对象的引用去掉超时对象本身(超时对象总是将一个引用发送给自己作为参数)。“Preloader”对象去掉超时对象时,超时对象便被破坏了——而由于超时对象掌握着“Preloader”对象唯一的引用,此时“Preloader”对象自然也就被破坏了。

   这样一来,“Preloader”父代剧本便拥有了创建简洁的自包容对象的能力,而这些对象能够预载文件并在任务完成后破坏自己。下一步我们将让对象拥有彼此进行交互的能力。

   为了能够只需少量改动即可将其用于各种项目,我们需要让剧本尽可能的一般化。可以在返回调用处理程序和作为起始参数指定的目标处创建一个“Callback System”,考虑“Preloader”父代剧本的下面这个版本:

"Preloader" Parent Script (v.2)

property myNetID, myCallBackObj, myCompletionMsg

on new ( me , netAddress, CallBackObj, CompletionMsg)
   myCallBackObj = CallBackObj
   myCompletionMsg = CompletionMsg
   myNetID = preloadNetThing (netAddress)
   aTimerObj = timeout ( me . string ). new ( 100 , # Timer_CheckProgress, me )
end

on Timer_CheckProgress ( me , aTimer)
   finished = netDone (myNetID)
if finished then
     aTimer. forget ()
call (myCompletionMsg, [myCallBackObj])
else put "Still downloading..."
end


   这个版本添加了两个起始参数——一个是对象的引用,预载完成时我们将向其发送一个消息;另一个是发送此消息时使用的处理程序名称。当预载完成时,“Preloader”剧本将调用目标对象中的这个处理程序。要想了解整个工作过程,可以创建一个附带下面这个名为“PreloaderInterface”的行为的角色:

on beginSprite me
if the runMode = "Author" then clearcache ()
   urlToLoad = "http://www.lingoworkshop.com/Tutorials/Preloader/Main.dcr"
script ( "Preloader" ). new (urlToLoad, me , # mHandlePreloadCompletion)
end

on mHandlePreloadCompletion ( me )
alert "All Done"
end

   在角色被点击时,此行为将创建一个“Preloader”剧本的新的实例,然后连同特定的处理程序名称一起,将一个引用传递给这个行为(参数“me”)。当预载完成时,“Preloader”对象将调用此行为的处理程序。
上一篇:Shockwave 预载技术(2)    下一篇:Director 编写自己的行为(续)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-6-22
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿