仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 739|回复: 7
打印 上一主题 下一主题

[学习教程] 带来一篇FLASH教程完善的loading―完善究竟

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:44:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
此版本基于官方简体中文正式版制作,只需要执行一次快速安装即可使用,包含AdobeFlashProfessionalCS5.5、ExtendScriptToolkitCS5.5、PixelBenderToolkit2.6。
怎样制造loading:

起首要感谢Macromedia的年夜伶俐,供应了很好的两个函数使我们能够做出完善的loading,那就是getBytesLoaded和getBytesTotal。请不要再用你改来改往改了两三年的谁人甚么getFrameLoaded甚么甚么了,我都记不分明怎样拼了。我只想说,Frame的看法将在真实的Interactive-Design中淡化。更别提甚么Scene,那是Flash的败笔!

那末loading怎样事情呢?我们怎样使用这两个函数呢?这里要提到一个主要的观点。就是距离挪用。距离挪用有多种体例,上面枚举出来,并枚举出其在loading制造中的位置和用法,接待增补:

・setInterval体例

写法:

functionloadCheck()
{
varp=getBytesLoaded()/getBytesTotal();
if(p==1)
{
clearInterval(intervalID);//开释距离挪用
gotoAndPlay(someFrame);//入手下手播放
}
}
varinterval=30;//这个数值是革新频次
varintervalID=setInterval(loadCheck,interval);

我团体其实不保举初学者用这类写法。由于良多人简单无视clearInterval,而这个器材被无视失落,是很可怕的!假如你的setInterval没有给实时移除,意味着你将在全部swf的播放过程当中增添一个没有需要的包袱!
并且这类办法很不合适把持MoiveClip的情况(由于初学者会发明MC的路径是个年夜成绩,而loadCheck自己就是个函数,仍是被setInterval挪用的,要在loadCheck中指一个路径出来,挺贫苦的,你不要期望_root,那样会让你的程序不标准;也不要期望this,由于在函数顶用this仿佛不太幻想;最好甚么都不写,但常常你不敢不写),进而做出更好的效果。

・onEnterFrame体例

我最喜好的就是这类办法了。对照便利、直不雅。由于常常我们是要用一个MC表现一个loading的进度,好比,一个进度条,大概更有创意的器材,只要你不克不及想到的,没有你不克不及做到的。

那末事实怎样用呢。起首,把创意定好。然后给你的MC一个实例名字,好比叫做loader_mc。这时候候在timeline上写代码,记着,是timeline而不是MC上。由于如许便于代码一致、便于路径一致、便于办理和寻觅。别为了省几个字母就把代码统统搬到button,mc下面往,然后一个on(press)了事。除非你是在唐塞你的作品;大概你是在为了交功课。


loader_mc.onEnterFrame=function()
{
vargetTar:MovieClip=this._parent;
varp=getTar.getBytesLoaded()/getTar.getBytesTotal();
trace(p);
if(p==1)
{
this.onEnterFrame=null;
gotoAndPlay(someFrame);//入手下手播放
}

}

就这么复杂,记着,在MC的事务函数体外部援用MC,永久是一件很快的事变。由于this就能够指向这个MC自己,经由过程诸如this._parent之类的办法,能够找到你一切的MC!


[1]200605/2181_2.html>[2]200605/2181_3.html>[3]200605/2181_4.html>[4]200605/2181_5.html>[5]200605/2181_6.html>[6]200605/2181_7.html>[7]200605/2181_8.html>[8]200605/2181_2.html>下一页


间接依附于timeline的轮回体例</P>
十分十分十分陈旧的体例了,不先容了。不外你们能够往问问那些一向不喜好本人下手做loading的flasher,他们大概在改的某一个版本就是这个,呵呵。

以上算是对照复杂的。对照简单出成绩的,另有两个。
第1、MovieClipLoader
第2、含有多种V2组件的Loader

读取外地数据介入Flash使用程序部署是一件十分主要和罕见的事情,特别是我们经常必要检测这些数据加载的进度。而MovieClipLoader(下称MCL)类却帮我们年夜年夜简化了这项贫苦事情。别的,它使得我们能猎取更多的必要,并削减代码量。我们能够用一个独自的MovieClip类来载进一个,大概多个外地资本到指定的MC大概层级,大概我们能够为每个加载事情制订分歧的MCL实例。

