<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[爱玲说]]></title>
<description><![CDATA[ゞ橙脃oΟ蓅垳や]]></description>
<link>http://43334728.qzone.qq.com</link>
<lastBuildDate>Thu, 26 Nov 2009 12:01:42 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Sat, 13 Jun 2009 02:03:08 GMT</pubDate>

<item>
<title><![CDATA[loading 的详细制作]]></title>
<link>http://43334728.qzone.qq.com/blog/1244858588</link>
<description><![CDATA[<span style="font-weight:bold"><wbr />精确的Loading设计</span><wbr />上述的哪个Loading程序有一些比较简单，虽然它已经达到了预载的效果，但是对于要求比较高的朋友可能就不能满足了。哪么请看图4-8，这个预载动画将使用到比较多的函数，使动画预载看起来更加的人性化。<br><div style="text-align:center;"><wbr /><a href="http://www.blueidea.com/articleimg/2004/03/1711/08.gif" target="_blank"><img style="width:500px;height:235px;border:0;" src="http://www.blueidea.com/articleimg/2004/03/1711/08.gif" /></a><wbr /><br>图4-8 高级的Loading程序界面</div><span style="font-weight:bold"><wbr />制作过程</span><wbr />：<br><span style="font-weight:bold"><wbr />步骤一</span><wbr />、打开刚才我们设计的Loading动画。这个Loading程序将是在上述Loading的基础上修改而成的。<br><span style="font-weight:bold"><wbr />步骤二</span><wbr />、使用文字工具，并且使用Window|Panels|Character命令，打开Character字符面板，将字号设置为25，字色为黑色。如图4-9所示。<br><div style="text-align:center;"><wbr /><a href="http://www.blueidea.com/articleimg/2004/03/1711/09.gif" target="_blank"><img style="width:217px;height:154px;border:0;" src="http://www.blueidea.com/articleimg/2004/03/1711/09.gif" /></a><wbr /><br>图4-9 Character面板的设置</div><span style="font-weight:bold"><wbr />步骤三</span><wbr />、将文字按图4-8这样式输入在界面里。然后打开Window|Panels|Align命令，打开Align对齐面板。<br><span style="font-weight:bold"><wbr />步骤四</span><wbr />、使用其中的对齐方式将文字对齐成图4-8之样式。<br><span style="font-weight:bold"><wbr />步骤五</span><wbr />、点击文字工具，在总字节的文字后面用鼠标拖出一个文本框，注意用调节点调节文本框的宽度。然后打开Window|Panels|Text Options命令打开Text Options文本属性面板，在下拉菜单中选择Dynamic Text打开动态文本设置框。<br><span style="font-weight:bold"><wbr />步骤六</span><wbr />、在动态文本框的Variable项输入这个文本框的变量为zbye，如图4-10所示。<br><div style="text-align:center;"><wbr /><a href="http://www.blueidea.com/articleimg/2004/03/1711/10.gif" target="_blank"><img style="width:218px;height:155px;border:0;" src="http://www.blueidea.com/articleimg/2004/03/1711/10.gif" /></a><wbr /><br>图4-10 动态文本面板中设置动态文本变量</div><span style="font-weight:bold"><wbr />步骤七</span><wbr />、用同样的方法在绘制七个动态文本框在各字符的后面。已经下载字节后面的字段变量为yby，总帧数的为zfrm，已下载帧数的是yfrm，需要的时间后面变量名为xtim，已用时间的为ytim，在进度条下方的下载进度变量为yload。<br><span style="font-weight:bold"><wbr />步骤八</span><wbr />、设置完毕开始进行程序设计。打开第二帧的Action面板，你可以看到我们刚才设计的程序。在这个程序中有很多的内容无需改变，只要再添加一些程序就可以了。<br><span style="font-weight:bold"><wbr />步骤九</span><wbr />、我们将Setproperty(&quot;_root.loading&quot;,_xscale,(_framesloaded/_totalframes)*100这句用鼠标拖动上移一行，在指定区的Actions指令集中选择Set Variable指令。<br><span style="font-weight:bold"><wbr />步骤十</span><wbr />、在打开的变量输入框中，Variable项填写总帧数的字段变量zby，在Value栏中输入代码_root.getbytestotal（），勾选后面的Expression单选框。<br><div style="text-align:center;"><wbr /><a href="http://www.blueidea.com/articleimg/2004/03/1711/11.gif" target="_blank"><img style="width:463px;height:391px;border:0;" src="http://www.blueidea.com/articleimg/2004/03/1711/11.gif" /></a><wbr /><br>图4-11 变量输入框</div><span style="font-weight:bold"><wbr />步骤十一</span><wbr />、用同样的方法输入其它变量。yby=_root.getbytesloaded（）。<br><span style="font-weight:bold"><wbr />步骤十二</span><wbr />、zfrm = _root._totalframes。<br><span style="font-weight:bold"><wbr />步骤十三</span><wbr />、yfrm = _root._framesloaded。<br><span style="font-weight:bold"><wbr />步骤十四</span><wbr />、ytim=gettime()/1000 + &quot;秒&quot;。<br><span style="font-weight:bold"><wbr />步骤十五</span><wbr />、xtim = int(zby-yby)/yby*tim) + &quot;秒&quot;。<br><span style="font-weight:bold"><wbr />步骤十六</span><wbr />、yload = _framesloaded/_totalframes*100。<br><span style="font-weight:bold"><wbr />步骤十七</span><wbr />、整个程序输入结束。对照参考图4-12。<br><div style="text-align:center;"><wbr /><a href="http://www.blueidea.com/articleimg/2004/03/1711/12.gif" target="_blank"><img style="width:500px;height:357px;border:0;" src="http://www.blueidea.com/articleimg/2004/03/1711/12.gif" /></a><wbr /><br>图4-12 高级Loading的完整程序</div><span style="font-weight:bold"><wbr />程序解读</span><wbr />：<br>这前几行程序基本上不用解读，哪些都是Action中所拥有的函数，只要将本章开始时的函数学习好，把它们赋值给变量就可以了。<br><span style="font-weight:bold"><wbr />第十行</span><wbr />，用了一个表达式来获得了还需要的时间变量值。总字节减去已经下载的字节的值除以已下载的字节再乘以已经使用的时间。<br><span style="font-weight:bold"><wbr />第十一行</span><wbr />，用已经下载的帧数除以总帧数再乘以100得到下载进度，其实这行程序还可以变化为yfrm/zfrm*100。<br><span style="font-weight:bold"><wbr />知识要点</span><wbr />：<br>高级Loading其实制作起来也并不复杂，你可以通过对函数的了解来做到。另外这里有一个概念，getbytesloaded和另外几个函数都是Movie Clip的函数，为什么也可以在场景中使用呢？其实你可以把场景看成是一个大的Movie Clip，很多电影剪辑的函数都可以使用在场景中，包括gettimer()。而动态文本变量正是去显示这些函数的数值的，其实在Loading中还有一个概念，就是利用帧循环也可以达到循环效果，与一般的编程不同的是Flash可以使用帧循环去达到一些效果，有时候因为帧循环的时间特性，做出的循环比用while等循环语句构造出更加意想不到的效果。学习好这些函数正是高级Loading制作的关键。 <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244858588#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Sat, 13 Jun 2009 02:03:08 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244858588</guid>
</item>

<item>
<title><![CDATA[Loading 预载动画程序设计]]></title>
<link>http://43334728.qzone.qq.com/blog/1244858460</link>
<description><![CDATA[我们说过，Flash制作的多媒体网站是Flash动画制作的精髓，也是Flash动画最为广泛的用途。在Flash出现以前，网站设计是静态的和Gif动画的天下。当然还有JavaApplet和JavaScript等众多技术。但这些技术的应用范围并不广泛。网络带宽也是影响网络多媒体发展的一个瓶径。但Flash出现了。它带给网络全新的意义，带给网络互动的媒体，使网络交互多媒体成为可能，成为现实。三年前当我们浏览国外的网站榜评时，还主要是停留在一些平面设计作品上，但是现在国外的榜评已经拥有了很多的互动多媒体动画网站。Flash发展的速度由此可见。IE浏览器在6.0版本中已经内置了Flash Player播放器，似乎在预示着网站制作的发展道路。让我们一起来领略互动的魅力。<br>Loading 预载动画程序设计<br>Loading网页预载程序是网页动画中的一个关键，因为即便是Flash生成的文件很小，但是制作出的大型动画对于使用调制解调器的用户速度还是需要解决的。如果没有一个预载的过程，只怕动画观看起来也不会很流畅。特别是在动画中加入了大量的声音和图像的动画没有了Loading将不会流畅的展现在我们眼前。<br>在此之前先学习一下在这章将要出现的属性与函数。如果由于例中使用了没有接触过的函数和属性，请先照例制作，等在以后的章节中学习了相关的其它函数后回过头来再看的话，就会完全明白例子中的作用。<br>◆ _framesloaded<br>_framesloaded是电影剪辑的属性，用来获取电影剪辑中的已经下载的帧数，当然大部的应用于电影剪辑的属性都可以应用于整部动画。此属性只能用来获取。<br>if(_root.mc._framesloaded&gt;100){<br>   _root.gotoandplay(1)<br>}<br>此例子在普通模式下输入将成为：<br>if(getproperty(&quot;_root.mc&quot;,_framesloaded)&gt;100){<br>   gotoandplay(1)<br>}<br>普通模式中对属性的获取将使用getproperty函数，但此函数在新的.语法的使用中并非最佳，在以下的例子中将不再引用。此例中以获得电影剪辑已经下载的帧数大于100时，开始返回场景重新播放。这也是在网站制作中一个比较典型的例子，很多的电影剪辑因为体积问题，在“流”式播放过程中不会很流畅。而下例将是一个错误的例子。<br>_root.mc._framesloaded=100;<br>_root.gotoandplay(1);<br>在编程中将不允许对_framesloaded属性进行赋值，如果你想当下载的帧数等于100时根目录开始回放的话，请按下例制作。<br>if(_root.mc._framesloaded=100){<br>    _root.gotoandplay(1);<br>}<br>◆ _totalframes<br>_totalframes属性是用来获取电影剪辑实体的总帧数。也可以用来获取动画的总帧数。在下例中会看到它的用法。<br>i=_root.mc._totalframes;<br>if(_root.cuttentframes=i);<br>_root.stop();<br>}<br>程序中将电影剪辑实体的总帧数赋值赋予了变量i，而当主场景的动画播放指针播放到与电影剪辑中的总帧数相同的数目时，动画停止播放。此属性同样为非赋值属性。<br>◆ ifFramesloaded<br>ifFramesloaded函数也是用来获取已经下载的帧数的，与_framesloaded不同的是它用于一个简单的行为来描述已下载的帧数。而且此函数似乎是专为Loading设计，它位于Basic Actions指令集，指令名称为If Frames Is Loaded。以下实例将构成一个最为简单的Loading。<br>ifFrameLoaded(_totalframes){<br>   gotoandplay(3);<br>}else{<br>   gotoandplay(1);<br>}<br>将此程序加于影片的第二帧，可用于所有动画的预载技术。意思为当装入的帧数为总帧数时开始播放第三帧，如果不然，播放第一帧。在Flash5以后开始使用更多的函数和属性，所以此函数不推荐使用。<br>◆ getBytesLoaded()<br>getBytesLoaded()为获取电影剪辑实体的已下载字节数，如果是外部动画将返回动画的总字节数。GetBytesLoaded用于更加精确的Loading设计，因为它并不像_framesloaded属性是获取影片的总帧数，而是以字节做为单位获取。如果说动画的最后一帧将是一个大型的图像或是声音角色的话，哪么_framesloaded所获得的百分比将不准确，getBytesLoaded有效的弥补了此方面的不足。例：<br>i=_root.getBytesTotal();<br>if(_root.getBytesLoaded()&gt;=1000000){<br>    n=_root.getBytesLoaded();<br>    if(n&lt;=i/4){<br>        _root.stop();<br>        trace(&quot;下载了1M，还不到四分之一，动画太大，下载时间会很长，是否继续？&quot;)<br>    }<br>}<br>此句的意思为当动画下载到1MB时，比较是否已经下载了动画的四分之一，如果是，停止动画的播放，在调试窗口显示“下载了1M，...&quot;等字符串，根据动画中的其他行为判断是否继续播放。此例的另一特点是，停止的地方如果有插入电影剪辑的话，电影剪辑将不会停止播放。也可以通过动态文本显示已经下载的文字数，假设在动画的主场景中有一个变量名为text的动态文本变量，哪么例：<br>_root.text=_root.getBytesLoaded();<br>if(_root.getBytesLoaded()&gt;=_root.getBytesTotal()){<br>    gotoandplay(3);<br>}else{<br>    gotoandplay(1);<br>}<br>动态文本框会动态显示已经下载的字节数为观众服务。观众也会了解在动画的下载过程中动态的进度了。<br>◆ getBytesTotal()<br>getBytesTotal()函数是用来获取动画或是电影剪辑的总字节数，当然我们可以通过对文件的大小来观察动画的总字节数，但对于网络上使用浏览器的观众来说，动态显示文件大小是很有必要的。还有，如果想观察动画中电影剪辑的体积就只有靠getBytesTotal()函数了。<br>If(_root.getBytesTotal()&gt;=1000000){<br>_root.stop();<br>}<br>这个程序的意思是当动画的总字节超过1M时停止动画播放。<br>◆ gettimer()<br>gettimer()函数用来获取电影剪辑或是动画的已经播放时间数，此函数并不仅仅应用于Loading的制作，在今后的学习过程中还会接触到它。在Flash5的对动画播放时间的控制上会有gettimer()函数大显身手的舞台。但gettimer()函数获取的时间是以毫秒做为计算单位的，一般在程序制作过程中还会对它除以一千来取得秒，这样更加符合对于时间播放程序的显示。假设动画中有一个text的动态文本框变量。例：<br>text=gettimer()/1000;<br>通过帧循环或是其它的诛如OnClipEvent(enterframe)等行为的控制会动态的显示动画播放的时间过程。又例如：<br>text=gettimer()/1000;<br>if(text&gt;=10){<br>    gotoandstop(3);<br>}else{<br>    gotoandplay(1);<br>}<br>假设此程序位于动画的主场景的第二帧。那么当开始播放10秒钟之后才会正式开始播放，不然只会在第一帧与第二帧之间循环。<br> <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244858460#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sat, 13 Jun 2009 02:01:00 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244858460</guid>
</item>

<item>
<title><![CDATA[Flash载入动画 完美的loding制作]]></title>
<link>http://43334728.qzone.qq.com/blog/1244857043</link>
<description><![CDATA[然这里的&quot;完美loding&quot;是指londing程序的内部效果而不是外在的美观。不多说了，这篇帖子是我专门为菜鸟而写的，虽然关于&quot;londing程序&quot;制作介绍的文章已经不止唯一了，但是还有许多的新手对于&quot;londing程序&quot;还是有很多疑问，特别是对自己做的&quot;londing&quot;为什么总是在屏幕上一闪而过，有的甚至看不到&quot;londing&quot;，当然，这曾经也是我自己的一个疑问。现在我就想大家介绍一个自己测试过N次的一个&quot;双重加载+可视化加载（可以看到londing程序加载的过程）&quot;在主影片上只占一帧的完美londing程序。（相关文章：Flash全局变量让你告别繁琐的路径）<br>    首先，我们按CTRL+F8新建一个影片剪辑名为&quot;londing&quot;，最好在对其方式上选择&quot;中心对其&quot;。这时，我们就开始制作&quot;londing&quot;的Action，在第一层（名为Action）的第一帧输入以下代码：<br>_parent.stop();//当前影片的父影片剪辑，停止播放 <br>var fa;//声明局部变量 fa <br>var fb;//声明局部变量 fb <br>var fc;//声明局部变量 fc <br>fc = 0;//使变量fc赋予值&quot;0&quot; <br>var ga;//同上 声明局部变量 ga <br>var gb;//变量 gb <br>var gc;//变量 gc <br>gc = 0;//使变量gc赋予值&quot;0&quot; <br>this.onEnterFrame = function() { <br>};//使当前对象（上面的变量），进入帧时开始调用，再次声明定义的函数 <br>（复制以上代码到第一帧即可） <br>    程序讲解：上面代码的主要作用是让影片认识我们定义的函数，在影片进入当前剪辑&quot;londing&quot;时使用。下一步就是输入londing程序的主要代码了，单击Action层按F5，在新建的一帧中输入以下代码：<br>fa = _parent._framesloaded;//使变量fa赋予值_framesloaded（影片已加载的帧数） <br>fb = _parent._totalframes;//使变量fb赋予值_totalframes（影片总帧数） <br>fc = fc+Math.round((fa/fb*100-fc)/10000000000000000000000000+1);//获取影片加载帧数的百分比 <br>tiao1._xscale = (fc);//按加载帧数的百分比来缩放tiao1的宽 <br>text2 =&quot;准备加载影片字节中...&quot;;//在动态文本筐里显示&quot;...&quot;中的文字 <br>text1 =&quot;加载影片帧中...    &quot;+(fc)+&quot;%&quot;;//把加载帧数的百分比在text1中显示，并在后面加个% <br>if (fc&gt;=100) {//如果影片加载帧数的百分比达到100%，则开始执行以下代码 <br> text1 = &quot;完成&quot;;//在动态文本text1中显示&quot;完成&quot; <br> ga = _parent.getBytesLoaded();//使变量ga赋予值getBytesLoaded()（影片已加载的字节数） <br> gb = _parent.getBytesTotal();//使变量gb赋予值getBytesTotal()（影片总字节数） <br> gc = gc+Math.round((ga/gb*100-gc)/10000000000000000000000000+1);//获取影片加载字节数的百分比 <br> tiao2._xscale = (gc);//按加字节的百分比来缩放tiao2的宽 <br> text2 = &quot;加载影片字节中...&quot;+(gc)+&quot;%&quot;;//把加字节数的百分比在text2中显示，并在后面加个% <br> if (gc&gt;=100) {//如果影片加字节数的百分比达到100%，则开始执行以下代码 <br>  _root.gotoAndStop(2);//使上一级影片转到第2帧并停止播放影片 <br>  this.stop();使当前级停止播放影片 <br> } <br>} <br>    程序讲解：londing程序制作的方式有两种，一种是帧加载第二种就是影片字节的加载，在以上代码中已经都介绍的很清楚了。而上面的程序已经把两种加载的方式都融合到其中了，因此我可以大胆的说它是完美的londing程序。在影片帧加载完毕后，再开始加载影片的字节数。上面代码中的&quot;if (条件) {执行代码}&quot;就是一个条件语句，它就是使当满足一个条件后，如if (fc&gt;=100) 加载帧数达到百分之百后才开始执行另一段代码。其作用主要在于使两段代码可以分开执行，如果取消了&quot;if (条件) {执行代码}&quot;FLASH就会让两段代码同时执行了。<br>    还有，有些新手对于&quot;_root与this&quot;的用法不是很清楚，因此在这里也有必要提一下它们的用法与意义。若在一个元件中的按钮中加入&quot;on(press){_root.gotoAndStop(5)}&quot;，它的意思就是指在单击按钮后主影片（最上一层）转到第5帧并停止。若在一个元件中的按钮中加入&quot;on(press){this.gotoAndStop(5)}&quot;，控制的就是按钮在当前级影片剪辑。再插一句，灵活的运用&quot;_root与this&quot;，会让自己更好的控制影片。<br>    完成Action层的最后一步，让我们再次单击此层并按F5。在Action层的第三帧中添加代码：gotoAndPlay(2);<br>    好了，现在可以开始制作londing程序的可视部分了。<br>    新建一层，名为TEXT。在TEXT层中新建两个动态文本筐，字体大小设为14。在一个文本筐的属性中设置变量为&quot;text1&quot;宽为153,在另一个动态文本筐，设置变量为&quot;text2&quot;宽为153。在对其中点击&quot;垂直对其&quot;再新建一层，名为填充筐。在这层中选择&quot;矩型工具(R)&quot;,笔触颜色为黑(可自选)填充颜色为黄色(可自选)拖出两个矩型，宽为150高为12。使&quot;text1&quot;与一个矩型水平中对其，使&quot;text2&quot;与另一个矩型水平中对其。单击两个矩型中的颜色区，转换为影片剪辑为左中对其，设置与&quot;text1&quot;水平中对其的矩型实例名为&quot;tiao1&quot;,设置与&quot;text2&quot;水平中对其的矩型实例名为&quot;tiao2&quot;。<br>    最后把制作好的londing剪辑从库中拖出，放到主场景的任意位置。好了现在londing程序可以说已经是完成了，但是在按CTRL+ENTER测试的时候你却会发现，在两个tiao的缩放上出现了一些问题，如图，当然解决的方法也很简单。<br>    说明一下，我在制作矩型时是把外筐与tiao分层了,tiao1与tiao2也分了层，这样是为了更方便的来制作tiao。现在我们把tiao2属性中的宽设置为1.0，与tiao2外筐的最左侧对其。<br>    新件一层，名为遮照。复制实例tiao2，粘贴到遮照层，选择&quot;粘贴到当前位置&quot;。右击遮照层，选择右键菜单中的&quot;遮照层&quot;。好了现在londing程序的制作已经大工告成，当你再测试的时候，所有问题都已经解决。<br>    当然，如果你觉得一步一步的制作有些麻烦，你只需要将原程序(FLA)文件中lond层的第一帧，复制到你影片的第一帧即可。注：此方法可适用于任何影片。 <br> <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244857043#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sat, 13 Jun 2009 01:37:23 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244857043</guid>
</item>

<item>
<title><![CDATA[Flash加载外部文件]]></title>
<link>http://43334728.qzone.qq.com/blog/1244697398</link>
<description><![CDATA[<wbr /><a href="http://imgcache.qq.com/ac/b.gif" target="_blank"><img style="border:0;" src="http://imgcache.qq.com/ac/b.gif" /></a><wbr /> <wbr /><a href="http://imgcache.qq.com/ac/b.gif" target="_blank"><img style="border:0;" src="http://imgcache.qq.com/ac/b.gif" /></a><wbr /> Flash可以通过帧、按扭、影片剪辑来调用外部文件。调用的外部文件包括：外部文本文件、外部程序文件、外部*.swf文件、外部图片文件、外部音乐文件、外部脚本文件。<br>一.调用外部文本文件：(文本文件开头要以flash中的动态文本框的变量名开头，如<br>msg=&quot;..........&quot;这样的形式,要和编辑的Flash文件放在同一目录下）<br>1.用工具箱中的文本工具，选择动态文本，给动态文本一个变量名，如:msg,在编辑区拖出一个文本框<br>2.制作两个按扭（一个调用，一个清除）拖放到场景中。<br>3.调用按扭上添加AS：<br>on(release){//松开鼠标后执行下面的代码；<br>   loadVariables(&quot;msg.txt&quot;,msg);//调用和你编辑的Flash处于同一目录下的msg.txt文本文件到动态文本msg中；<br>   System.useCodepage=true;//使外部文件的中文字符能够正确显示；<br>}<br>4.清除按扭上的AS：<br>on(release){//松开鼠标后清楚动态文本框中的内容；<br>msg=&quot;&quot;;<br>}<br>5.Ctrl+Enter测试.<br><br>当然代码也可以写在帧上:(调用按扭的实例名是bt1,清除按扭的实例名是bt2)<br>在第一帧上加如下代码：<br>stop();<br>_root.bt1.(){<br>   loadVariables(&quot;msg.txt&quot;,msg);<br>   System.useCodepage=true;<br>}<br>_root.bt2.(){<br>   _root.msg=&quot;&quot;;<br>}<br>Ctrl+Enter测试.<br><br><br>调用的外部文本文件能够滚动:<br>1.用工具箱中的文本工具，选择动态文本，给动态文本一个变量名，如:msg,在编辑区拖出一个文本框<br>2.新建一层,制作两个按扭（一个调用，一个清除）拖放到此层中<br>3.新建一层,在动态文本框的右侧用矩形工具画一个竖条,高度和动态文本一样;再制作一个向上的方向&quot;箭头&quot;按F8转为按扭元件;复制一个&quot;箭头&quot;按扭,垂直镜象,使这两个按扭和竖条的两端对齐.<br>4.调用按扭上的AS:<br>on(release){//松开鼠标后执行下面的代码；<br>loadVariables(&quot;msg1.txt&quot;,msg);//调用msg1.txt文本文件到动态文本框msg中；<br>System.useCodepage=true;//使外部文件的中文字符能够正确显示；<br>}<br>清除按扭上的AS:<br>on(release){<br>   _root.msg=&quot;&quot;;//清除动态文本框中的内容;<br>}<br>向上的按扭上的AS:<br>on(press){//在按扭的感应区上每按一次鼠标执行下面的代码;<br>   _root.msg.scroll=_root.msg.scroll-1;//文本向下滚动一行;<br>}<br>向下的按扭上的AS:<br>on(press){//在按扭的感应区上每按一次鼠标执行下面的代码;<br>_root.msg.scroll=_root.msg.scroll+1;//文本向上滚动一行;<br>}<br>Ctrl+Enter测试.<br><br><br>当然代码也可以写在帧上:(调用按扭的实例名是bt1,清除按扭的实例名是bt2,向上按扭的实例名是:up,向下按扭上的实例名是down)<br>在第一帧上加如下代码：<br>_root.bt1.(){//松开鼠标后执行下面的代码；<br>loadVariables(&quot;msg1.txt&quot;,msg);//调用msg1.txt文本文件到动态文本框msg中；<br>System.useCodepage=true;//使外部文件的中文字符能够正确显示；<br>}<br>_root.bt2.(){//松开鼠标后执行<br>_root.msg=&quot;&quot;;//清除动态文本框中的内容;<br>}<br>_root.up.(){//在向上按扭上每按一次鼠标执行下面的代码;<br>_root.msg.scroll=_root.msg.scroll-1;//文本向下滚动一行;<br>}<br>_root.down.(){//在向下按扭上每按一次鼠标执行下面的代码;<br>_root.msg.scroll=_root.msg.scroll+1;//文本向上滚动一行;<br>}<br>Ctrl+Enter测试.<br><br><br>二.调用外部*.swf文件(加载到影片剪辑中):<br>外部*.swf文件要和编辑的Flash文件放在同一目录下<br>1.新建立一个空的影片剪辑mymc,把它放在场景中，实例名是：mymc.<br>2.新建一层,制作两个按扭（一个调用，一个清除）拖放到此层中<br>3.调用按扭上的AS：<br>on(release){//鼠标离开按扭后执行下面的代码；<br>loadMovie(&quot;flash8.swf&quot;,&quot;mymc&quot;);//加载外部的&quot;flash8.swf&quot;文件到&quot;mymc&quot;空影片剪辑中；<br>mymc._x=70;//加载影片的X轴坐标；<br>mymc._y=20;//加载影片的Y轴坐标；<br>mymc._xscale=70;//加载影片的宽度；<br>mymc._yscale=70;//加载影片的高度；<br>}<br>清除按扭上的AS：<br>on(release){//鼠标离开按扭后执行下面的代码<br>unloadMovie(mymc);//删除用loadMovie加载的*.swf文件；<br>}<br>Ctrl+Enter测试<br><br>三.调用外部*.swf文件(加载到时间轴上):<br>外部*.swf文件要和编辑的Flash文件放在同一目录下<br>1.制作两个按扭（一个调用，一个清除）拖放到场景中<br>2.调用按扭上的AS：<br>on(release){//鼠标离开按扭后执行下面的代码<br>   loadMovie(&quot;flash8.swf&quot;,1);//加载外部的&quot;flash8.swf&quot;文件到场景中，层深为1;<br>}<br>清除按扭上的AS：<br>on(release){//鼠标离开按扭后执行下面的代码<br>   unloadMovie(1);//删除层深为1的用loadMovie所加载的&quot;flash8.swf&quot;文件<br>}<br>Ctrl+Enter测试。<br>当然二和三的代码都可以写在帧上。<br><br>四.调用外部图片（加载到影片剪辑中）<br>外部图片必须和正在编辑的Flash文件放在同一目录下<br>1.制作两个按扭（一个调用，一个清除）拖放到场景中<br>2.制作一个空的影片剪辑，拖到场景中，实例名是：mymc;<br>3.时间轴上第一帧上的AS：<br>i=0;//定义一个变量i，并且赋初值为0；<br>调用按扭上的AS：<br>on(release){//鼠标离开按扭后执行下面的代码；<br>   i++;<br>   if(i&gt;9){//因为外面这有9张图，当变量大于9的时候，让变量为1，这样能够使加载的图片是连续的，即，每点一次按扭，就换一张图，等到换到第9张图，再点按扭，则循环到第一张图（j1.jpg到j9.jpg,因为没有j0.jpg,如果i=0，则会提示没有找到j0.jpg);<br>   i=1;<br>}<br>loadMovie((&quot;j&quot;+i)+&quot;.jgp&quot;,mymc);//从j1.jpg开始加载图片到影片剪辑mymc中；<br>mymc._x=110;//以下设置加载图片的属性<br>mymc._y=35;<br>mymc._xscale=130;<br>mymc._yscale=130;<br>}<br>清除按扭上的AS：<br>on(release){<br>unloadMovie(mymc);//删除掉用loadMovie加载到影片剪辑的图片；<br>}<br>Ctrl+Enter测试。<br>当然AS可以写在帧上。<br> <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244697398#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Thu, 11 Jun 2009 05:16:38 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244697398</guid>
</item>

<item>
<title><![CDATA[flash加载外部图片进度显示]]></title>
<link>http://43334728.qzone.qq.com/blog/1244697113</link>
<description><![CDATA[<wbr /><a href="http://imgcache.qq.com/ac/b.gif" target="_blank"><img style="border:0;" src="http://imgcache.qq.com/ac/b.gif" /></a><wbr /> <wbr /><a href="http://imgcache.qq.com/ac/b.gif" target="_blank"><img style="border:0;" src="http://imgcache.qq.com/ac/b.gif" /></a><wbr /> //设置开始 <br>loadfile=&quot;http://www.deskcar.com/desktop/fengjing/2004222154314/56.JPG&quot;;//要加载的文件 <br>loadmc=_root.mymc;//要加载到的元件 <br>setsize=300;//设置显示的宽度 (高度会等比显示) <br>//设置结束 <br>//---------代码开始------------ <br>var my_mcl = new MovieClipLoader(); //定义新的MovieClipLoader对象 <br>myListener = new Object(); //定义一个新的对象，用来监听load进程 <br>myListener.onLoadProgress = function (target_mc, loadedBytes, totalBytes) //加载过程中每当将加载的内容写入磁盘时调用 <br>{ <br>loaded=loadedBytes; //是已经下载的字节 <br>loadtotal=totalBytes; //是正在加在的文件的总字节数 <br>loadds = int(loaded /loadtotal * 100);//计算已经载入的百分比 <br>loadtxt =int(loaded/1024) + &quot; K / &quot; + int(loadtotal/1024)+ &quot; K &quot; + loadds +&quot;%&quot;;//显示下载的信息 <br>_root.loadbar.gotoAndStop(loadds); //设置进度条 <br>//if(loadds==100){_root.p._visible=false} // 如果不想使载入的按钮和进度条显示，使用该语句 <br>}//end onLoadProgress <br>myListener.onLoadInit = function (target_mc) //当执行加载的剪辑的第一帧上的动作时调用 <br>{ <br>//获取加载的文件的大小、尺寸 <br>loadmcoldw = target_mc._width; <br>loadmcoldh = target_mc._height; <br>fileoldsize = &quot;文件宽度：&quot; + loadmcoldw + &quot; 高度: &quot; + loadmcoldh; <br>loadv=loadmcoldh/loadmcoldw; //获得宽高比 <br>//设置大小 <br>speed=0.1; <br>loadneww=setsize; <br>loadnewh=setsize*loadv;//宽高等比 <br>filesizetxt=fileoldsize+&quot; 显示大小 &quot;+ &quot;宽:&quot;+loadneww + &quot; 高:&quot;+loadnewh; <br>if (loadds==100){//如果下载完成 <br>target_mc.removeListener(myListener);//删除监听对象 <br>_root.mymc.onEnterFrame = function() {//循环触发事件 <br>_root.mymc._width+=(loadneww-_root.mymc._width)*speed;//缓冲变动 <br>_root.mymc._height+=(loadnewh-_root.mymc._height)*speed; <br>};//end onEnterFrame <br>}//end if <br>} //end onLoadInit <br>myListener.onLoadError = function (target_mc, errorCode) //加载的文件未能加载时调用 <br>{ <br>if (errorCode==&quot;URLNotFound&quot; || errorCode==&quot;LoadNeverCompleted&quot;){ <br>loadtxt=&quot;文件不存在！&quot;;//加载出错! <br>}//end if <br>} //end onLoadError <br>my_mcl.addListener(myListener);//注册一个新的监听对象 <br>my_mcl.loadClip(loadfile,loadmc);//加载文件loadfile到loadmc <br>stop(); <br>//MovieClipLoader.removeListener() <br>//删除已使用 MovieClipLoader.addListener() 注册的对象 <br><br>//MovieClipLoader.unloadClip() <br>//删除已通过 MovieClipLoader.loadClip() 加载的影片剪辑 <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244697113#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Thu, 11 Jun 2009 05:11:53 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244697113</guid>
</item>

<item>
<title><![CDATA[完美的loading]]></title>
<link>http://43334728.qzone.qq.com/blog/1244696844</link>
<description><![CDATA[共三部分： <br>1、基础 <br>2、MovieClipLoader相关讨论(较深入) <br>3、V2组件相关问题 <br><br>一、基础 <br>很久没有发技术日志了，要来就来个完美的。您别激动，一个小小的loading谈什么完美，我想你看了就知道^_^ <br>我的口号，将此文打造成全球最完善的非Flash初学者loading教程贴。 <br>转载请保留原文地址：http://www.awflasher.com/blog/?id=444 <br><br>首先，想说一下我写此文的动机。记得很早之前我曾经说过“没有loading的flash，不是完整的flash”。我想那个句话可能偏激了。因为有时候一些不到10k的flash，确实不需要做什么loading。但我始终认为，做一个优秀的loading是衡量一个flasher水准，甚至态度的。你问我为什么，我可以告诉你，因为loading是唯一一个你不会多看而所有用户、客户会看的东西，所以你对loading的重视程度，甚至可以反衬你这个flasher的职业道德！ <br><br>有些做设计为主的朋友，我认识不少，他们对loading都是得过且过的态度，做一个loading，更多的是自己找一个现成的，然后每次去套用，我个人认为是很不好的习惯。并不是说我不提倡代码、元件的重用度，而是我觉得对于loading这种东西，套多了，是要出问题的。我强烈建议那些已经达到可以修改人家loading水平的flasher看看我的东西，当然，如果你连flash的as该写在哪都不知道，建议先入门了。 <br><br>好，下面切入正题，如何制作loading。 <br><br>首先要感激Macromedia的大智慧，提供了很好的两个函数使我们可以做出完美的loading，那就是getBytesLoaded和getBytesTotal。请不要再用你改来改去改了两三年的那个什么getFrameLoaded什么什么了，我都记不清楚怎么拼了。我只想说，Frame的观念将在真正的Interactive -Design中淡化。更别提什么Scene，那是Flash的败笔！ <br><br>那么loading如何工作呢？我们如何利用这两个函数呢？这里要提到一个重要的概念。就是间隔调用。间隔调用有多种方式，下面列举出来，并列举出其在loading制作中的地位和用法，欢迎补充： <br><br>·setInterval方式 <br>写法： <br>function loadCheck() <br>{ <br>  var p = getBytesLoaded()/getBytesTotal(); <br>  if (p==1) <br>  { <br>    clearInterval(intervalID); // 释放间隔调用 <br>    gotoAndPlay(someFrame); // 开始播放 <br>  } <br>} <br>var interval = 30; // 这个数值是刷新频率 <br>var intervalID = setInterval(loadCheck,interval); <br><br>我个人并不推荐初学者用这种写法。因为很多人容易忽视clearInterval，而这个东西被忽视掉，是很恐怖的！如果你的setInterval没有给及时移除，意味着你将在整个swf的播放过程中增加一个没有必要的负担！ <br>而且这种方法很不适合控制MoiveClip的状况（因为初学者会发现MC的路径是个大问题，而loadCheck本身就是个函数，还是被 setInterval调用的，要在loadCheck中指一个路径出来，挺麻烦的，你不要指望_root，那样会让你的程序不规范；也不要指望 this，因为在函数中用this似乎不太理想；最好什么都不写，但往往你不敢不写），进而做出更好的效果。 <br><br>·onEnterFrame方式 <br>我最喜欢的就是这种方法了。比较方便、直观。 <br>因为往往我们是要用一个MC体现一个loading的进度，比如，一个进度条，或者更有创意的东西，只有你不能想到的，没有你不能做到的。 <br>那么究竟如何用呢。首先，把创意定好。然后给你的MC一个实例名字，比如叫做loader_mc。这时候在timeline上写代码，记住，是 timeline而不是MC上。因为这样便于代码统一、便于路径统一、便于管理和寻找。别为了省几个字母就把代码通通搬到button，mc上面去，然后一个on(press)了事。除非你是在敷衍你的作品；或者你是在为了交作业。 <br>loader_mc.onEnterFrame = function () <br>{ <br>  var getTar:MovieClip = this._parent; <br>  var p = getTar.getBytesLoaded()/getTar.getBytesTotal(); <br>  trace(p); <br>  if(p==1) <br>  { <br>    this.onEnterFrame = null; <br>    gotoAndPlay(someFrame); // 开始播放 <br>  } <br><br>} <br><br>就这么简单，记住，在MC的事件函数体内部引用MC，永远是一件很快的事情。因为this就可以指向这个MC本身，通过诸如this._parent之类的方法，可以找到你所有的MC! <br><br>·直接依赖于timeline的循环方式 <br>非常非常非常古老的方式了，不介绍了。不过你们可以去问问那些一直不喜欢自己动手做loading的flasher，他们也许在改的某一个版本就是这个，呵呵。 <br><br>以上算是比较简单的。比较容易出问题的，还有两个。 <br>第一、MovieClipLoader <br>第二、含有多种V2组件的Loader <br><br>================================ <br><br>二、MovieClipLoader类说明 <br><br><br>参考英文教程，并作出大量原创补充 - Neil Webb, neil AT nwebb DOT co DOT uk, http://www.nwebb.co.uk <br>转载请注明原帖：http://www.awflasher.com/blog/?id=468 <br><br>读取外埠数据参与Flash应用程序部署是一件非常重要和常见的工作，尤其是我们常常需要检测这些数据加载的进度。而MovieClipLoader(下称 MCL)类却帮我们大大简化了这项麻烦工作。此外，它使得我们能获取更多的需要，并减少代码量。我们可以用一个单独的MovieClip类来载入一个，或者多个外埠资源到指定的MC或者层级，或者我们可以为每一个加载工作制定不同的MCL实例。 <br><br>我决定分两部分来完成这篇教程。首先，我们将介绍MCL的基本用法；然后我们将介绍如何使用一个单独的MCL实例来读取外埠资源到不同的MC，并且，我们将加入侦听器对象来参与工作。当然，不通过侦听器也可以完成任务，我们暂时不介绍侦听器，因为这样你会更加容易理解MCL。 <br><br>那么，我们首先来大体了解一下MCL有哪些回调函数，后面也会有详细介绍（aw附:回调函数我个人理解就是某一个类组、参数事先确定，拥有指定功效的方法）这里可以了解一下什么叫做回调函数）： <br><br>MovieClipLoader对象的回调函数: <br><br>事件回调函数（严格要求数据类型的时候，它们并不是方法，后祥）： <br>* MovieClipLoader.onLoadStart() - 当加载开始的时候触发 <br>* MovieClipLoader.onLoadProgress() - 在读取进行中触发 <br>* MovieClipLoader.onLoadInit() - 读取资源载入后的第一帧执行完成后触发 <br>* MovieClipLoader.onLoadComplete() - 当读取的外埠资源已经完全下载到本地时触发。 <br>* MovieClipLoader.onLoadError() - 当加载外埠资源出错时触发。 <br>* MovieClipLoader.unloadClip() - 将加载的外埠资源移除或终止一个加载工作。 <br><br>方法回调函数： <br>* MovieClipLoader.getProgress(target:object):object - 读取外埠资源的进展，参数为MC对象(aw附：其实MC这种数据类型也就是一种对象)。返回一个对象，该对象包含两种事先预定好的属性(后祥) <br><br>要想好好理解这些回调函数，我们动手试验一下是最好的方法。当然MCL是Flash7之后才有的，所以别忘了发布的时候发布成为7+的版本号。如果直接用 FlashPlayer来调试可能会遇到一些问题，我们推荐在浏览器中进行调试（个人意见：对于外埠资源难以获得情况，比如教育网获取公网资源，最好不要在IDE中调试） <br><br>在我们的例子中，我们将用一个MCL对象来读取不同的图片，并将它们置入不同的空MC中。本例中要用到的swf文件和图像源文件将在Actionscript.org找到（个人建议：其实看完这篇文章要不要源文件没有必要了） <br><br>========== <br><br>1、建立一个新的Flash文档，并在第1帧输入以下脚本： <br>_root.traceBox.vScrollPolicy =&quot;on&quot;; <br>function myTrace(msg) <br>{ <br>_root.traceBox.text += msg + newline; <br>_root.traceBox.vPosition = _root.traceBox.maxVPosition; <br>} <br>我们这里是在建立一种跟踪调试机制，调试的(变量)将输出到文本框组件中。这里的方法&quot;myTrace&quot;是预先定义好的一个函数,它帮助我们顺利完成对某些信息的监控；其中第二句的作用是使文本框随时输出最新监控值。 <br><br>2、现在从组建库托拽一个TextArea组件进入场景，并给以合适的大小，以及一个实例名称traceBox(对应上面的脚本) <br><br>3、接下来，我们要建立一个新的MC元件。并在场景上部署3个实例，为它们分别命名为myMC1,myMC2,myMC3。我们将把图片或者swf影片装载进入它们，并且，在它们下载到本地后按照需求调整它们的尺寸。其实，对图片人为地改变尺寸会造成许多不好的后果，比如锯齿的产生，但是为了让大家了解 onLoadInit事件的使用，我们将会这么做。 <br><br>4、然后，我们建立一个MCL对象，在第一帧输入以下脚本： <br>var myMCL = new MovieClipLoader();//create an instance of MovieClipLoader <br>aw附：这里我想罗索以下，关于Object的翻译。因为上述代码的注释中，老外用的是instance这个词，直译的话，Object是“对象”；Instance代表“实例”。前者更注重于其数据类型，而后者则更注重于其客观存在性。 <br><br>5. 现在我们就可以部署脚本了，在第一帧： <br>myMCL.onLoadStart = function (targetMC) <br>{ <br>var loadProgress = myMCL.getProgress(targetMC); <br>myTrace (&quot;The movieclip &quot; + targetMC + &quot; has started loading&quot;); <br>myTrace(&quot;Bytes loaded at start=&quot; + loadProgress.bytesLoaded); <br>myTrace(&quot;Total bytes loaded at start=&quot; + loadProgress.bytesTotal); <br>} <br>这个函数的第一行中申明了一个(对象类型的)变量，显然，这个变量的值由myMCL对象的getProgress方法获得.刚才已经介绍了 getProgress方法,这里可以看到,返回的loadProgress.bytesLoaded就是loadProgress对象的 bytesLoaded属性. <br>这里我在啰嗦一句：为什么返回一个对象，而不返回具体的值。这是有原因的。函数返回值的功能使得程序设计更加完美，然而很多情况下，我们要返回的并非一个值，我们可能返回两个或者更多的值，甚至它们的数据类型都不相同。这样，只有通过对象的形式来返回了。这是解决问题最简单最高效的方法。下面三句myTrace就呼应了之前我们定义的监控函数，这样就能看到我们关注的变量了。 <br><br>6、我们已经为 onLoadStart事件部署了相应的工作，接下来我们要为上述其他事件部署工作了。紧接着是onLoadProgress，它接受三个参数： targetMC, loadedBytes, totalBytes。分别代表目标容器MC实例；已经读取的体积、总体积。 <br>myMCL.onLoadProgress = function (targetMC, loadedBytes, totalBytes) { <br>myTrace (&quot;movie clip: &quot; + targetMC); <br>myTrace(&quot;Bytes loaded at progress callback=&quot; + loadedBytes); <br>myTrace(&quot;Bytes total at progress callback=&quot; + totalBytes); <br>} <br><br>7、我们的onLoadComplete方法仅接受一个参数，它就是容器MC实例。像onLoadStart一样，我们用getProgress方法来返回读取情况。 <br>myMCL.onLoadComplete = function (targetMC) <br>{ <br>var loadProgress = myMCL.getProgress(targetMC); <br>myTrace (targetMC + &quot; has finished loading.&quot;); <br>myTrace(&quot;Bytes loaded at end=&quot; + loadProgress.bytesLoaded); <br>myTrace(&quot;Bytes total at end=&quot; + loadProgress.bytesTotal); <br>} <br><br>8、onLoadInit方法将在所有加载的内容被下载到本地容器MC中之后才开始执行。这将使得你能更好的控制加载进来的内容的属性。我选择的图片非常大，这样我们可以把读取过程看得更加清晰，而我也要对已经加载的图片尺寸进行修整，让它能全部显示出来。 <br>myMCL.onLoadInit = function (targetMC) <br>{ <br>myTrace (&quot;Movie clip:&quot; + targetMC + &quot; is now initialized&quot;); <br>targetMC._width = 170; <br>targetMC._height = 170; <br>} <br><br>9、还有一个回调方法onLoadError。如果有错误发生，它将会被触发。作为一个优秀的程序员，部署完善的应用程序的时候，对错误发生的避免措施是必不可少的！ <br>myMCL.onLoadError = function (targetMC, errorCode) <br>{ <br>myTrace (&quot;ERRORCODE:&quot; + errorCode); <br>myTrace (targetMC + &quot;Failed to load its content&quot;); <br>} <br><br>10. Well that's the hard work out of the way. Now we just have to load the files in to their respective targets, using loadClip, and passing it two arguments: the location of your file, and the destination movieclip for the file to load in to. <br>10、我们终于将最复杂的工作部署好了。接下来我们只用使用loadClip方法读入我们需要的内容就行了。loadClip方法的两个参数分别是外埠资源的地址和容器MC的实例。 <br>myMCL.loadClip(&quot;http://www.yourdomain.com/test1.swf&quot;,&quot;_root.myMC1&quot;); <br>myMCL.loadClip(&quot;http://www.yourdomain.com/test2.swf &quot;, &quot;_root.myMC2&quot;); <br>myMCL.loadClip(&quot;http://www.yourdomain.com/pic.jpg&quot;, &quot;_level0.myMC3&quot;); <br><br>路径可以选择相对路径。注意，路径的相对性也是一个大问题，当SWF在非本路径的HTML中被引用的时候，遵从HTML所在的路径！这一点是很多Flash教程都忽视的。所以，有时候绝对路径也有绝对路径的好处。[路径问题源文件下载，下载了就一目了然了] <br><br>所有的调试工作最好在浏览器中，而非IDE中完成。而且脚本输出方式必须是AS2。 <br>Remember, for everything to work properly you need to be testing throuhg a browser (and preferably on line so you can see the files loading in real time). You also need to be exporting your code as ActionScript 2. <br><br>In the second part of this tutorial I'm going to show you how to use the MovieClipLoader class in a real-world situation, in order to solve a common problem when assigning event handlers to MovieClips dynamically. <br>接下来，我将介绍实时调用MCL的情况。为了能适应更多的应用，我们经常动态地为MCL制定工作。 <br><br>aw画外音：有时候，我们如此写： <br>1、var mcl:MovieClipLoader = new MovieClipLoader (); <br>2、var mcl = new MovieClipLoader (); <br>发现第一种写法无法为MCL制定onLoadStart等事件方法。这是编译器根据指定变量的数据类型产生的问题。osflash的一些朋友给了一些有用的观点，我也发现这个问题正好涉及到Flash内部的事件响应机制，不妨介绍一下： <br>Flash的三种事件响应机制 <br>===== <br>1、简单的回调函数，最老的； <br>2、侦听器，ASBroadcaster，FlashMX时代； <br>3、事件侦听器，EventDispather，FlashMX2004时代 <br><br>这里，MCL用的是第二种机制，而整套V2组件则使用最后一套机制。 <br>附：MCL官方申明，注意：上述方法中，仅包含getProgress方法！ <br>intrinsic class MovieClipLoader <br>{ <br>  function MovieClipLoader(); <br><br>  function addListener(listener:object):Boolean; <br>  function getProgress(target:object):object; <br>  function loadClip(url:String, target:object):Boolean; <br>  function removeListener(listener:object):Boolean; <br>  function unloadClip(target:object):Boolean; <br>} <br>个人补充认为，1、2在不严格要求数据类型的时候可以通用。 <br><br>下面开始介绍用侦听器来检测MCL事件的方法。在此之前，我们解决一个最常见的问题，我们经常会在论坛中看到有人这样提问： <br>引用 <br>大家好，我动态地建立了一些MC，并逐个分配给它们一个事件句柄（标志）。然后，我将外埠资源读取到它们之中。但是这些分配好的事件句柄都不工作了！ <br>紧接着，发问人一般会贴出一对乱七八糟的代码，并大呼救命。 <br><br>那么，我们首先来分析一下这个错误发生的原因：当外埠资源被载入到一个MC中时，这个MC将会重新初始化。这意味着任何被预先制定好的代码都将付之东流。对于开发人员已经手动在舞台上安排好的MC则并没有相关的麻烦，这是因为任何直接通过onClipEvent制定到MC的代码都能幸免被重新初始化。而动态建立的MC则进行上述的“初始化”，因为我们是在运行中给它们配置的事件代码。 <br><br>我们如何避免这个问题呢？其实方法太多了，很多论坛也进行了极为详细的讨论，我就不多赘述了。 <br><br>你现在也许还记得刚才我介绍的“读取外埠数据参与Flash应用程序部署是一件非常重要和常见的工作，尤其是我们常常需要检测这些数据加载的进度” <br><br>我们已经介绍了MCL的几个回调函数，所以这里也不再赘述了。我们现在制作这样一个效果：缩略图标式的图片浏览系统。我们将要从外部读取一些JPG图片，将它们放入我们动态部署的MC中。并且我们希望这些动态建立的MC都具有各自的onPress事件。我们通过在MC装载好外部资源之后再为之分配事件。 <br><br>在我们开始之前，我还想提醒大家注意一些经常出现的疏漏：一定要在发布的时候设置成Flash7+AS2以上的版本；其次，用浏览器测试你的效果，而不是IDE；否则你将会得到奇怪的结果。 <br><br>现在，我们开始编制代码，你会发现它比你想象的要简单得多。 <br><br>1、新建一个Flash文档。 <br><br>2、找四张100*100像素的缩略图片。 <br><br>3、建立一个动态文本框，大概在300*300像素左右，使用12号字体，并使之现实边框，这样我们更好监测。别忘了设置它为多行的。 <br><br>4、建立一个100X100像素的矩形，转变为MC，然后将它移出场景。这时候，他已经出现在库中了。在库中，设置他的链接名为“img”，并使其“在第一帧导出”。其实这个矩形会在外部资源载入的时候被取代，现在只是为了调试方便。 <br><br>5、在刚才放置textBox文本框的层之上新建一层，这一层用于放置我们的代码，先写上 <br>stop(); <br><br>6、现在我们定义一个MCL的实例，此外定义一个基本对象，作为我们的侦听器： <br>myMCL = new MovieClipLoader(); //define MovieClipLoader <br>myListener = new Object(); //define listener <br><br>7、接下来我们用侦听器来侦听onLoadComplete事件，该事件的作用上文已经提到了。我们现在把它交给listener对象，而不是MCL实例。当然，最终要把侦听器对象再交回MCL（以侦听其回调函数）的时候，得到的效果就是我们需要的效果了。 <br><br>记住，只有当读取完毕的时候，对MC部署事件任务才是安全可靠的！所以，在onLoadComplete被触发的时候才部署这个onPress事件给MC: <br>myListener.onLoadComplete = function(targetMC){ <br>debug.text += &quot;LOADING OF &quot; + targetMC <br>+ &quot; COMPLETE&quot; + newline; <br>targetMC.onPress = function() { <br>debug.text += newline <br>+ &quot;targetMC = &quot; + targetMC._name; <br>} <br>} <br><br>注：上述代码中有几行被人为打断，但这并不影响效果。 <br><br>你也许已经注意到了，MC的实例名称在onLoadComplete被触发的时候是作为一个参数的身份传递给onLoadComplete的，这样我们控制这个MC就非常方便了。比如这里就可以用点击MC来检测事件是否被成功部署给MC。 <br><br>8、现在我们建立一个函数，它包含一个简单的循环来部署场景上的MC。并且及时地为每一个部署好的MC分配读取外埠资源的任务（loadClip方法），代码如下： <br>function initClips(){ <br>for (i=1; i&lt;=4; i++){ <br>this.attachMovie(&quot;img&quot;, &quot;img&quot; + i, i); <br>this[&quot;img&quot;+i]._x = i*110; <br>myMCL.loadClip(&quot;0&quot; + i + &quot;.jpg&quot; , <br>this[&quot;img&quot;+i]); //code wrapped <br>} <br>} <br><br>9、到这里基本上就完成了。现在我们剩下的工作就是注册侦听器并且按照需求调用相关函数、方法，反映到代码上就是以下两行： <br>myMCL.addListener(myListener); <br>initClips(); <br><br>注意这里的顺序，我们的侦听器对象在调用initClip()函数之前就被作用于MCL实例了。现在我们的MC的onPress事件可以顺利工作了，因为当图片被完全读入之后，事件才被分配过去。我们的代码也非常简洁。我们再也不用为了loading而去制作麻烦的循环了，MovieClipLoader帮我们完成了所有工作！ <br><br>附：完整代码如下： <br>stop(); <br>myMCL = new MovieClipLoader(); <br>myListener = new Object(); <br>myListener.onLoadComplete = function(targetMC) <br>{ <br>  targetMC.onPress = function () <br>  { <br>    trace(&quot;pressed&quot;); <br>  } <br>} <br><br>function initClips() <br>{ <br>  for (i=1;i&lt;=4;i++) <br>  { <br>    this.attachMovie(&quot;img&quot;,&quot;img&quot;+i,i); <br>    this[&quot;img&quot;+i]._x = i*110; <br>    myMCL.loadClip(url,this[&quot;img&quot;+i]); <br>  } <br>} <br>myMCL.addListener(myListener); <br>initClips(); <br><br>到此为止，你应该相信MCL确实是一个不可多得的好东西了吧？：） <br><br><br>==== <br><br><br>三、含有v2组件相关的问题 <br><br>V2，也爱，也恨！这里介绍关于含有V2组件项目的loading问题 <br>转载请注明原帖：http://www.awflasher.com/blog/?id=468 <br><br>V2组件自面世以来就颇受争议，大体概括如下： <br><br>优点： <br>·界面比V1组件更加美观、统一，人机交互模式更加完善 <br>·均采用面向对象脚本部署 <br><br>缺点 <br>·体积笨重，开发一些只用到一两个组件的小应用程序时很尴尬 <br><br>消息机制方面使用EventDispather的消息广播机制，取代原有的AsBroadcast机制。使得刚出来的时候很多人根本不会用。 <br><br>这里就不讨论更多了，先说loading。含有大量v2组件的产品要想见人肯定是不能不作loading的，比如aw's blog左边的那个blog小贴士。然而每次在loading的时候似乎都会遇到麻烦。那就是笨重的体积全部被放到第一帧导出了，这样导致对一些300k以内的，含有v2组件的SWF文件进行远程载入的loading效果变得捉襟见肘。 <br><br>解决的办法也不是没有，简单概括为三个步骤： <br><br>一、去掉“Export in first frame” <br>http://www.awflasher.com/blog/attachments/200603/24_153106_v2linkage.gif <br><br><br>二、在发布的时候设置一下“Export frame for classes”,这一点非常重要! <br>http://www.awflasher.com/blog/attachments/200603/24_153056_v2exporter.gif <br><br><br>三、对于外埠读取的含有V2的swf文件，将容器mc进行如下设置： <br>loader_mc._lockroot = true; <br><br>好了，现在放心享受精彩而笨重的V2组件吧~！ <br>本系列文章： <br>1 - [技术]原创-完美的loading-完美到底[基础] <br>http://www.awflasher.com/blog/article.asp?id=444 <br>结合原理介绍loading基础。 <br><br>2 - [技术]原创-完美的loading-完美到底[利器] <br>http://www.awflasher.com/blog/article.asp?id=468 <br>详细介绍MovieClipLoader类的使用，以及一些原理。 <br><br>3 - [技术]原创-完美的loading-完美到底[减负] <br>http://www.awflasher.com/blog/article.asp?id=470 <br>主要解决v2组件相关的loading，原文附图，至此，系列教程结束，应该不会再有loading的麻烦了！：） <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244696844#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 11 Jun 2009 05:07:24 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244696844</guid>
</item>

<item>
<title><![CDATA[Flash MX2004的新东东--new MovieClipLoader]]></title>
<link>http://43334728.qzone.qq.com/blog/1244622005</link>
<description><![CDATA[在FLASH MX2004之前的版本中，要loadMovie还得自己写，很麻烦，到了2004就不用烦了.<br>今天有空就研究了一下这个新东东MovieClipLoader，感觉很不错。<br>有些没有写到的属性，各位有兴趣可以去看看Help。<br>代码如下：<br>//定义一个loader<br>  MyLoader = new MovieClipLoader();<br>  //这个不用说了吧<br>  MyListener = new Object();<br>  //load完后对mc的初始化,这里我随便设定了一个值_x=0<br>  MyListener.onLoadInit=function(Target_MC){<br>  Target_MC._x=0;<br>  trace (Target_MC._x);<br>  }<br>  //load过程中执的语句，也就是方便我们显示load百分比的了<br>  MyListener.onLoadProgress = function(Target_MC, loadedBytes, totalBytes) {<br>  _root.msg2.text = loadedBytes+&quot;----&gt;&quot;+totalBytes;<br>  };<br>  //load开始时执行的语句，也就是告诉你，开始load了(废话)<br>  MyListener.onLoadStart = function() {<br>  _root.msg.text = &quot;Load begin&quot;;<br>  };<br>  //load出错时执行的语句<br>  MyListener.onLoadError = function() {<br>  _root.msg.text = &quot;Sorry! load error&quot;;<br>  };<br>  //load完成执行的语句  MyListener.onLoadComplete = function() {  trace (&quot;c&quot;);<br>  _root.msg.text = &quot;load completed&quot;;<br>  //这里我自己加的，因为在本地的时候load太快，所以执行不了play(执行play的时候，flash认为还没调入，<br>  //在网上测试的时候没这问题，如果你发现这里的语句没执行，你不妨试试 <br>  function lok(){<br>  _root.loadl.play();<br>  clearInterval(rok);<br>  }<br>  rok=setInterval(lok,1000);<br>  };<br>  //绑定侦听<br>  MyLoader.addListener(MyListener);  //这些不用说了吧了<br>  l1.onPress = function() {<br>  MyLoader.loadClip(&quot;1.swf&quot;, _root.loadl);<br>  };<br>  l2.onPress = function() {<br>  MyLoader.loadClip(&quot;2.swf&quot;, _root.loadl);<br>  }; <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244622005#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 10 Jun 2009 08:20:05 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244622005</guid>
</item>

<item>
<title><![CDATA[loadMovie/loadMovieNum使用详解]]></title>
<link>http://43334728.qzone.qq.com/blog/1244621748</link>
<description><![CDATA[在论坛技术区里待了这么久，发现对于这两个函数大家问的比较频繁，今天就在这里结合我自己的经验，详细的写一篇教程，希望能给大家以后的使用带来帮助。 <br><br>一、loadMovie(&quot;url&quot;,target [, method]) <br>描述：函数；在播放原始 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中目标影片剪辑的路径。 <br>首先我们可以看到该函数有3个参数：url、target、method。其中，最后一个参数“method”是一个可选参数。 <br>1.参数url：要加载的 SWF 文件或 JPEG 文件的绝对或相对 URL（路径）。 <br>这就是说这个url可以是本地的文件路径，也可以是Internet上的文件地址。但是，无论从何处加载，都只能是 SWF 或 JPEG 文件。并且，该参数是一个字符串，所以必须写在半角双引号中，如： loadMovie(&quot;01.swf&quot;, _root) <br>loadMovie(&quot;01.jpg&quot;, _root) <br>loadMovie(&quot;<a href="http://www.abc.com/01.swf" target="_blank">http://www.abc.com/01.swf</a><wbr />&quot;, _root)<br>loadMovie(&quot;<a href="http://www.abc.com/01.jpg" target="_blank">http://www.abc.com/01.jpg</a><wbr />&quot;, _root) <br> <br><br>2.参数target：指向目标影片剪辑的路径。目标影片剪辑将替换为加载的 SWF 文件或图像。 <br>这个参数表示要影片将被加载到的路径，它指向目标影片剪辑的路径。加载后，目标影片剪辑将替换为加载的 SWF 文件或图像。如： loadMovie(&quot;01.swf&quot;, _root) <br>loadMovie(&quot;01.swf&quot;, _root.loading) <br>loadMovie(&quot;01.swf&quot;, _root.loading.01)  <br> <br><br>3.参数method：可选参数，指定用于发送变量的 HTTP 方法。该参数必须是字符串 GET 或 POST。如果没有要发送的变量，则省略此参数。GET 方法将变量追加到 URL 的末尾，它用于发送少量的变量。POST 方法在单独的 HTTP 标头中发送变量，它用于发送大量的变量。 <br><br>二、loadMovieNum(&quot;url&quot;,level [, variables]) <br>描述：函数；在播放原来加载的 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中的某个级别。 <br>首先我们可以看到该函数有3个参数：url、target、variables。其中，最后一个参数“variables”是一个可选参数。 <br>1.参数url：要加载的 SWF 文件或 JPEG 文件的绝对或相对 URL（路径）。 <br>该函数的此参数和上面loadMovie中的此参数用法完全一致，这里不再作解释。 <br>2.参数level：一个整数，指定 SWF 文件将加载到 Flash Player 中的哪个级别。 <br>加载的时候，可以这样来写： loadMovieNum(&quot;01.swf&quot;, 1); <br>loadMovieNum(&quot;01.swf&quot;, 2); <br>loadMovieNum(&quot;01.swf&quot;, 3);  <br> <br> <br>控制的时候，可以这样使用： _level1._x=10 ;<br>_level2.aa._alpha=50 ;<br>_level3.aa.bb._width=110;  <br> <br><br>需要注意的的是，每一个级别只能同时存在一个 SWF 或 JPEG 文件。如果两个 SWF 或 JPEG 文件的级别相同，那么后者将替换掉前者。级别不同的_level，级别大的将覆盖掉级别小的，即：数字大的将处于数字小的之上。 <br>3.参数variables：可选参数，指定发送变量所使用的 HTTP 方法。该参数必须是字符串 GET 或 POST。如果没有要发送的变量，则省略此参数。GET 方法将变量追加到 URL 的末尾，它用于发送少量的变量。POST 方法在单独的 HTTP 标头中发送变量，它用于发送大量的变量。 <br><br>三、loadMovie/loadMovieNum 的定位 <br>我想，也许这才是大家真正要找的东东：） <br>1.loadMovie的定位 <br>由于用loadMovie加载进来的 SWF 或 JPEG 文件，最后是放置于目标影片剪辑里的，所以我们完全可以像控制MC的_x和_y，来控制加载到的目标影片剪辑。就好像我们在墙壁（_root）上挂上了一个相框（目标影片剪辑），然后又在相框里面放入（加载）了一张相片（SWF 或 JPEG 文件），那么当我们想挪动相片的位置的时候，只要移动相框的位置就可以了。 <br>比如在主场景中有一个实例名为aa的MC（坐标为(20,30)），我们要在里面加载一个02.swf文件，并且要加载后这个放到相框（_root.aa）中的相片（02.swf）出现在主场景（_root）坐标系的(50,100)处。代码如下： <br>loadMovie ( &quot;02.swf&quot; , _root . aa ); <br>_root . aa . _x = 50 ; <br>_root . aa . _y = 100 ; <br> <br> <br><br>在实际应用中，其实更加倾向于用AS创建一个空MC，然后在这个MC中加载外部 SWF 或 JPEG 文件。代码如下： <br>_root . createEmptyMovieClip ( &quot;aa&quot; , 1 ); <br>with ( aa ) { <br>   _x = 50 ; <br>   _y = 100 ; <br>   loadMovie ( &quot;02.swf&quot; ); <br>}  <br> <br><br>2.loadMovieNum的定位 <br>从前面我们已经知道了，函数loadMovieNum是将 SWF 或 JPEG 文件加载到_level（级别）的。并且是用_level1._x、_level2._x、_level1.aa._x之类的来定位的。比如我们要将02.swf加载到主场景坐标系的(50,100)中，代码如下： loadMovieNum ( &quot;02.swf&quot; , 1 ); <br> _level1 . _x = 50 ; <br> _level1 . _y = 100 ;  <br> <br><br>但是在测试的时候大家会发现加载进来的02.swf并没有如我们预期的那样出现在主场景坐标系的(50,100)位置，这是为什么呢？ <br>原来，在没有使用loadMovieNum以前，所有的图形、MC等等都是处于_level0里的，我们通常使用的_root其实就是_level0。你可以作个测试：trace(_root==_level0)，你会发现返回值是“true”。 <br>那么，我们用loadMovieNum加载 SWF 或 JPEG 文件的时候，程序就要对你指定的_level进行创建，随后再紧接着载入 SWF 或 JPEG 文件。如果像刚才代码中写的那样，不判断_level是否存在而调用其属性，势必无功而反。 <br>解决的方法也很简单，就是用一个循环来判断指定的_level是否存在。一旦_level产生，那么它的种种属性自然可以调用了。代码如下： <br>loadMovieNum ( &quot;02.swf&quot; , 1 ); <br>onEnterFrame = function () { <br>  if ( _level1 ) { <br>    with ( _level1 ) { <br>        _x = 50 ; <br>        _y = 100 ; <br>    }<br>    delete onEnterFrame ; <br>  } <br>};  <br> <br><br>或者： <br>loadMovieNum ( &quot;02.swf&quot; , 1 ); <br>function go () { <br>  if ( _level1 ) { <br>    with ( _level1 ) { <br>        _x = 50 ; <br>        _y = 100 ; <br>    } <br>    clearInterval ( fps ); <br>  } <br>} <br>fps = setInterval ( go );  <br> <br> <br>再或者大家可以使用Macromedia Flash MX 2004中的MovieClipLoader类来判断加载状态。<br> <!--v:3.2--> ]]></description>
<category><![CDATA[FLASH(1)]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1244621748#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 10 Jun 2009 08:15:48 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1244621748</guid>
</item>

<item>
<title><![CDATA[老毛桃WinPE工具安装--U盘安装系统]]></title>
<link>http://43334728.qzone.qq.com/blog/1235345527</link>
<description><![CDATA[【转载】老毛桃WinPE工具安装--U盘安装系统 <br>2009年02月04日 星期三 11:27 <br>老毛桃WinPE工具安装--U盘安装系统 <br> <br><br>在安装系统前，需要准备好一些东西。一个是操作系统的镜像，另一个就是能启动的U盘。下面我们就来讲解怎么安装deepin版的XP系统。 注：读懂本文需要了解安装操作系统的一些基础知识。 <br>●老毛桃WinPE下载地址： <a href="http://www.rayfile.com/files/129839fa-be2e-11dd-81fd-0014221b798a/" target="_blank">http://www.rayfile.com/files/129839fa-be2e-11dd-81fd-0014221b798a/</a><wbr /> <br><span style="color:#800000;line-height:1.8em;">提取码：129839fa-be2e-11dd-81fd-0014221b798a</span><wbr /> <br>首先是制作一个能启动电脑的带WindowsPE的启动U盘 <br>　　先到网上去下载一个叫“老毛桃WinPE”的工具到硬盘里，再把U盘接在电脑上，然后按下面的步骤一步步来就可以制作一个能启动的U盘了。 <br><div style="text-align:center;"><wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/413266892e7a14d186f253395bb9b97f" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/413266892e7a14d186f253395bb9b97f" /></a><wbr /> </div>选第4项，然后回车<br><div style="text-align:center;"><wbr /><a href="http://i2.sinaimg.cn/IT/h/2008-03-03/1f77c2d798caa6132df9232757fce238" target="_blank"><img style="border:0;" src="http://i2.sinaimg.cn/IT/h/2008-03-03/1f77c2d798caa6132df9232757fce238" /></a><wbr /> </div>输入U盘的盘符，然后回车<br><div style="text-align:center;"><wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/d1bf657007eadd4ffb67c0be77148758" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/d1bf657007eadd4ffb67c0be77148758" /></a><wbr /> </div>来到格式化步骤，按默认的设置，点“开始”就行<br><div style="text-align:center;"><wbr /><a href="http://i2.sinaimg.cn/IT/h/2008-03-03/e9dd03eb99047e9f0126a3a20631db8f" target="_blank"><img style="border:0;" src="http://i2.sinaimg.cn/IT/h/2008-03-03/e9dd03eb99047e9f0126a3a20631db8f" /></a><wbr /> </div>顺利格式化<br><div style="text-align:center;"><wbr /><a href="http://i0.sinaimg.cn/IT/h/2008-03-03/486a1089a1ebba04f86efa95291389f0" target="_blank"><img style="border:0;" src="http://i0.sinaimg.cn/IT/h/2008-03-03/486a1089a1ebba04f86efa95291389f0" /></a><wbr /> </div>引导部分<br>　　这里要说明一下，在“设备”里有两个选项，一个是电脑的硬盘，一个是要制作的U盘。这里一定要选对U盘而别选错硬盘，从大小就能分出来哪个是U盘。笔者的U盘是2G的，所以应该选择（hd1）[1898M]。下面的“选项”部分可以不用管，默认不勾选任何参数就行。确认好以上步骤后，点“安装”然后进行下一步。 <div style="text-align:center;"><wbr /><a href="http://i0.sinaimg.cn/IT/h/2008-03-03/8a5f86679f9f76841a3bfe953e2488ad" target="_blank"><img style="border:0;" src="http://i0.sinaimg.cn/IT/h/2008-03-03/8a5f86679f9f76841a3bfe953e2488ad" /></a><wbr /> </div>写入引导完毕，按任意键继续<br><div style="text-align:center;"><wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/6c9c165039ab2ada8649abc081de9233" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/6c9c165039ab2ada8649abc081de9233" /></a><wbr /> </div>要给启动U盘设个密码<br>　　本来笔者不想设置启动U盘的密码，但这个步骤不能跳过，所以没办法只好设了一个密码。设置完后，一定要牢记你设好的密码，否则启动U盘会无法使用。 <div style="text-align:center;"><wbr /><a href="http://i0.sinaimg.cn/IT/h/2008-03-03/7487aa37c17cc2f3e0e47ac5eb0c7cb3" target="_blank"><img style="border:0;" src="http://i0.sinaimg.cn/IT/h/2008-03-03/7487aa37c17cc2f3e0e47ac5eb0c7cb3" /></a><wbr /> </div>制作完毕<br>　　当你完成以上步骤后，恭喜，一个具有启动功能的U盘已经来到你的身边。你再也不用心烦没有光驱不能从光驱启动了，因为以后你可以从U盘启动再安装操作系统！想知道怎么操作吗？下一页就开始。 <br><span style="font-weight:bold"><wbr /><span style="color:#ff0000;line-height:1.8em;">● 把电脑的第一启动项设为USB设备启动-----修改BIOS后记得保存哦！快捷方式一般F10! <br>　　以往用光盘装系统，必须调整启动项为光驱启动，而现在我们要用U盘装系统，所以要调整为U盘启动。关于这个，不同电脑不同版本的bios有不同的设置方法，不过都大同小异，目的就是让电脑的第一启动项变为U盘启动。下面我们举例几个不同bios的调整方法。 <br><div style="text-align:center;"><wbr /><a href="http://i1.sinaimg.cn/IT/h/2008-03-03/58a505bc3872c93b3a5e5faee6712978" target="_blank"><img style="border:0;" src="http://i1.sinaimg.cn/IT/h/2008-03-03/58a505bc3872c93b3a5e5faee6712978" /></a><wbr /> </div>最常见的Phoenix-Award的bios选项，选择USB-HDD即可<br><div style="text-align:center;"><wbr /><a href="http://i1.sinaimg.cn/IT/h/2008-03-03/95a3e0e55202d730958b628eccc9f355" target="_blank"><img style="border:0;" src="http://i1.sinaimg.cn/IT/h/2008-03-03/95a3e0e55202d730958b628eccc9f355" /></a><wbr /> </div>dell品牌机的bios调整选项<br><div style="text-align:center;"><wbr /><a href="http://i2.sinaimg.cn/IT/h/2008-03-03/dc7e56b34ef9e7f137dcb5e5c8fd3649" target="_blank"><img style="border:0;" src="http://i2.sinaimg.cn/IT/h/2008-03-03/dc7e56b34ef9e7f137dcb5e5c8fd3649" /></a><wbr /> </div>ThinkPad系列笔记本的BIOS<br><div style="text-align:center;"><wbr /><a href="http://i1.sinaimg.cn/IT/h/2008-03-03/b6e056a47e9ce4bd5e4d4914321737c4" target="_blank"><img style="border:0;" src="http://i1.sinaimg.cn/IT/h/2008-03-03/b6e056a47e9ce4bd5e4d4914321737c4" /></a><wbr /> </div>惠普商用系列笔记本的BIOS<br>　　可以看到以上的bios选项都各不相同，但是调整的选项都是为了一个目的：把电脑的启动项设为从USB设备启动，这样才能达到从U盘启动电脑的效果。 ● 用能启动的U盘安装XP <br><div style="text-align:center;"><wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/e4f22d4aa22b18035bef23a1765e3e7b" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/e4f22d4aa22b18035bef23a1765e3e7b" /></a><wbr /> </div>先把具备启动功能的U盘接上电脑<br><div style="text-align:center;"><wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/9e1b506fade10e3b7075968544979b5f" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/9e1b506fade10e3b7075968544979b5f" /></a><wbr /> <wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/7d1e6f6c71d9c5447ef378520764b920" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/7d1e6f6c71d9c5447ef378520764b920" /></a><wbr /> </div>启动电脑<br>　　启动电脑后，会要求你输入启动U盘的密码，也就是前文在制作这个启动U盘时设置的密码。当你输入正确的密码后，即可看到一个选择菜单，选择“WinPE By：MAOTAO”。 <div style="text-align:center;"><wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/a9ad5a2c0e3308b052a392178fe1ac38" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/a9ad5a2c0e3308b052a392178fe1ac38" /></a><wbr /> </div>进入WinPE<br><div style="text-align:center;">我们启动另外一个WinPE自带的软件诺顿Ghost。用它来把系统的ghost镜像恢复到之前被格式化的电脑的C盘里。</div><div style="text-align:center;"><wbr /><a href="http://i2.sinaimg.cn/IT/h/2008-03-03/f5700f0703929356dcee4454f216ecd2" target="_blank"><img style="border:0;" src="http://i2.sinaimg.cn/IT/h/2008-03-03/f5700f0703929356dcee4454f216ecd2" /></a><wbr /> <wbr /><a href="http://i3.sinaimg.cn/IT/h/2008-03-03/f4413f4dbb67b6295bd6de7087c1964a" target="_blank"><img style="border:0;" src="http://i3.sinaimg.cn/IT/h/2008-03-03/f4413f4dbb67b6295bd6de7087c1964a" /></a><wbr /></div><div style="text-align:center;"><wbr /><a href="http://i2.sinaimg.cn/IT/h/2008-03-03/90fa3b9ff4cfb6c70b736f7ec85443c4" target="_blank"><img style="border:0;" src="http://i2.sinaimg.cn/IT/h/2008-03-03/90fa3b9ff4cfb6c70b736f7ec85443c4" /></a><wbr /> <wbr /><a href="http://i1.sinaimg.cn/IT/h/2008-03-03/0f6f9efa3bc9d8f284afb2951f092f27" target="_blank"><img style="border:0;" src="http://i1.sinaimg.cn/IT/h/2008-03-03/0f6f9efa3bc9d8f284afb2951f092f27" /></a><wbr /> </div>跟平时使用GHOST的步骤没什么两样<br>　　启动GHOST后，使用方法就和通常使用GHOST来恢复系统没什么区别了。先选择From Image，然后找到虚拟光驱载入的光盘目录，把GHOSTXP.GHO选上，接着选要恢复到的硬盘，然后选择要恢复到的分区。 <div style="text-align:center;"><wbr /><a href="http://www.45it.com/Article/UploadFiles/200803/20080303142736277.jpg?2008-03-03 07:02:17" target="_blank"><img style="border:0;" src="http://www.45it.com/Article/UploadFiles/200803/20080303142736277.jpg?2008-03-03 07:02:17" /></a><wbr /> </div>点击YES，等着它恢复完就行<br>　　前面都选择好之后，会弹出一个对话框问你是否要将指定的GHO镜像恢复到电脑的C盘去，点击yes就可以。 <div style="text-align:center;"><wbr /><a href="http://www.45it.com/Article/UploadFiles/200803/20080303142736932.jpg?2008-03-03 07:02:17" target="_blank"><img style="border:0;" src="http://www.45it.com/Article/UploadFiles/200803/20080303142736932.jpg?2008-03-03 07:02:17" /></a><wbr /> </div>重启进入系统，重装完毕<br>　　当GHOST镜像恢复完毕后，即可重启进入系统。至此，用U盘安装操作系统完毕！你可以忘掉没有光驱无法安装操作系统的烦恼了。 　　值得一提的是，由于整个过程都是在硬盘里读取数据，所以在安装速度上比用光盘安装快很多。 <br>　　其实这只是用U盘安装系统的其中一种方法而已，还有很多其它方式可以安装系统，本文就不再一一举例。也许细心的你已经发现，有了这个启动U盘，就不用再害怕系统崩溃后，重要的资料保存在C盘里而无法挽救了，因为只要你用U盘启动WinPE，就可以进去将重要资料备份到其它分区里。希望网友们可以根据这个举一反三，灵活运用WinPE这个安装在U盘上的非常使用的工具。 <br></span><wbr /></span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[电脑类]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1235345527#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Sun, 22 Feb 2009 23:32:07 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1235345527</guid>
</item>

<item>
<title><![CDATA[photo]]></title>
<link>http://43334728.qzone.qq.com/blog/1200358990</link>
<description><![CDATA[<wbr /><a href="http://photo.store.qq.com/http_imgload.cgi?/rurl2=6e037218b54b828ec8a63f3e371e74ec17ff83eccbcb787beceec67b9966370951255d919f92a4ef0ae4b8152996d382c7ab35abe3c7a7642335b429cac19aaeebe39b81262c1082b64ac501048fd89cf2e98dbb" target="_blank"><img style="border:0;" src="http://photo.store.qq.com/http_imgload.cgi?/rurl2=6e037218b54b828ec8a63f3e371e74ec17ff83eccbcb787beceec67b9966370951255d919f92a4ef0ae4b8152996d382c7ab35abe3c7a7642335b429cac19aaeebe39b81262c1082b64ac501048fd89cf2e98dbb" /></a><wbr /> <br> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[43334728@qq.com(爱玲说)]]></author>
<comments>http://43334728.qzone.qq.com/blog/1200358990#comment</comments>
<qz:effect>513</qz:effect>
<pubDate>Tue, 15 Jan 2008 01:03:10 GMT</pubDate>
<guid>http://43334728.qzone.qq.com/blog/1200358990</guid>
</item>

</channel>
</rss>