我决意分两部分来完成这篇教程。起首,我们将先容MCL的基础用法;然后我们将先容怎样利用一个独自的MCL实例来读取外地资本到分歧的MC,而且,我们将到场侦听器工具来介入事情。固然,欠亨过侦听器也能够完成义务,我们临时不先容侦听器,由于如许你会加倍简单了解MCL。

那末,我们起首来大致懂得一下MCL有哪些回调函数,前面也会有具体先容(aw附:回调函数我团体了解就是某一个类组、参数事前断定,具有指定功能的办法)这里能够懂得一下甚么叫做回调函数):

MovieClipLoader工具的回调函数:

事务回调函数(严厉请求数据范例的时分,它们并非办法,后祥):
*MovieClipLoader.onLoadStart()-当加载入手下手的时分触发
*MovieClipLoader.onLoadProgress()-在读取举行中触发
*MovieClipLoader.onLoadInit()-读取资本载进后的第一帧实行完成后触发
*MovieClipLoader.onLoadComplete()-当读取的外地资本已完整下载到当地时触发。
*MovieClipLoader.onLoadError()-当加载外地资本堕落时触发。
*MovieClipLoader.unloadClip()-将加载的外地资本移除或停止一个加载事情。

办法回调函数:

*MovieClipLoader.getProgress(target:Object):Object-读取外地资本的停顿,参数为MC工具(aw附:实在MC这类数据范例也就是一种工具)。前往一个工具,该工具包括两种事前预定好的属性(后祥)

要想好好了解这些回调函数,我们下手实验一下是最好的办法。固然MCL是Flash7以后才有的,以是别忘了公布的时分公布成为7+的版本号。假如间接用FlashPlayer来调试大概会碰到一些成绩,我们保举在扫瞄器中举行调试(团体定见:关于外地资本难以取得情形,好比教导网猎取公网资本,最好不要在IDE中调试)

在我们的例子中,我们将用一个MCL工具来读取分歧的图片,并将它们置进分歧的空MC中。本例中要用到的swf文件和图象源文件将在Actionscript.org找到(团体倡议:实在看完这篇文章要不要源文件没有需要了)

1、创建一个新的Flash文档,并在第1帧输出以下剧本:

_root.traceBox.vScrollPolicy="on";
functionmyTrace(msg)
{
_root.traceBox.text+=msg+newline;
_root.traceBox.vPosition=_root.traceBox.maxVPosition;
}

我们这里是在创建一种跟踪调试机制,调试的(变量)将输入到文本框组件中。这里的办法"myTrace"是事后界说好的一个函数,它匡助我们顺遂完成对某些信息的监控;个中第二句的感化是使文本框随时输入最新监控值。

2、如今从组建库托拽一个TextArea组件进进场景,并赐与符合

200605/2181.html>上一页200605/2181.html>[1][2]200605/2181_3.html>[3]200605/2181_4.html>[4]200605/2181_5.html>[5]200605/2181_6.html>[6]200605/2181_7.html>[7]200605/2181_8.html>[8]200605/2181_3.html>下一页


的巨细,和一个实例称号traceBox(对应下面的剧本)</P>
3、接上去,我们要创建一个新的MC元件。并在场景上部署3个实例,为它们分离定名为myMC1,myMC2,myMC3。我们将把图片大概swf影片装载进进它们,而且,在它们下载到当地后依照需求调剂它们的尺寸。实在,对图片工资地改动尺寸会形成很多欠好的成果,好比锯齿的发生,可是为了让人人懂得onLoadInit事务的利用,我们将会这么做。

4、然后,我们创建一个MCL工具,在第一帧输出以下剧本:

varmyMCL=newMovieClipLoader();//createaninstanceofMovieClipLoader

aw附:这里我想罗索以下,关于Object的翻译。由于上述代码的正文中,老外用的是instance这个词,直译的话,Object是“工具”;Instance代表“实例”。前者更注意于其数据范例,尔后者则更注意于其客不雅存在性。

5.如今我们就能够部署剧本了,在第一帧:

myMCL.onLoadStart=function(targetMC)
{
varloadProgress=myMCL.getProgress(targetMC);
myTrace("Themovieclip"+targetMC+"hasstartedloading");
myTrace("Bytesloadedatstart="+loadProgress.bytesLoaded);
myTrace("Totalbytesloadedatstart="+loadProgress.bytesTotal);
}

这个函数的第一行中声名了一个(工具范例的)变量,明显,这个变量的值由myMCL工具的getProgress办法取得.方才已先容了getProgress办法,这里能够看到,前往的loadProgress.bytesLoaded就是loadProgress工具的bytesLoaded属性.
这里我再乱痪洌何裁捶祷匾桓龆韵螅环祷鼐咛宓闹怠U馐怯性虻摹:祷刂档墓δ苁沟贸绦蛏杓聘油昝溃欢芏嗲榭鱿拢颐且祷氐牟⒎且桓鲋担颐强赡芊祷亓礁龌蛘吒嗟闹担踔了堑氖堇嘈投疾幌嗤U庋挥型ü韵蟮男问嚼捶祷亓恕U馐墙饩鑫侍庾罴虻プ罡咝У姆椒āO旅嫒myTrace就照应了之前我们界说的监控函数,如许就可以看到我们存眷的变量了。

6、我们已为onLoadStart事务部署了响应的事情,接上去我们要为上述其他事务部署事情了。紧接着是onLoadProgress,它承受三个参数:targetMC,loadedBytes,totalBytes。分离代表方针容器MC实例;已读取的体积、整体积。

myMCL.onLoadProgress=function(targetMC,loadedBytes,totalBytes){
myTrace("movieclip:"+targetMC);
myTrace("Bytesloadedatprogresscallback="+loadedBytes);
myTrace("Bytestotalatprogresscallback="+totalBytes);
}

7、我们的onLoadComplete办法仅承受一个参数,它就是容器MC实例。像onLoadStart一样,我们用getProgress办法来前往读取情形。

myMCL.onLoadComplete=function(targetMC)
{
varloadProgress=myMCL.getProgress(targetMC);
myTrace(targetMC+"has

200605/2181_2.html>上一页200605/2181.html>[1]200605/2181_2.html>[2][3]200605/2181_4.html>[4]200605/2181_5.html>[5]200605/2181_6.html>[6]200605/2181_7.html>[7]200605/2181_8.html>[8]200605/2181_4.html>下一页


finishedloading.");
myTrace("Bytesloadedatend="+loadProgress.bytesLoaded);
myTrace("Bytestotalatend="+loadProgress.bytesTotal);
}</P>
8、onLoadInit办法将在一切加载的内容被下载到当地容器MC中以后才入手下手实行。这将使得你能更好的把持加载出去的内容的属性。我选择的图片十分年夜,如许我们能够把读取历程看得加倍明晰,而我也要对已加载的图片尺寸举行修整,让它能全体显现出来。

myMCL.onLoadInit=function(targetMC)
{
myTrace("Movieclip:"+targetMC+"isnowinitialized");
targetMC._width=170;
targetMC._height=170;
}

9、另有一个回调办法onLoadError。假如有毛病产生,它将会被触发。作为一个优异的程序员,部署完美的使用程序的时分,对毛病产生的制止措施是必不成少的!

myMCL.onLoadError=function(targetMC,errorCode)
{
myTrace("ERRORCODE:"+errorCode);
myTrace(targetMC+"Failedtoloaditscontent");
}

10.Wellthatsthehardworkoutoftheway.Nowwejusthavetoloadthefilesintotheirrespectivetargets,usingloadClip,andpassingittwoarguments:thelocationofyourfile,andthedestinationmovieclipforthefiletoloadinto.
10、我们终究将最庞大的事情部署好了。接上去我们只用利用loadClip办法读进我们必要的内容就好了。loadClip办法的两个参数分离是外地资本的地点和容器MC的实例。


myMCL.loadClip("http://www.yourdomain.com/test1.swf","_root.myMC1");
myMCL.loadClip("http://www.yourdomain.com/test2.swf","_root.myMC2");
myMCL.loadClip("http://www.yourdomain.com/pic.jpg","_level0.myMC3");


路径能够选择绝对路径。注重,路径的绝对性也是一个年夜成绩,当SWF在非本路径的HTML中被援用的时分,服从HTML地点的路径!这一点是良多Flash教程都无视的。以是,偶然候相对路径也有相对路径的优点。[路径成绩源文件下载,下载了就一览无余了

一切的调试事情最幸亏扫瞄器中,而非IDE中完成。并且剧本输入体例必需是AS2。
Remember,foreverythingtoworkproperlyyouneedtobetestingthrouhgabrowser(andpreferablyonlinesoyoucanseethefilesloadinginrealtime).YoualsoneedtobeexportingyourcodeasActionScript2.

InthesecondpartofthistutorialImgoingtoshowyouhowto

200605/2181_3.html>上一页200605/2181.html>[1]200605/2181_2.html>[2]200605/2181_3.html>[3][4]200605/2181_5.html>[5]200605/2181_6.html>[6]200605/2181_7.html>[7]200605/2181_8.html>[8]200605/2181_5.html>下一页


usetheMovieClipLoaderclassinareal-worldsituation,inordertosolveacommonproblemwhenassigningeventhandlerstoMovieClipsdynamically.
接上去,我将先容及时挪用MCL的情形。为了能顺应更多的使用,我们常常静态地为MCL制订事情。</P>
aw话外音:偶然候,我们云云写:

1、varmcl:MovieClipLoader=newMovieClipLoader();
2、varmcl=newMovieClipLoader();

发明第一种写法没法为MCL制订onLoadStart等事务办法。这是编译器依据指定变量的数据范例发生的成绩。osflash的一些伴侣给了一些有效的概念,我也发明这个成绩恰好触及到Flash外部的事务呼应机制,无妨先容一下:
Flash的三种事务呼应机制

1、复杂的回调函数,最老的;
2、侦听器,ASBroadcaster,FlashMX时期;
3、事务侦听器,EventDispather,FlashMX2004时期

这里,MCL用的是第二种机制,而整套V2组件则利用最初一套机制。
附:MCL官方声名,注重:上述办法中,仅包括getProgress办法!


intrinsicclassMovieClipLoader
{
functionMovieClipLoader();

functionaddListener(listener:Object):Boolean;
functiongetProgress(target:Object):Object;
functionloadClip(url:String,target:Object):Boolean;
functionremoveListener(listener:Object):Boolean;
functionunloadClip(target:Object):Boolean;
}


团体增补以为:1、2在不严厉请求数据范例的时分能够通用。

上面入手下手先容用侦听器来检测MCL事务的办法。在此之前,我们办理一个最多见的成绩,我们常常会在论坛中看到有人如许发问:

援用:

人人好,我静态地创建了一些MC,并逐一分派给它们一个事务句柄(标记)。然后,我将外地资本读取到它们当中。可是这些分派好的事务句柄都不事情了!
紧接着,提问人一样平常会贴出一对七零八落的代码,并大叫拯救。

那末,我们起首来剖析一下这个毛病产生的缘故原由:当外地资本被载进到一个MC中时,这个MC将会从头初始化。这意味着任何被事后制订好的代码都将付之东流。关于开辟职员已手动在舞台上布置好的MC则并没有相干的贫苦,这是由于任何间接经由过程onClipEvent制订到MC的代码都能幸免被从头初始化。而静态创建的MC则举行上述的“初始化”,由于我们是在运转中给它们设置的事务代码。

我们怎样制止这个成绩呢?实在办法太多了,良多论坛也举行了极其具体的会商,我就未几赘述了。

你如今大概还记得方才我先容的“读取外地数据介入Flash使用程序部署是一件十分主要和罕见的事情,特别是我们经常必要检测这些数据加载的进度”

我们已先容了MCL的几个回调函数,以是这里也不再赘述了。我们如今制造如许一个效果:缩略图标式的图片扫瞄体系。我们将要从内部读取一些JPG图片,将它们放进我们静态部署的MC中。而且我们但愿这些静态创建的MC都具有各自的onPress事务。我们经由过程在MC装载好内部资本以后再为之分派事务。

在我们入手下手之前,我还想提示人人注重一些常常出

200605/2181_4.html>上一页200605/2181.html>[1]200605/2181_2.html>[2]200605/2181_3.html>[3]200605/2181_4.html>[4][5]200605/2181_6.html>[6]200605/2181_7.html>[7]200605/2181_8.html>[8]200605/2181_6.html>下一页


现的疏漏:必定要在公布的时分设置成Flash7+AS2以上的版本;其次,用扫瞄器测试你的效果,而不是IDE;不然你将会失掉奇异的了局。</P>
如今,我们入手下手体例代码,你会发明它比你设想的要复杂很多。

1、新建一个Flash文档。

2、找四张100*100像素的缩略图片。

3、创建一个静态文本框,也许在300*300像素摆布,利用12号字体,并使之实际边框,如许我们更好监测。别忘了设置它为多行的。

4、创建一个100X100像素的矩形,变化为MC,然后将它移进场景。这时候候,他已呈现在库中了。在库中,设置他的链接名为“img”,并使其“在第一帧导出”。实在这个矩形会在内部资本载进的时分被代替,如今只是为了调试便利。

5、在方才安排textBox文本框的层之上新建一层,这一层用于安排我们的代码,先写上:

stop();

6、如今我们界说一个MCL的实例,别的界说一个基础工具,作为我们的侦听器:

myMCL=newMovieClipLoader();//defineMovieClipLoader
myListener=newObject();//definelistener

7、接上去我们用侦听器来侦听onLoadComplete事务,该事务的感化上文已提到了。我们如今把它交给listener工具,而不是MCL实例。固然,终极要把侦听器工具再交回MCL(以侦听其回调函数)的时分,失掉的效果就是我们必要的效果了。

记着,只要当读取终了的时分,对MC部署事务义务才是平安牢靠的!以是,在onLoadComplete被触发的时分才部署这个onPress事务给MC:

myListener.onLoadComplete=function(targetMC){
debug.text+="LOADINGOF"+targetMC
+"COMPLETE"+newline;
targetMC.onPress=function(){
debug.text+=newline
+"targetMC="+targetMC._name;
}
}

注:上述代码中有几行被工资打断,但这其实不影响效果。

你大概已注重到了,MC的实例称号在onLoadComplete被触发的时分是作为一个参数的身份传送给onLoadComplete的,如许我们把持这个MC就十分便利了。好比这里就能够用点击MC来检测事务是不是被乐成部署给MC。

8、如今我们创建一个函数,它包括一个复杂的轮回来部署场景上的MC。而且实时地为每个部署好的MC分派读取外地资本的义务(loadClip办法),代码以下:

functioninitClips(){
for(i=1;i<=4;i++){
this.attachMovie("img","img"+i,i);
this["img"+i]._x=i*110;
myMCL.loadClip("0"+i+".jpg",
this["img"+i]);//codewrapped
}
}

9、到这里基础上就完成了。如今我们剩下的事情就是注册侦听器而且依照需求挪用相干函数、办法,反应到代码上就是以下两行:

myMCL.addListener(myListener);
initClips();

[1]200605/2181_2.html>[2]200605/2181_3.html>[3]200605/2181_4.html>[4]200605/2181_5.html>[5][6]200605/2181_7.html>[7]200605/2181_8.html>[8]200605/2181_7.html>下一页</b>

>注重这里的按次,我们的侦听器工具在挪用initClip()函数之前就被感化于MCL实例了。如今我们的MC的onPress事务能够顺遂事情了,由于当图片被完整读进以后,事务才被分派已往。我们的代码也十分简便。我们不再用为了loading而往制造贫苦的轮回了,MovieClipLoader帮我们完成了一切事情!</P>
附:完全代码以下:


stop();
myMCL=newMovieClipLoader();
myListener=newObject();
myListener.onLoadComplete=function(targetMC)
{
targetMC.onPress=function()
{
trace("pressed");
}
}

functioninitClips()
{
for(i=1;i<=4;i++)
{
this.attachMovie("img","img"+i,i);
this["img"+i]._x=i*110;
myMCL.loadClip(url,this["img"+i]);
}
}
myMCL.addListener(myListener);
initClips();


到此为止,你应当信任MCL的确是一个车载斗量的好器材了吧?

V2,也爱,也恨!这里先容关于含有V2组件项目标loading成绩

V2组件自面世以来就颇受争议,大致归纳综合以下:

长处:

1、界面比V1组件加倍美妙、一致,人机交互形式加倍完美
2、均接纳面向工具剧本部署

弱点:

体积粗笨,开辟一些只用到一两个组件的小使用程序时很为难。

动静机制方面利用EventDispather的动静播送机制,代替原本的AsBroadcast机制。使得刚出来的时分良多人基本不会用。

这里就不会商更多了,先说loading。含有大批v2组件的产物要想见人一定是不克不及不作loading的,好比awsblog右边的谁人blog小贴士。但是每次在loading的时分仿佛城市碰到贫苦。那就是粗笨的体积全体被放到第一帧导出了,如许招致对一些300k之内的,含有v2组件的SWF文件举行远程载进的loading效果变得左支右绌。

办理的举措也不是没有,复杂归纳综合为三个步骤:

1、往失落“Exportinfirstframe”




2、在公布的时分设置一下“Exportframeforclasses”,这一点十分主要!




200605/2181_6.html>上一页200605/2181.html>[1]200605/2181_2.html>[2]200605/2181_3.html>[3]200605/2181_4.html>[4]200605/2181_5.html>[5]200605/2181_6.html>[6][7]200605/2181_8.html>[8]200605/2181_8.html>下一页


</P>
3、关于外地读取的含有V2的swf文件,将容器mc举行以下设置:

loader_mc._lockroot=true;

好了,如今宁神享用出色而粗笨的V2组件吧~!

200605/2181_7.html>上一页200605/2181.html>[1]200605/2181_2.html>[2]200605/2181_3.html>[3]200605/2181_4.html>[4]200605/2181_5.html>[5]200605/2181_6.html>[6]200605/2181_7.html>[7][8]


自从Macromedia在2005年8月发布MacromediaStudio8以来,我们一直在不停地探索关于它的新特性和新功能,因为这次软件升级给我们带来了太多的惊喜。
透明 该用户已被删除
沙发
发表于 2015-1-17 18:32:26 | 只看该作者
富媒体广告的概念:富媒体RichMedia,是由英文翻译而来,从字面上很难理解RichMedia到底是什么。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-24 16:29:42 | 只看该作者
Flash也可以合成简单的JavaScript函数。如果你学过某种脚本语言如JavaScript或者Macromedia的Director Lingo,你会知道这有点令人畏缩。
小魔女 该用户已被删除
地板
发表于 2015-2-2 11:24:37 | 只看该作者
Flash流行的主要原因是它使用了矢量图形(与位图相反)。因为这种图形格式比位图小得多,而且在缩放时对图形质量影响不大,所以很适合对带宽要求很高的Web。
再见西城 该用户已被删除
5#
发表于 2015-2-23 10:26:33 | 只看该作者
目前动画广告在各类电视节目中有着广泛的应用,在影视及广告中占有重要地位。广州形动数码是国内领先的动画设计制作,
海妖 该用户已被删除
6#
发表于 2015-3-7 08:34:12 | 只看该作者
富媒体可应用于各种网络服务中,如网站设计、电子邮件、BANNER、BUTTON、弹出式广告、插播式广告等。  
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-14 20:51:23 | 只看该作者
作为奖赏,你可以使用关键祯动画支持和tweening- 两个最主要的节省时间的方式。本质上,关键祯是动画中显著事件发生的位置。
若天明 该用户已被删除
8#
发表于 2015-3-21 16:19:11 | 只看该作者
一个物体从一个角(关键祯1)移动到另一个角(关键祯2)。然后tweening在关键祯之间填充祯,从而使物体可以在屏幕上优雅地运动。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表