<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
	<channel>
		<title>金麦网络</title>
		<link>http://www.kingmx.com</link>
		<copyright>Copyright (C) 2006 金麦网络-Kingmx.com All Rights Reserved.</copyright>
		<item>
			<title>商业flash设计经验谈(视觉冲击力)</title>
			<link>http://www.kingmx.com/article.php?id=14919</link>
			<pubDate>2007-1-8</pubDate>
			<description><![CDATA[四、视觉冲击力 
酷眩Flash，是否有视觉冲击力是很重要的，不是晃的人眼晕就是有冲击力。视觉冲击不应该过多，而且要在合理的地方出现。那么怎样设计有冲击力的动画呢？ 
1、速度 
高速度本身就产生了视觉冲击，但在众多高速运动的物体中，缓慢运动的物体反而更引人瞩目了。因此除了高速、变速，跟周围环境差异大的运动速度，都能给人带来一定的视觉影响。 
2、面积 
毫无疑问，大面积的运动能带来更大的冲击力，但一定要在不给人造成心理压力的前提下。如果面积很小而且无法扩大，高速闪动是个不错的选择。 
3、动作 
一般来说，高速缩放是最能带来视觉冲击的。位移其次，其它是各种各样的特殊效果，其实这和环境的关系很大，动作特殊往往就会带来不错的效果。 
4、颜色 
颜色与面积关系很大，我们经常可以在影视片断当中看到这样的处理，两个片断之间，突然白屏，然后画面渐出。给人很强的视觉冲击，可以说颜色变化的越大视觉冲击就越强。我们可以经常在一些优秀作品当中看到物体往往会变白以后再移动，因为白色最亮，自然会非常抢眼。这只是一个典型的例子，颜色的变化还要依据动画的整体风格，不可生搬硬套。 
说了这么多，制造又酷又眩的Flash，首先要从平面效果下手，设计合理美观的表现方式。然后利用各种动态效果和适当的元素去表达所需要传达的概念。动画设计的过程重要从节奏、速度、冲击力等几个方面去考虑！希望这篇文章能够起到抛砖引玉的作用，使大家能够更多的注意到优秀作品的科学合理性，更深层次的去挖掘适合Flash动画的表现方式！ 
]]></description>
		</item>
		<item>
			<title>商业flash设计经验谈(速度感)</title>
			<link>http://www.kingmx.com/article.php?id=14918</link>
			<pubDate>2007-1-8</pubDate>
			<description><![CDATA[三、速度感 
既然是酷眩Flash就一定要有很好的速度感，如果你在以下几个方面注意了就会发现，速度感觉不仅仅是动作快就能够满足的。 
1、移动模糊 
熟悉photohsop的人都知道motion blur，移动模糊是模拟人眼看到高速运动的物体时的样子（如图13）。由于人眼的视觉停留，高速运动的物体都会延他的运动路径被拉长，就象你看到高速公路上奔驰的车流，是彩色的线组成的一样。我们可以在photoshop或者flash里制造物体的移动模糊效果，当需要物体高速位移可以采用经过motion blur处理后的物体替代。当运动结束时再换之真正的物体，视觉上就会觉得物体运动的速度极高。还有缩放模糊（如图14）、旋转模糊都可以应用在flash中，例如表现镜头的高速缩放、高速旋转等等。。 
&nbsp; 
300)this.width=300" border=0 zzzpop="点击这里用新窗口浏览图片"> 
300)this.width=300" border=0 zzzpop="点击这里用新窗口浏览图片"> 
&nbsp; 
2、速率 
这里说的速率即FPS(每秒钟播放桢数)（如图15），这个速率合适与否直接影响了动画的播放速度、占用cpu资源，最重要的是影响了流畅度。理论上说，当然是fps越高，占用cpu资源越重，也就是说可能反而会断断续续。一般情况下24-40是一个合理范围，在这个速率内的动画显得非常流畅，同时耗资源也不是很重。 
&nbsp; 
300)this.width=300" border=0> 
3、加速度 
通俗的说加速度就是速度越来越快，当然也有反向的，在flash中就体现在frame标签里的easing的值（如图16），加速度在动画中的作用，是使元素的运动更接近自然界的运动，例如物体呈抛物线运动的时候，速度应该是越来越慢的，而下落的物体应该是越来越快的。一般来说从运动到静止的物体都是逐渐减速的，反之是逐渐加速的。总之掌握好物体运动的加速度，是把握物体运动更自然更人性化的关键因素。 
&nbsp; 
300)this.width=300" border=0> 
4、反弹 
反弹是自然界最常见的物理现象，动画中也常常会用到它，特别是在设计卡通风格的动画中由为重要。简单地说是使物体动的看起来有弹性，例如文字落下时没有马上静止而是向上弹了一、二下才静止，使得文字看上去充满了生气。弹性配合加速度，就可以体现物体的重力和运动的真实程度了。 
5、惯性 
又是一个常见的物理现象，和加速度相反，惯性的表现一般用在突然发生动作或者突然静止的时候，例如物体要高速向前运动时，可以先稍稍得向后运动一点，来表现原来静止带来的惯性。高速运动的物体突然停止的时候，可以给它以形变，然后恢复，体现高速运动的惯性。惯性大会显得很卡通，轻微的体现惯性则更自然。 
]]></description>
		</item>
		<item>
			<title>商业flash设计经验谈(节奏控制)</title>
			<link>http://www.kingmx.com/article.php?id=14916</link>
			<pubDate>2007-1-8</pubDate>
			<description><![CDATA[二、节奏控制 
好的动画应该是视觉冲击与信息传达相结合，流畅充满美感，这些都需要我们为动画设计一个好的整体节奏。 
1、起伏 
假如我告诉你我要做一个片头动画，动画的开始（引子）是一段渐起的音乐，动态柔和唯美，随着音乐的渐强达到高峰，也进入动画第2阶段，这是动画主体也是信息传达的主要时期，在连续高速的动画过后音乐嘎然而止，进入结束画面，也就是整个动画的结尾。那么这个动画的整体节奏起伏是什么样子呢？如下图：（如图8）。这种节奏更适合做介绍产品的动画，叙事性强。 
&nbsp; 
300)this.width=300" border=0> 
节奏起伏还可以有很多种，比如快慢交替，不管是什么节奏，都是为传达设计者的概念而服务。我们在观看优秀的Flash作品的时候一定要注意观察他的整体节奏，以及节奏与传达概念之间的联系。这也是动画的精髓所在。 
2、交替 
在具体的元素动态效果上，我们经常会采取速度交替的动态效果。例如，文字从画面的左部飞入，速度飞快， （如图9）到达目标位置以后速度减慢，右部飞入更大，透明度更低的相同文字。（如图10）两文字交错而行，速度很慢（图11）。这种速度与位置的交错，满足了动画对速度的需求，也实现了清楚传达信息的目的！ 
&nbsp; 
300)this.width=300" border=0> 
300)this.width=300" border=0> 
300)this.width=300" border=0> 
&nbsp; 
&nbsp; 
3、效果 
不同的动画节奏，需要不同的动画效果来处理。节奏悠扬舒缓，元素的动态效果也多采用移动、淡入淡出、条形遮罩、单线条等表现方式。如果节奏紧张、快捷，则多采用闪动、高速位移、旋转、耀眼光芒等表现方式。效果没有定式，我们可以学习大师作品的精髓，但也要有原创的东西。好的Flash作品不是效果的累加，再好的效果不能为内容服务，也是累赘。（如图12） 
&nbsp; 
300)this.width=300" border=0>&nbsp;
]]></description>
		</item>
		<item>
			<title>商业flash设计经验谈(设计流程)</title>
			<link>http://www.kingmx.com/article.php?id=14906</link>
			<pubDate>2007-1-8</pubDate>
			<description><![CDATA[一、设计流程 
这里所说的流程就是Flash设计时的工作流程，不论是小组还是个人，这个流程的每一个环节都是必不可少的。 
1、静态效果图结构图 
任何动画都离不开平面美术，就像好的电影有一个好的美术指导一样。因此在做Flash之前，我们应该先使用photoshop等软件将整个Flash动画中，几个关键场景和出现元素的效果图画出来。（如图1、2、3）这是一个宣传CDMA移动电话网的片头，设计风格：科技、高速、精准。这3张效果图本身也标志了动画的结构：引子、动画主体、结束总结。如果动画结构更加复杂，比如动画主体当中还有转场等情况，也需要画出更多相应的效果图。 
&nbsp; 
300)this.width=300" border=0 zzzpop="点击这里用新窗口浏览图片"> 
300)this.width=300" border=0 zzzpop="点击这里用新窗口浏览图片"> 
300)this.width=300" border=0> 
&nbsp; 
&nbsp; 
2、动画设计 这一步我们要按照设计好的效果图，具体来设计整个动画，其实也就是用各种动态效果把静态效果图中的元素串联起来。 
（如图4） 
&nbsp; 
300)this.width=300" border=0> 
为了不使我们的动画成为流水帐，需要使动画有明显的节奏感，并在结构上有明显的过渡，当然过渡也要合理、流畅，不能生硬、唐突。下图中（如图5、6），就是一个结构过渡其中的2桢，图5中，一直在两端的灰色板块一至向中心移动。使整个画面过渡到灰色，图6中文字斜飞出，灰白底框渐出。这样就形成了明显的结构过渡。 
&nbsp; 
&nbsp; 
300)this.width=300" border=0> 
300)this.width=300" border=0> 
3、配音 理论上讲，音乐应该在动画结构设计的时候就开始制作。但是，国内的Flash设计一般都是1，2个人完成，很难有专人配乐。一般都是在动画设计完成以后，从素材库中找一些合适的音乐进行配音。好一点的可能也会根据音乐来设计动画。不管是什么顺序，最重要的就是合适，风格、节奏的合适才能使画面和音乐浑然一体。（如图7） 
&nbsp; 
300)this.width=300" border=0>&nbsp;
]]></description>
		</item>
		<item>
			<title>loading制作方法</title>
			<link>http://www.kingmx.com/article.php?id=14903</link>
			<pubDate>2007-1-8</pubDate>
			<description><![CDATA[&nbsp; 为什么要作个loading呢？这是避免观众在等待比较大的文件时的不耐烦，而有了进度的表示，则会较好的避免了这一问题。需要注意的是，不要盲目做LOADING，只有在下载大的图片、声音文件时才有这必要！ 
&nbsp; 本例子中，就使用了一个较大声音文件和一个3D动画文件。 
1.选择好舞台的大小、背景； 
2.引入例子中的声音文件； 
3.这样lesson3的声音文件就被引入到了library中了！ 
4.同样，我们也引入了两个3D物件； 
&nbsp; （至于这个3D是如何制作的，我将在以后的文章中详细说明，这里就不具体谈了） 
5.这样，基本素材我们选取完毕了，开始制作进度条了。 
&nbsp; 我们先新建一个symbol 
6.我们命名这个symbol为："red line"，并设为" Movie Clip"属性； 
7.在这个"Movie Clip"中，我们建立一个表示进度的动画共10帧； 
8.我们在建立一个新的symbol，命名为"red"属性为"Graphic" 
9.把刚才作好的"red line" symbol，作个instance到此"red" symbol中，方法：从Library中直接拖 "red line" symbol； 
10.我们所需要的道具都已经制作完毕了，现在我们回到舞台Scene上来. 
&nbsp; 因为声音和3D物件都是我们需要在LOADING中判断的物件，所以要单独分别放在各自的层中。 
&nbsp; 建立一个声音层(layer)，命名"sounds"，建立一个3D物件的层，命名"cube" 
11.我们在20、25帧处分别给"cube","sounds"设置一个keyframe 
&nbsp; 方法是：在相应帧点击右键，选择insert keyframe 
&nbsp; 在sounds层第20帧中添加"lesson3" 声音文件，在cube层中添加3D物件。 
12.再添加一个welcome的信息（这个完全看你的兴趣爱好，并不是必须的！） 
13.如何让我们的FLASH文件及时通知用户文件的进展呢？下面的步骤就是关键了！ 
&nbsp; 建立一个新的层命名为"action" 
&nbsp; 分别在第1、5、10帧处设置一个keyframe，并添加不同的文字物件 
14.再再第5、10帧的后面一帧新建立一个keyframe，分别命名为"back1","back2" 
15.下面就要用到了FLASH中一个重要的核心内容Action命令了。 
&nbsp; 我们在第5帧的设计思想是：当判断第20帧（声音文件）已经被加载后，跳转到第10帧，进而由第10帧来判断3D文件是否被下载了。 
&nbsp; 运用Action中"If Frame is Loaded" 
&nbsp; 在第6帧（label:back1)的设计思想是：如果在第5帧中的判断语句不成立，必然会执行第6帧，我们就循环来判断，直到判断成立（即声音文件上载成功） 我们用到的Action命令是：go to 
&nbsp; 同样的道理，我们在第10帧处判断3D文件上在成功后，就开始运行MAIN文件。（MAIN文件从20帧开始） 
&nbsp; 在第11帧跟第6帧的命令一样，作用也一样。 
16.LOADING的关键部分已经完成了。我们现在要把进度条加上，使得这一个过程更为显眼。 
&nbsp; 新建立一个layer"red" 
&nbsp; 在第5、10帧处加上keyframe，并都将先前作好的"red" symbol，作个instance放到第5、10帧上。 
&nbsp; 方法还是一个字：”拖“ 
17.这样我们的loading就作完了。 
&nbsp; 总结：我的这个例子中用了两个判断语句，这是因为我的例子中有两个物件（声音、3D）比较大，如果你在做LOADING是，应该根据自己的实际情况来设置判断语句。 
]]></description>
		</item>
		<item>
			<title>flash中Actions动作函数的综合应用(6)</title>
			<link>http://www.kingmx.com/article.php?id=13425</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
Flash MX中的动作函数命令

8.4 Actions动作函数的综合应用(6)

&nbsp;&nbsp;&nbsp;&nbsp; 
(21) 使用工具箱中的文本工具，在窗口中分别创建文本“重新开始”，并将其拖动到按钮符号的中间，如图8-27所示。



图8-27&nbsp; 创建按钮文本

(22) 在舞台中按钮上单击鼠标右键，从弹出的快捷菜单中选择Actions命令，在打开的Actions–Button面板右侧的编辑框中输入以下代码：

on(Release) {

tellTarget("1") 

{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;gotoAndStop(6);

}

tellTarget("2") 

{

gotoAndStop(14);

}

tellTarget("3") 

{

gotoAndStop(4);

}

tellTarget("4") 

{

gotoAndStop(16);

}

tellTarget("5") 

{

gotoAndStop(1) ;

}

tellTarget("6") 

{

gotoAndStop(10);

}

tellTarget("7") 

{

gotoAndStop(7);

}

tellTarget("8") 

{

gotoAndStop(15);

}

tellTarget("9") 

{

gotoAndStop(3) ;

}

tellTarget("10") 

{

gotoAndStop(8);

}

tellTarget("11") 

{

gotoAndStop(13);

}

tellTarget("12") 

{

gotoAndStop(2) ;

}

tellTarget("13") 

{

gotoAndStop(11);

}

tellTarget("14") 

{

gotoAndStop(5);

}

tellTarget("15") 

{

gotoAndStop(12);

}

tellTarget("16") 

{

gotoAndStop(9);

}

}

这段程序用来重新设置所有数字的顺序，回到游戏的最初状态。

至此，我们完成了整个游戏的制作，界面如图8-28所示。用户可以参照这个游戏的制作原理来设置更多的方块，也可以为游戏再添加一些关键帧，以便在完成一个Puzzle任务后，进入下一个难度更大的Puzzle，当然，用户也可以将自己制作好的游戏放到自己的网页中。



图8-28 &nbsp;完成后的Puzzle游戏
 ]]></description>
		</item>
		<item>
			<title>Flash制作动画之掌握基本按钮知识</title>
			<link>http://www.kingmx.com/article.php?id=13422</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            问题1:如何制作按钮?为什么我制作的文字按钮,很不容易点击到? 
　　解决思路 

　　在按钮编辑区的时间轴上只有四个帧,第4帧的”点击”是按钮的反应区,这个区域在舞台中是看不到的,但是他却起到了按钮反应的作用。我们扩大按钮的反应区,既可以轻易的用鼠标点击到这个按钮了。 

　　具体步骤 

　　1、运行Flash&nbsp;MX&nbsp;2004，文档属性默认。 

　　2、新建一个元件，命名为“按钮”，类型设定为按钮元件。 

　　3，进入按钮编辑区，时间轴上面一共有四个帧。这四个帧的作用已经在第一章中向大家介绍过了。如图所示。 



按钮元件的时间轴 

　　4、在第1帧中单击工具栏里面的矩形工具绘制一个蓝色的矩形。 

　　5、返回到场景1，从“库”中把这个按钮拖动到舞台中。 

　　6、发布测试效果，我们看到当鼠标放到这个按钮上面的时候，鼠标变为小手形状，说明制作的这个按钮成功。 

　　7、在实际的创作中，因为舞台中的元件很多，为了区分元件的种类，需要在按钮上面写上说明，那么我们就来实际制作一下。 

　　8、双击“库”中按钮元件，进入按钮编辑区。 

　　9、在图层面板中新建图层2，单击文本工具键入“button”，调整位置。如图所示。 



加入文字图层 

　　10、返回到场景1测试，按钮上面已经有了一个标志名字，按钮的功能没有受到影响。如图所示。 



按钮效果

　　11、这种按钮的制作方法是最为简单的，它不涉及到反应区的问题。因为蓝色的矩形部分已经在舞台中显露出来，只要点击蓝色区域都可以执行按钮的作用。在一些Flash作品中由于整体视觉效果的要求，往往出现一些只有文字，没有背景的按钮。这样就涉及到了问题中所提到的反应区的问题。&nbsp; 

　　12、进入按钮元件编辑区，在第1帧中键入文字“PLAY”，制作一个播放按钮。如图所示。 



键入文字 

　　13、返回到场景1发布测试按钮效果，发现鼠标不是很轻易的就会点击到按钮。其原因是按钮的反应只限制在文字的线条上面。

　　14、解决这个问题，可以采用两种方法。第一种方法，进入按钮元件编辑区，在第4帧中利用矩形工具画一个矩形，放在“PLAY”的下方，以扩大它的反应区。因为第4帧“点击”中的内容在发布作品的时候是看不见的，所以我们可以使用任意颜色。如图所示。 



在“点击”帧插入矩形 

　　14、发布测试效果，因为按钮反应区的扩大，就很轻易的点击到按钮了。请参考源文件点击这里下载源文件。

　　15、另外一种方法是新建一个图层，在按钮元件编辑区的第1帧画一个透明的矩形，因为矩形虽然是透明的，在舞台中是看不见的，但是它还会起到一个形状的作用，这样在第1帧扩大了按钮的反应区域。如图所示。 



插入透明矩形 

　　16、这种制作方法也可以制作出非常好用的文字按钮。请参考源文件点击这里下载源文件

　　注&nbsp;&nbsp;意&nbsp;&nbsp;——对按钮的测试，我们用【控制】菜单里面的【播放】命令或者使用快捷键“Enter”是无法测试的。我们要单击【文件】菜单下的【发布】命令或者使用组合快捷键“Ctrl+Enter”来进行发布测试。 

　　提&nbsp;&nbsp;示&nbsp;&nbsp;——朋友们普遍对按钮的四个帧里面的最后一个帧的作用不是很理解，这个帧就是按钮的反应区，在场景中是看不到的，制作隐形按钮就要利用这个帧。

　　技&nbsp;&nbsp;巧&nbsp;&nbsp;——按钮是一部作品中不可或缺的重要组成部分，制作按钮时，应考虑到整体作品的风格。 

　　试一试&nbsp;&nbsp;——我们向大家介绍了文字按钮的制作方法，大家不妨试一试，因为这种按钮在每个作品中都要使用的。

　　分&nbsp;&nbsp;析——出现这个问题的根本原因有两个：第一，朋友们对按钮制作的不重视性，认为按钮只是一个附属的东西，对于作品整体的主体表现没有太多的作用，所以也忽视了按钮的细节制作；第二，朋友们对第4帧“点击”的知识的不了解。 

　　特别提示

　　按钮作为一个Flash动画作品中实现交互作用的媒介，起到了非常重要的作用。因为本文所附源文件中并没有涉及到按钮的控制问题，所以只能利用鼠标放置到按钮上显现的小手形状来测试按钮。 

　　特别说明

　　通过对这个问题的解释，我们了解了基本按钮的制作方法和怎样制作文字按钮。我在欣赏闪吧承办的“衡雅杯”环保FLASH比赛的时候，发现许多朋友制作的文字按钮都没有采取扩大反映区的手段。以至考验欣赏者使用鼠标的灵活程度，对作品的欣赏带来第一印象的厌烦感。 

　　相关问题

　　◎一部Flash作品需要使用那些必要的按钮？ 

　　由于按钮的应用十分广泛，所以在Flash作品中可以用按钮制作非常有趣的效果。对于控制一部完整得FLASH动画作品而言，一般需要两个按钮：播放（PLAY）和返回（REPLAY）。以用于影片的播放和重放。 

　　◎可以使用图形来作为按钮吗？ 

　　因为按钮中的帧在操作上与其他元件的帧没有什么大的区别，所以我们可以利用图形来作为按钮，还可以采用其他的形式来制作按钮。在下面的问题中我们将向大家详细地介绍。 

　　◎如何用按钮来控制影片？ 

　　刚才我们说到了一部完整的作品需要两个按钮,一个播放按钮一个返回按钮.那么这两个按钮是怎样实现对影片的控制的呢?这就涉及到了Flash&nbsp;的ActionScript。按钮与Flash脚本语言（ActionScript）的联系是非常紧密的。下面我们就制作一个影片控制按钮。我们新建一个Flash&nbsp;MX&nbsp;2004文档，在舞台的时间轴上制作出一段简单的动画效果。如图所示。 



制作一段渐变动画 

　　要禁止动画一开始就自动播放，这样播放按钮才会起到作用。单击时间轴上的第1帧，打开舞台下面的“动作”面板，双击“影片控制”下的“stop”命令，是动画在第一帧就停止。在最后一帧同样加入“stop”。如图所示。 



添加“stopa();” 

　　然后新建立一个按钮元件，按照我们刚才做的方法制作出两个按钮，分别是“play”和“relplay”。在时间轴中新建一图层，把“play”按钮从控制拖动到第1帧的合适位置，“replay”拖动到第30帧的合适位置。分别单击两个按钮，打开动作面板，在“play”和“replay”按钮上面加如控制命令： 

“play”按钮上面的命令：

on&nbsp;(release)&nbsp;{ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;play(); 
} 

　　如图所示。 



“play”按钮的ActionScript 

　　“replay”按钮上面的命令：

on&nbsp;(release)&nbsp;{ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gotoAndPlay(1); 
} 

　　如图所示。 



“replay”按钮的ActionScript 

　　这样就达到了控制影片的作用了.

　　这是我们第一次接触Flash&nbsp;MX&nbsp;2004的ActionScript，本书第三部分中会作详细地介绍。之所以在此节中介绍ActionScript，一是按钮与ActionScript的联系非常密切；二是给大家一个初步的印象。
]]></description>
		</item>
		<item>
			<title>将google map整合进flash form？</title>
			<link>http://www.kingmx.com/article.php?id=13423</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
无聊的时候总有无聊的想法，看了今天的标题，你大概以为我在天方夜谈，但如果你走进 Yahoo Maps Developer Network看看的话，你会知道我不是在说大话，还真的是应验了那句话"没有实现不了的应用，只有你想不到的应用！"详细看完yahoo map的资料你大概有个了解了吧，yahoo map在flash form中展示应该不难，只要下载他的Flash/AS API ，在flash form中用

&lt;cfformitemtype="script&gt;叫用mapAPI的data写成as文件放到此叫用&lt;/cfformitem&gt;

应该可以很ok的实现，而且我发现map提供了as的源码，对我这个对as不大感冒的人真的是感激不尽，直接载下来用了拉！^_^原理就是用一个value来触发coldfusion和flash之间的连接，进行数据交互，我想大概的流程是这样的，按照yahoo map api的文档，你可以调用里面的实例，来叫用数据返回，将整理好的code保存成fla文件，导出swf文件放入flash form中，可以这样插入：

&lt;cftextareaname="Ymap"html="true"height="400"width="600"&gt;

&lt;p&gt;&lt;imgid="ymap"hspace="0"vspace="0"src="Ymap.swf"&gt;&lt;/p&gt;

&lt;/cftextarea&gt;

下面的代码实现了在map中的拖拉，yahoo粘过来的

importcom.yahoo.maps.tools.PanTool;

myMap.addEventListener(com.yahoo.maps.api.flash.YahooMap.EVENT_INITIALIZE,onInitMap);

functiononInitMap(eventData){

varpanTool=newPanTool();

myMap.addTool(panTool,true);

}

相关资料地址：

Yahoo! Maps AS-Flash API - Getting Started Guide

Reference Manual for the Yahoo! Maps Flash APIs

The New Family of Yahoo! Maps Web Services


]]></description>
		</item>
		<item>
			<title>让Flash听话：Flash与麦克风的互动</title>
			<link>http://www.kingmx.com/article.php?id=13424</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            这个教程是Flash与麦克风的互动。希望通过学习这个麦克风互动的教程，使您来获得更好的启发。 
　　首先看这个例子，点击Allow[允许]，并用麦克风发出声音，效果如下:





　　OK，下面我们来一步步的实现上面这个FLASH的功能： 
　　1．打开Flash并新建一个300*200的场景
　　2．用工具栏中的画圆工具在场景中画一个适中的圆形

 

　　3．将这个圆形转化为元件，并设置为电影夹子——选择刚才所画的圆形，点击F8键或者点击[修改][Modify]-[转化为元件][Convert to Symbol]，在对话框中选择[电影夹子][Movie Clip]，点击[确定][ok]
　　4．完成上一步后，我们在场景中点击这个元件，在属性面板中的[Instance Name]中输入Circle 
 

　　5．现在我们可以在时间轴的第一桢写入我们的ActionScript命令——点击时间轴面板中的第一桢，点击F9或者[窗口][Window]-[动作][ Development Panels-Action],将下面的程序输入动作面板当中： 
　　代码: 
m = Microphone.get(); 
attachAudio(m); 
m.setUseEchoSuppression(false); 
onEnterFrame = function () { 
circle._xscale = circle._yscale = m.activityLevel+50; 
};
　　6．完成上面的步骤，你就可以在你的网页中预览了——[文件]-[发布预览]-[HTML]。 下面我们来为你解释每一行代码的意义：
　　代码: 
m = Microphone.get();
　　让Flash程序与麦克风输入的信号建立连接 
　　代码: 
 _root.attachAudio(m); 
　　这行命令将Audio连接在_root上，这样每一个物件都能与’m’来建立沟通 
　　代码:
m.setUseEchoSuppression(false);
　　防止回音的影响，代码: 
onEnterFrame = function () { 
circle._xscale = circle._yscale = m.activityLevel+50; 
            };
　　这段代码的作用是用声音来控制我们所设置图形的大小，activityLevel是通过声音的输入来返回一个在0-100之间数值。 
　　OK，这个教程就到此为止了，大家自己可以多加实践，也许会有意想不到的效果! 

　　翻译得不好，请大家指正 如有错误 请pm我
]]></description>
		</item>
		<item>
			<title>Flash标准Loading制作方法</title>
			<link>http://www.kingmx.com/article.php?id=13420</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            



网络中的swf影片是可以实现边下载边播放的，由于受到当前网络传输的制约，对于大容量的影片，这种实时播放并不理想。为避免受众尴尬的等待，flash制作人员往往设计一个加载(loading)的画面，等影片的全部字节下载到本地后再播放，从而保证影片的播放质量.本文将介绍一种较为标准的loading制作方法。 
　　步骤:

　　1.打开Flash MX 2004，选择矩形工具，在主场景中画出下一个只有边框有矩形，本例该矩形大小为350*16像素。

　　2.再在主场景中仍用矩形工具画出一个只有填充而无边框的矩形，并按F8键将其转换为影片剪辑（注：其注册点一定要选在该矩形的最左侧），其实例名为bar 。本例该矩形大小为345*11像素。

　　3.将上述两矩形在主场景中排列好，使边框矩形嵌套填充矩形。

　　4.在上述两矩形旁边用文字工具拖出一动态文本框，其变量名为bar_per。

　　至此，准备工作就绪，即建立了两矩形框和一动态文本框，下面准备编写代码。

　　5.在主场景中，新建一层，选中该层第1帧，按F9键打开动作脚本编辑窗口，输入以下代码：





this.onLoad=function(){ 
myBytesTotal=_root.getBytesTotal(); 
} 
this.onLoad(); 
this.onEnterFrame=function(){ 
myBytesLoaded=_root.getBytesLoaded(); 
bar_xscale=myBytesLoaded/myBytesTotal*100; 
percent=Math.round(bar_xscale); 
this.bar._xscale=bar_xscale; 
this.bar_per=percent+"%"; 
if(myBytesLoaded==myBytesTotal){ 
delete this.onEnterFrame; 
_root.nextFrame(); 
}else{ 
this.stop(); 
} 
}


6.从主场景时间轴第2帧起制作你的flash影片。

注解:

①
this.onLoad=function(){ 
myBytesTotal=_root.getBytesTotal(); 
}
此段代码是指,当影片剪辑(本例指两矩形和一动态文本框所存在的主场景)加载时,读取主时间轴存在的所有元素的总字节数并赋值给变量myBytesTotal。

②
this.onLoad(); 
flash事件处理函数MovieClip.onLoad=function(){…}有些奇怪,其中设置的代码，若不在后面加上this.onLoad();，这些代码并不能执行，因此加上这一句以便这些代码得以执行。

③
myBytesLoaded=_root.getBytesLoaded();//读取主时间轴存在的所有元素已加载的字节数,并将其赋值给变量myBytesLoaded。

④
bar_xscale=myBytesLoaded/myBytesTotal*100;//将myBytesTotal折算成100时，myBytesLoaded所得到的折算值赋给变量bar_xscale，以便给主场景中bar的_xscale赋值（_xscale的最大值只能为100），这里用到了初等数学的比例计算。

⑤
percent=Math.round(bar_xscale);//将变量bar_xscale的值取整后赋给变量percent，以便显示的百分比不带小数。

拓展：

　　1.“下载速度”的代码设计

　　①在主场景中用文字工具拖出有适当宽度的动态文本框，并设其变量名为rate 。

　　②在主场景代码层第1帧this.onEnterFrame=function(){}代码体if语句前追加如下代码：





t=getTimer();
rate= "下载速度：" + Math.round(myBytesLoaded/t * 100)/100 + 
" K/s";


　　2.“已用时间和剩余时间”的代码设计

　　①在主场景中用文字工具拖出有适当宽度的动态文本框，并设其变量名为mytimes 。

　　②在主场景代码层第1帧this.onEnterFrame=function(){}代码体if语句前追加如下代码：





timeLoaded=Math.round(t/1000); 
timeRemain=Math.round(timeLoaded*(myBytesTotal-myBytesLoaded)/myBytesLoaded); 

timeRemain=Math.round(timeRemain/60)+":"+Math.round(timeRemain%60); 

timeLoaded=Math.round(timeLoaded/60)+":"+Math.round(timeLoaded%60); 

mytimes="已用时间"+timeLoaded+" "+"剩余时间"+timeRemain; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

　　注：若“下载速度”的代码没有设计，则上述代码前应追加代码 t=getTimer();拓展后主场景代码层第1帧的全部代码如下：





this.onLoad=function(){ 
myBytesTotal=_root.getBytesTotal(); 
} 
this.onLoad(); 
this.onEnterFrame=function(){ 
myBytesLoaded=_root.getBytesLoaded(); 
bar_xscale=myBytesLoaded/myBytesTotal*100; 
percent=Math.round(bar_xscale); 
this.bar._xscale=bar_xscale; 
this.bar_per=percent+"%"; 
t=getTimer(); 
rate= "下载速度：" + Math.round(myBytesLoaded/t * 100)/100 + 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " K/s"; 
timeLoaded=Math.round(t/1000); 
timeRemain=Math.round(timeLoaded*(myBytesTotal-myBytesLoaded)/myBytesLoaded); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
timeRemain=Math.round(timeRemain/60)+":"+Math.round(timeRemain%60); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
timeLoaded=Math.round(timeLoaded/60)+":"+Math.round(timeLoaded%60); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
mytimes="已用时间"+timeLoaded+" "+"剩余时间"+timeRemain; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(myBytesLoaded==myBytesTotal){ 
delete this.onEnterFrame; 
_root.nextFrame(); 
}else{ 
this.stop(); 
} 
}


]]></description>
		</item>
		<item>
			<title>FLASH中响应键盘事件的四种方法</title>
			<link>http://www.kingmx.com/article.php?id=13421</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
 
响应键盘的方法作为AS中的一个重要组成部分，在如今已经越来越广泛的使用，尤其是在 FLASH游戏制作中，如果缺少了响应键盘的方法，那是不可能的，而响应键盘的方法主要的四种，分别是：

1、利用按钮进行检测
2、利用KEY对象
3、利用键盘侦听的方法
4、利用影片剪辑的keyUp和keyDown事件来实现响应键盘

只有熟练掌握了这些方法，然后加以变通的话，就会得到很多意想不到的效果，下面我就结合理论和自己的想法简要的介绍一下。

第一种响应键盘的方法：利用按钮进行检测来实现响应键盘

在按钮的on事件处理函数中不但可以对鼠标事件作出响应，而且可以对键盘事件作出响应。 如在按钮的动作面板中加入如下所示的代码，在敲击键盘上的X键时输出窗口中将提示：X is pressed
在按钮上加上：

on (keyPress "x") {
&nbsp; trace("X is pressed");
} 

但是要注意的是：检测键盘上的字母键时，字母都应为小写。如果要检测键盘中的特殊键， Flash中有一些专门的代码来表示它们，下面列出了一些常用的功能键的表示代码：

&lt;Left&gt; &lt;Right&gt; &lt;Up&gt; &lt;Down&gt; &lt;Space &lt;Home&gt; &lt;End&gt; &lt;Insert&gt; &lt;PageUp&gt; &lt;PageDown&gt;
&lt;Enter&gt; &lt;Delete&gt; &lt;Backspace&gt; &lt;Tab&gt; &lt;Escape&gt;

如要检测键盘上的&lt;Left&gt;键，可以使用下面的ActionScript：

on (keyPress "&lt;Left&gt;") {
trace("Left is pressed");
} 

另外，你可以在一个按钮中加入若干个on函数，也可以在一个on函数中结合多种事件，这使 您可以为按钮定义自己熟悉常用的快捷键，如下所示：

on (release, keyPress "&lt;Left&gt;") {
_root.myMC.prevFrame();
}
on (release, keyPress "&lt;Right&gt;") {
_root.myMC.nextFrame();
} 

上面的第一个语句实现单击按钮或按键盘上的左方向键，控制影片剪辑myMC回退1帧，而上面的第二个语句实现单击按钮或按键盘上的右方向键，控制影片剪辑myMC前进1帧。

最后给出实例源文件：下载

第二种响应键盘的方法：利用Key对象来实现响应键盘的操作
&nbsp;
利用按钮检测按键动作很有效，但是并不利于检测持续按下的键，所以不适合于制作某些通过键盘控制的游戏。
这时，您就需要用到Key对象。Key对象包含在动作面板的“对象”/“影片”目录下面，它由Flash内置的一系列方法、常量和函数构成。使用Key对象可以检测某个键是否被按下，如要检测左方向键是否被按下，可以使用如下ActionScript：

if (Key.isDown(Key.LEFT)) {
&nbsp; trace("The left arrow is down");
} 

函数Key.isDown返回一个布尔值，当该数中的参数对应的键被按下时返回true，否则返回false。常量Key.LEFT代表键盘上的左方向键。当左方向键被按下时，该函数返回true。
Key对象中的常量代表了键盘上相应的键，下面列出了一些基本的常量：
一些功能键的表示：

Key.BACKSPACE Key.ENTER Key.PGDN 
Key.CAPSLOCK Key.ESCAPE Key.RIGHT 
Key.CONTROL Key.HOME Key.SHIFT 
Key.DELETEKEY Key.INSERT Key.SPACE 
Key.DOWN Key.LEFT Key.TAB 
Key.END Key.PGUP Key.UP 

以上是键盘上的功能键，那么如何表示键盘上的字母键呢？
Key对象提供了一个函数Key.getCode来实现这一功能，如下所示：

if (Key.isDown(Key.getCode("x"))) {
&nbsp; trace("X is pressed");
} 

上面脚本的意思就是，利用Key.getCode函数来告诉系统你是否按下了x键，如果按下了x键以后，函数Key.isDown则会返回true,在输出窗口就会输出X is pressed。

最后给出实例源文件：下载

第三种响应键盘的方法：利用键盘侦听的方法来实现响应键盘（个人习惯用这种方法）

假设在影片剪辑的onClipEvent(enterFrame)事件处理函数中检测按键动作，而影片剪辑所在的时间轴较长，或计算机运算速度较慢，就有可能出现这种情况：即当在键盘上按下某个键时还未来得及处理onClipEvent(enterFrame)函数，那么按键动作将被忽略，这样的话，很多你想要的效果就会无法实现了。
另外，还有一个需要解决的问题就是，在某些游戏（如射击）中，我们需要按一次键就执行一次动作（发射一发子弹），即使长时间按住某个键不放也只能算作一次按键，而Key对象并不能区别是长时间按住同一个键还是快速地多次按键。
所以如果要解决这个问题，就需要用到键盘侦听的方法。你可以使用 “侦听器（listener）”来侦听键盘上的按键动作。
要使用侦听器之前，首先需要创建它，你可以使用如下所示的命令来告诉计算机你需要侦听某个事件：

Key.addListener(_root); 

Key.addListener命令将 主时间轴 或 某个影片剪辑 作为它的参数，当侦听的事件发生时，可以用这个参数指定的对象来响应该事件。
上面的代码指定主时间轴来响应该事件。要让主时间轴对该事件作出响应，还需要设置一个相应的事件处理函数，否则设置侦听器就没有什么意义了。
键盘侦听的事件处理函数有两个：onKeyUp和onKeyDown，如下所示：

Key.addListener(_root);
_root.onKeyUp = function() {
&nbsp; trace(Key.getAscii());
};
//代码的意思是，当按下一个键并释放后，输出窗口将输出你按下的那个键的Ascii码 

当然，你也可以使用影片剪辑作为侦听键盘的对象，只需要使用影片剪辑的路径代替_root作为Key.addListener命令的参数就可以了。
比如下面代码：

Key.addListener(_root.mc);
_root.mc.onKeyUp = function() {
&nbsp; trace(Key.getAscii());
}; 

代码的意思是，当按下一个键并释放后，输出窗口将输出你按下的那个键的Ascii码,意思差不多，但是键盘侦听对象不同，一个是影片mc,一个是主时间轴。

最后给出实例源文件：下载

第四种响应键盘的方法：利用影片剪辑的keyUp和keyDown事件来实现响应键盘

最后一种方法很容易被忽视，但是也有一定的应用价值，最重要的是把概念弄清楚。
影片剪辑包含两个与键盘相关的事件keyUp和keyDown，使用它们也可以实现对按键事件的响应
例如下面的代码：

onClipEvent (keyDown) {
&nbsp; trace(Key.getAscii());
}
//当按下键盘上的一个键的时候，输出窗口将输出按下的这个键的Ascii码值。 

函数Key.getAscii表示返回与按键相对应的ASCII码，其中 ASCII码是一个整数，键盘上的每个字符对应一个ASCII码，如字母A对应的ASCII码为65，B对应的ASCII码为66，a对应的ASCII码为97, b对应的ASCII码为98，+ 对应的ASCII码为43等。需要注意的是：只有字符键才有ASCII码，键盘上的功能键是没有ASCII码的。
如果我想在输出窗口中输出与按键相对应的字符，那怎么办？
这时候，你可以使用String对象的fromCharCode函数将ASCII码转换成字符，如将上例的代码改成如下所示：

onClipEvent (keyDown) {
&nbsp; trace(String.fromCharCode(Key.getAscii()));
};
//意思就是说，当按下键盘的一个键，输出按下的这个键相对应的字符，当然除了功能键。 

关于String对象的详细解释，大家可以查看动作面板的“对象”/“核心”目录下面。

]]></description>
		</item>
		<item>
			<title>Flash高级知识学习：ActionScript扫盲</title>
			<link>http://www.kingmx.com/article.php?id=13417</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            随着AS3规范的推出，很多Flash Developer也越来越想了解AS3，我的这篇文章应该可以在各位仔细观看AS3规范之前对ActionScript有一个扫盲级的了解，虽然是扫盲级，但是也不是类似于“hello!World”类型的文章，看了你就知道了。
　　Action Script

　　Action Script简称为AS，是Flash产品平台的脚本解释语言。该语言可以实现Flash中内容与内容，内容与用户之间的交互。AS的解释工作由Action Virtual Machine(AVM)来解释，AVM可以称之为AS虚拟机，类似于JVM，AVM是Flash Player播放器中的一部分。AS语句要想起作用是要通过Flash创作工具或Flex服务器将其编译生成2进制代码格式方可，而编译过的2进制代码格式将成为SWF文件中的一部分，被Flash播放器执行。AS1.0起源于ECMAScript标准，由于ECMA的语法的兼容性和Flash Player播放器的大小和渲染引擎的需要，AS可以称之为是语法来源于ECMAScript。
　　说到AS不得不说Flash4的AS集合，它曾经让Flash4兼容格式的内容变化多端。但是从一定程度上，Flash4的AS不能称之为成熟的并且为开发者所承认的脚本语言集合。它的语法方式完全不同于ECMAScript。虽然我们可以在Flash5的时代可以向它添加一些ECMA效仿的语句上去，但是AS在Flash4中是完全于ECMAScript标准相左的。现在Flash4的AS仍然可以被应用在Flash Lite1.1的内容之上。
　　AS1.0是从Flash5的时代诞生的，这时的版本就已经具备了ECMAScript标准的语法格式和语义解释。尽管后来的Flash Player5/6的播放器版本(Build)的一再更新，使得越来越多的ECMA语法和语义被纳入到AS1.0的API当中去，但是核心语言的编译处理及表现方式都是延续了Flash5的AS1.0的标准。甚至于到后来的Flash7，对于AS1.0的核心解释机制，仍然与Flash Player5有着很多相同之处。
　　AS2.0是在MX时代被慢慢引入的，而在MX 2004版本被开发者全面采纳。AS2.0的运行则是完全在Flash Player6以上的版本中才具备的机制。AS2.0在Flash6中都可以运行，是因为AS2.0语句在运行时(runtime)环境下仍然采用了AS1.0的模型。这也是骨子里为什么AS2.0的运行性能并不比AS1.0优秀的重要原因。AS2.0的编写方式则是更加成熟，引入了面向对象编程的方式，并且有良好的类型声明，而且分离了运行时和编译时的异常处理。AS2在格式上遵从了ECMA4 Netscape的语言方案，但是并不是完全兼容ECMAScript标准。虽然基于AS2的开发方式从众多开发者眼中褒贬不一，但是不可否认的是，AS2为了AS3.0的诞生铺设了一条康庄大道。
　　AS3.0的规范已经出来了，而AS3.0也是未来Flash开发脚本的核心。AS3的播放器只有从Flash Player 8.5以上版本开始支持，也就是我们现在用到的Flex 2.0 Beta才可以对AS3进行编译的工作。AS3有着很多不同之处，它将全面支持ECMA4的语言标准，意味着AS3将具有ECMAScript中的Package/命名空间namespace等多项AS2不具备的特点。AS3将全面支持E4X，也就是支持ECMAScrpit for XML的标准。AS3将采用全新的AVM来进行解释，与AS1/2的AVM将完全不同。此外AS3的编译器也是完全和AS2的编译器有所不同。此外，AS3的API将更加直观，会去除很多容易让人混淆的部分，添加对ECMA全面的兼容性，目的就是让基于AS3的内容更加快速与强壮。

　　说了这么多，AS3到底包含什么细节。去Spec里挖掘一下，然后先用Flex Builder 2体验一下吧。
]]></description>
		</item>
		<item>
			<title>如何优化Flash动画，使文件更小，播放更流畅？</title>
			<link>http://www.kingmx.com/article.php?id=13418</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            　Flash作为Macromedia公司出品的网页制作与动画创作的专业软件，操作简便，功能强大，现已成为交互式矢量图形和Web动画事实上的标准。 
　　但是，如果制作的Flash电影文件较大，动辄几百k的话，常常会让网上浏览者在不断等待中失去耐心。对Flash电影进行优化就显得很有必要了，但前提是我们不能有损电影的播放质量。 

　　1．多使用符号（Symbol）。如果电影中的元素有使用一次以上者，则应考虑将其转换为符号。重复使用符号并不会使电影文件明显增大，因为电影文件只需储存一次符号的图形数据。

　　2．尽量使用渐变动画。只要有可能，应尽量以“移动渐变”（Create Motion Tween）的方式产生动画效果，而少使用“逐帧渐变”（Frame－By－Frame）的方式产生动画。关键帧使用得越多，电影文件就会越大。 

　　3．多采用实线，少用虚线。限制特殊线条类型如短划线、虚线、波浪线等的数量。由于实线的线条构图最简单，因此使用实线将使文件更小。 

　　4．多用矢量图形，少用位图图像。矢量图可以任意缩放而不影响Flash的画质，位图图像一般只作为静态元素或背景图，Flash并不擅长处理位图图像的动作，应避免位图图像元素的动画。

　　5．多用构图简单的矢量图形。矢量图形越复杂，CPU运算起来就越费力。可使用菜单命令Modify （修改）/Curves（曲线）/Optimize（优化），将矢量图形中不必要的线条删除，从而减小文件。

　　6．导入的位图图像文件尽可能小一点，并以JPEG方式压缩。

　　7．音效文件最好以MP3方式压缩。MP3是使声音最小化的格式，应尽量使用。 

　　8．限制字体和字体样式的数量。尽量不要使用太多不同的字体，使用的字体越多，电影文件就越大。尽可能使用Flash内定的字体。 

　　9．不要包含所有字体外形。如果包含文本域，则应考虑在Text Field Properties（文本域属性）对话框中选中Include Only Specified Font Outlines（只包括指定字体外形），而不要选择Include All Font Outlines （包括所有字体外形）。 

　　10．尽量不要将字体打散（菜单命令为Modify / Break Apart）。字体打散后就变成图形了，这样会使文件增大。 

　　11．尽量少使用过渡填充颜色。使用过渡填充颜色填充一个区域比使用纯色填充区域要多占50字节左右。 

　　12．尽量缩小动作区域。限制每个关键帧中发生变化的区域，一般应使动作发生在尽可能小的区域内。 

　　13．尽量避免在同一时间内安排多个对象同时产生动作。有动作的对象也不要与其它静态对象安排在同一图层里。应该将有动作的对象安排在各自专属的图层内，以便加速Flash动画的处理过程。 

　　14．用Load Movie命令减轻电影开始下载时的负担。若有必要，可以考虑将电影划分成多个子电影， 然后再通过主电影里的Load Movie、Unload Movie命令随时调用、卸载子电影。 

　　15．使用预先下载画面。如果有必要，可在电影一开始时加入预先下载画面（Preloader），以便后续电影画面能够平滑播放。较大的音效文件尤其需要预先下载。 

　　16．电影的长宽尺寸越小越好。尺寸越小，电影文件就越小。可通过菜单命令Modify（修改）/Movie（电影），调节电影的长宽尺寸。 

　　17．先制作小尺寸电影，然后再进行放大。为减小文件，可以考虑在Flash里将电影的尺寸设置小一些，然后导出迷你SWF电影。接着将菜单File（文件）/Publish Settings…（发布设置…）中HTML选项卡里的电影尺寸设置大一些，这样，在网页里就会呈现出尺寸较大的电影，而画质丝毫无损、依然优美。 

　　在进行上述修改时，不要忘记随时测试电影的播放质量、下载情况和查看电影文件的大小。 
]]></description>
		</item>
		<item>
			<title>新浪网上的图片切换(纯Flash制作)</title>
			<link>http://www.kingmx.com/article.php?id=13419</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
最近盛行一种流行感冒，很多朋友为之头疼！
&nbsp;&nbsp; 大家先看效果：http://sports.sina.com.cn/
&nbsp;&nbsp; 尽管这种效果早已不是秘密了。但论坛上给出的原文件却都含有XML，这让很多人头疼！至少让我这个不懂XML的人很头疼。 
　　自放假以后闲来无事，于是就自己试着做这个效果。我发现就算不用XML一样可以做出来。

&nbsp;&nbsp; 为了不让感冒的病毒再继续蔓延，现将效果、原文件给出，希望对正在感冒的及未感冒的或即将要感冒的朋友有所帮助！
&nbsp;&nbsp; 
&nbsp;&nbsp; 先看看我做出来的效果:)






　　[制作思路]

&nbsp;&nbsp; 1 先分析特点,就是随机遮盖的效果:每次点击按钮都出现一张新的图片,而且图片出现的方式各不一样.相信接触Flash只要有一小段时间的人一看就知道是怎么做的,答案很简单,就是"遮盖"!

&nbsp;&nbsp; 2 确立的制作方式后,接下来一个问题就是:怎么样点击按钮就出现相应的图片.其实,这个问题很容易解决,而且方法多种多样!定性般的做法是给每个按钮各加上一个事件,用attachMovie把图片在库中加载进来.但是这里我不这样做,这样做等下会很麻烦!我是这样处理的:把N张图片放在一个MC(影片剪辑)里,一帧一张图片,并把图片的大小和位置都对齐,在按钮上加个事件让MC gotoAndStop在某一帧,就实现了点击按钮跳转图片的效果.

&nbsp;&nbsp; 3 接着就是"随机遮盖"的问题了,也是这个效果制作中唯一的难点!把这个问题解决了,做这个图片切换的效果也就没什么难度了. 

&nbsp;&nbsp;&nbsp;&nbsp; 我们可以这样处理:

　　方法1:把所有的遮盖效果各自做成MC,把他们全部拖到舞台上,设置为透明.用random产生随机数,让每个数字对应一个效果(这个用switch可办到),然后用setMask做遮照就OK了.不过,这虽然好理解,却也是比较笨的方法!

　　方法2:大家先看这个语句,看过之后就什么都明白了:)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&nbsp;i&nbsp;=&nbsp;random(7)+1//7是遮盖效果的总数,表示有7种不同的遮盖效果. 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachMovie("MASK"+i,"mask",-1,{_x:30,_y:20})//这里就是随机加载了.&nbsp;

　　前提是在库里为每个遮盖效果都加上连接的ID,并以这种格式:MASK1\MASK2\MASK3\...\MASKn 命名下去!&nbsp;
&nbsp;&nbsp; 
　　4 复制"步骤2"中那个放图片的MC,把他们放下上下2个紧挨着的层,上层做切换的图片,下层做背景,在每个遮盖效果的最后一帧加个gotoAndStop语句,让下层上的图片MC转到与上层图片MC相同的帧上. 

&nbsp;&nbsp;&nbsp;&nbsp; 三言两语说不清楚,请看图看效果吧!
&nbsp;&nbsp;&nbsp;&nbsp; 图:



&nbsp;&nbsp;&nbsp;&nbsp; 这是只用一个层的:






&nbsp;&nbsp;&nbsp;&nbsp; 这是下面加个背景层的:






&nbsp;&nbsp;&nbsp;&nbsp; 所以,步骤4那个背景层的作用,也就一目了然了:)&nbsp; 

]]></description>
		</item>
		<item>
			<title>在Flash中调用Html的层</title>
			<link>http://www.kingmx.com/article.php?id=13415</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
本教程需要大家有一些关于HTML, CSS, Flash, &#106avascript 和ASP的基础知识 
&nbsp;&nbsp;&nbsp; 用Html文本与Flash一起来制作动画是一个很好的方式。 它非常的简单, 而且容易上手，只需要使用ActionScript中的getURL()脚本就可以了，比你能想象到的任何其他编成语言（例如&#106avascript）都更方便，功能也更强大。

&nbsp;&nbsp;&nbsp; 请看下面这个情节: 在一个特殊工程中，设计师需要Flash 动画运行于页面的顶端，然后在Flash播放后，再显示文本。你可以在Flash中做很多的事情，但是在这例子中不适合用它来在HTML的层中显示文本。

&nbsp;&nbsp;&nbsp; 第一步:布局

&nbsp;&nbsp;&nbsp; 首先创建一个包含层的网页（如果你对层这个概念不熟悉，可以在Google中搜索一下，你会发现有很多有用的东西，是很值得你花点时间看一下的）。在我的例子中，使用了一个导航层，一个用来显示文本内容的层和一个Flash层，如下图所示：



&nbsp;&nbsp;&nbsp; 我在下面用到的效果是在Flash影片完成播放前隐藏文本内容层，所以第一件要做的事情就是设置层的可见属性为隐藏，其他两个层保持默认的可见属性。

&nbsp;&nbsp; 第二步: &#106avascript

&nbsp;&nbsp;&nbsp; 这里我说明一下： 我是使用Dreamweaver的内置的显示/隐藏脚本，并把它插入到网页的头部。

&nbsp;&nbsp;&nbsp; 无论是自己写的&#106avascript脚本，还是从脚本库或者DreamWeaver中拖动一个，你都可以切换图层的显示和隐藏了。使用这个脚本，可以很快地写出自己想要的简单&#106avascript函数。

&nbsp;&nbsp;&nbsp; 上图中的模型实际上要比这个完成的功能更简单。 实际上，一共三个层----内容层和两个包含鼠标上下箭头图形的层，它们是用来滚动内容层的。这些都是需要隐藏直到影片播放完成的东西。这里我没有在flash的时间轴中创建四个不同的脚本，而是创建了一个&#106avascript脚本来很快的显示所有层：

&lt;script language="
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function MM_findObj(n, d) { //v4.01
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))&gt;0&amp;&amp;parent.frames.length) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(x=d[n])&amp;&amp;d.all) x=d.all[n]; for (i=0;!x&amp;&amp;i&lt;d.forms.length;i++) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=d.forms[i][n];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;!x&amp;&amp;d.layers&amp;&amp;i&lt;d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!x &amp;&amp; d.getElementById) x=d.getElementById(n); return x;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function MM_showHideLayers() { //v3.0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var i,p,v,obj,args=MM_showHideLayers.arguments;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=0; i&lt;(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { v=args[i+2];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj.visibility=v; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function showLayers() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MM_showHideLayers('content','','show')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MM_showHideLayers('divUpControlMain','','show')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MM_showHideLayers('divDownControlMain','','show')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;

&nbsp;&nbsp;&nbsp; 非常的简单！ 正如所看到的，所有我需要做的就是为每个需要显示的层创建一个脚本函数。 我不是一个很强的&#106avascript程序员，肯定还有更好的方式来实现它。

&nbsp;&nbsp;&nbsp; 第三步：在Flash中调用这个函数 

&nbsp;&nbsp;&nbsp; 在flash影片的时间轴上需要出现文本内容层的地方插入下面脚本： 

&nbsp;&nbsp;&nbsp; getURL("

&nbsp;&nbsp;&nbsp; 现在，在HTML网页中的隐藏的层，就可以通过Flash影片来控制它在适当的时候显示出来。但这仍然有个问题，用户每次打开网页，都需要耐心看完影片才能看到内容文本。下面是我的解决方案。

&nbsp;&nbsp;&nbsp; 第四步：挽救人们的耐心

&nbsp;&nbsp;&nbsp; 当用户第一次访问这个页面的时候，可以做个Cookie记录,当用户再次访问的时候，服务器读取Cookie就可以知道他们是否已经看过影片了。如果用户已经看过影片了，就可以用最后的一帧和一个小的播放按钮来代替影片， 用户就可以直接看到文本内容了。利用Google,花点时间你可以用Perl,PHP,&#106avascript等任意一种语言来做这个功能。这里ASP是我所选择的武器。代码一共有两部分：

&nbsp;&nbsp;&nbsp; 1)检查Cookie并显示适当的内容：

&nbsp;&nbsp;&nbsp; 2)窗体顶端


&lt;div id="Flash" style="position:absolute; left:0; top:0; width:760; 
height:160; z-index:1; visibility: visible"&gt;

&lt;%
If Request.Cookies("viewed")("force") = "" Then
%&gt;

&lt;p&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=4,0,2,0" 
width="760" height="160"&gt;
&lt;param name="movie" value="swf/force.swf"&gt;
&lt;param name=quality value=high&gt;
&lt;param name="loop" value="false"&gt;
&lt;param name="menu" value="false"&gt;
&lt;embed src="swf/force.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" 
type="application/x-shockwave-flash" width="760" height="160" 
loop="false" menu="false"&gt;
&lt;/embed&gt; 
&lt;/object&gt;&lt;/p&gt;

&lt;%
Else
%&gt;

&lt;p&gt;&lt;img src="img/stills/force.jpg" width="760" height="160" 
border="0"&gt;&lt;/p&gt;

&lt;script language="
showLayers()
&lt;/script&gt;

&lt;%
&nbsp; End If
&nbsp; %&gt;&nbsp;
&nbsp; 
&lt;/div&gt;

&nbsp;&nbsp;&nbsp; 简单点来说就一个语句---如果Cookie为空或者不存在则嵌入Flash影片（在播放完之后会显示隐藏的层），否则显示最后一帧的JPG图片来切换隐藏的层。

&nbsp;&nbsp;&nbsp; 2) 写cookie

&nbsp;&nbsp;&nbsp; &lt;% Response.Cookies("viewed")("force") = "True" Response.Cookies("viewed").Expires = Date + 90 %&gt;

&nbsp;&nbsp;&nbsp; 只要用户访问了本页面并且是在浏览器中第一次浏览, 就会写入Cookie，以后再浏览的时候就不会再受影片的打扰了。还剩下一件事情就是如果他们想再次观看影片怎么办？我做一个简单脚本clear.asp 和一个'重播'链接：

&nbsp;&nbsp;&nbsp; &lt;a href="clear.asp?url=force.asp&amp;cookie=force"&gt;重播&lt;/a&gt;

&nbsp;&nbsp;&nbsp; 如你所看到的，这个链接会清除掉Cookie,代码如下（ASP中）：

&nbsp;&nbsp;&nbsp; &lt;% strURL = Request.QueryString("url") strCookie = Request.QueryString("cookie") Response.Cookies("viewed")(strCookie) = "" Response.Redirect strURL %&gt;

&nbsp;&nbsp;&nbsp; 所有我要做的就是从query字符串中得到这个URL和Cookie的名字，删除相应的cookie并且重新定位到用户打开过的页面。为什么要这样做呢？因为简单的在同一个页面中清除cookie是不起作用的，已经太迟了。你需要重新装载一下这个页面，这就是我的解决方案，所有的已经做完了并且它运行的非常出色。

&nbsp;&nbsp;&nbsp; * 已经在IE5、IE 6, Mozilla 和Netscape中通过测试

]]></description>
		</item>
		<item>
			<title>Flash无法导入声音问题的解决方案</title>
			<link>http://www.kingmx.com/article.php?id=13416</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            　平时总有新手提问"为什么某某某音乐无法导入Flash"之类的问题，其实原因实在是明显，看过帮助的朋友也许都知道有以下附文那么一篇。至于没看过的朋友，那就看一看吧。 
&nbsp;&nbsp;&nbsp; 即:Flash 可以导入8位或16位的声音，采样比率为11kHz、22kHz 或44kHz。

&nbsp;&nbsp;&nbsp; 要是你的音乐无法导入，说明它的压缩率不在Flash允许之内。可以查看音乐文件的属性，里面有显示。解决方法是重新对音乐文件进行压缩或采样，一般可以尝试重新下载可以导入Flash文件。要是特殊的音乐，可以参考以下步骤： 

&nbsp;&nbsp;&nbsp; 使用软件:LameGUI 

&nbsp;&nbsp;&nbsp; 安装后打开，选项无需改动，使用[固定比特率]:128KBps&nbsp;

&nbsp;&nbsp;&nbsp; 选择输入文件和输出后的文件位置，然后[开始编码]&nbsp;

&nbsp;&nbsp;&nbsp; 将输出的Flash导入Flash就成功了。

&nbsp;&nbsp;&nbsp; ps:此软件可以用来批量压制MP3或WAV文件，压缩效果很不错，推荐使用! 

&nbsp;&nbsp;&nbsp; 使用Flash&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; 处理声音 &gt; 导入声音

&nbsp;&nbsp;&nbsp; 通过将声音文件导入到当前文档的库中，可以把声音文件加入Flash。

&nbsp;&nbsp;&nbsp; 注意当将声音放在时间轴上时，应将声音置于一个单独的图层上。有关详细信息，请参阅向文档中添加声音。 

&nbsp;&nbsp;&nbsp; 可以将以下声音文件格式导入到Flash 中：&nbsp;
&nbsp;&nbsp;&nbsp; WAV（仅限 Windows）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; AIFF（仅限 Macintosh）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; MP3（Windows 或Macintosh）&nbsp; 

&nbsp;&nbsp;&nbsp; 如果系统上安装了QuickTime 4或更高版本，则可以导入这些附加的声音文件格式：&nbsp;
&nbsp;&nbsp;&nbsp; AIFF（Windows 或 Macintosh）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; Sound Designer II（仅限 Macintosh）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; 只有声音的QuickTime 影片（Windows 或 Macintosh）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; Sun AU（Windows 或 Macintosh）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; System 7 声音（仅限 Macintosh）&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; WAV（Windows 或 Macintosh）&nbsp; 

&nbsp;&nbsp;&nbsp; Flash 在库中保存声音以及位图和元件。与图形元件一样，只需声音文件的一个副本就可以在文档中以多种方式使用这个声音。 

&nbsp;&nbsp;&nbsp; 如果想在Flash文档之间共享声音，则可以把声音包含在共享库中。有关详细信息，请参阅处理公用库。要在共享库中使用声音，可以在"链接属性"对话框中把标识字符串分配给声音文件。标识符也可以用来访问ActionScript 中作为对象的声音。有关ActionScript 中对象的信息，请参阅通过声音对象使用声音。 

&nbsp;&nbsp;&nbsp; 声音要使用大量的磁盘空间和RAM。但是，MP3 声音数据经过了压缩，比WAV 或AIFF声音数据小。通常，使用WAV 或AIFF文件时，最好使用16 位22 kHz 单声（立体声使用的数据量是单声的两倍），但是Flash 可以导入8 位或16 位的声音，采样比率为11kHz、22kHz 或44kHz。在导出时，Flash会把声音转换成采样比率较低的声音。有关详细信息，请参阅压缩声音用于导出。

&nbsp;&nbsp;&nbsp; 注意当将声音导入到Flash 时，如果声音的记录格式不是11kHz的倍数（例如8、32或96kHz），将会重新采样。 

&nbsp;&nbsp;&nbsp; 如果要向Flash中添加声音效果，最好导入16 位声音。如果RAM 有限，就使用短的声音剪辑或用8 位声音而不是16 位声音。
]]></description>
		</item>
		<item>
			<title>完美的loading—完美到底</title>
			<link>http://www.kingmx.com/article.php?id=13413</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            

首先，想说一下我写此文的动机。记得很早之前我曾经说过“没有loading的flash，不是完整的flash”。我想那个句话可能偏激了。因为有时候一些不到10k的flash，确实不需要做什么loading。但我始终认为，做一个优秀的loading是衡量一个flasher水准，甚至态度的。你问我为什么，我可以告诉你，因为loading是唯一一个你不会多看而所有用户、客户会看的东西，所以你对loading的重视程度，甚至可以反衬你这个flasher的职业道德！

有些做设计为主的朋友，我认识不少，他们对loading都是得过且过的态度，做一个loading，更多的是自己找一个现成的，然后每次去套用，我个人认为是很不好的习惯。并不是说我不提倡代码、元件的重用度，而是我觉得对于loading这种东西，套多了，是要出问题的。我强烈建议那些已经达到可以修改人家loading水平的flasher看看我的东西，当然，如果你连flash的as该写在哪都不知道，建议先入门了。

好，下面切入正题，如何制作loading：

首先要感激Macromedia的大智慧，提供了很好的两个函数使我们可以做出完美的loading，那就是getBytesLoaded和getBytesTotal。请不要再用你改来改去改了两三年的那个什么getFrameLoaded什么什么了，我都记不清楚怎么拼了。我只想说，Frame的观念将在真正的Interactive-Design中淡化。更别提什么Scene，那是Flash的败笔！

那么loading如何工作呢？我们如何利用这两个函数呢？这里要提到一个重要的概念。就是间隔调用。间隔调用有多种方式，下面列举出来，并列举出其在loading制作中的地位和用法，欢迎补充：

·setInterval方式

写法：

function loadCheck()
{
&nbsp; var p = getBytesLoaded()/getBytesTotal();
&nbsp; if (p==1)
&nbsp; {
&nbsp;&nbsp;&nbsp; clearInterval(intervalID); // 释放间隔调用
&nbsp;&nbsp;&nbsp; gotoAndPlay(someFrame); // 开始播放
&nbsp; }
}
var interval = 30; // 这个数值是刷新频率
var intervalID = 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 ()
{
&nbsp; var getTar:MovieClip = this._parent;
&nbsp; var p = getTar.getBytesLoaded()/getTar.getBytesTotal();
&nbsp; trace(p);
&nbsp; if(p==1)
&nbsp; {
&nbsp;&nbsp;&nbsp; this.onEnterFrame = null;
&nbsp;&nbsp;&nbsp; gotoAndPlay(someFrame); // 开始播放
&nbsp; }

}

就这么简单，记住，在MC的事件函数体内部引用MC，永远是一件很快的事情。因为this就可以指向这个MC本身，通过诸如this._parent之类的方法，可以找到你所有的MC!

·直接依赖于timeline的循环方式

非常非常非常古老的方式了，不介绍了。不过你们可以去问问那些一直不喜欢自己动手做loading的flasher，他们也许在改的某一个版本就是这个，呵呵。

以上算是比较简单的。比较容易出问题的，还有两个。
第一、MovieClipLoader
第二、含有多种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";
function myTrace(msg)
{
&nbsp;_root.traceBox.text += msg + newline;
&nbsp;_root.traceBox.vPosition = _root.traceBox.maxVPosition;
}

我们这里是在建立一种跟踪调试机制，调试的(变量)将输出到文本框组件中。这里的方法"myTrace"是预先定义好的一个函数,它帮助我们顺利完成对某些信息的监控；其中第二句的作用是使文本框随时输出最新监控值。

2、现在从组建库托拽一个TextArea组件进入场景，并给以合适的大小，以及一个实例名称traceBox(对应上面的脚本)

3、接下来，我们要建立一个新的MC元件。并在场景上部署3个实例，为它们分别命名为myMC1,myMC2,myMC3。我们将把图片或者swf影片装载进入它们，并且，在它们下载到本地后按照需求调整它们的尺寸。其实，对图片人为地改变尺寸会造成许多不好的后果，比如锯齿的产生，但是为了让大家了解onLoadInit事件的使用，我们将会这么做。

4、然后，我们建立一个MCL对象，在第一帧输入以下脚本：

var myMCL = new MovieClipLoader();//create an instance of MovieClipLoader

aw附：这里我想罗索以下，关于Object的翻译。因为上述代码的注释中，老外用的是instance这个词，直译的话，Object是“对象”；Instance代表“实例”。前者更注重于其数据类型，而后者则更注重于其客观存在性。

5. 现在我们就可以部署脚本了，在第一帧：

myMCL.onLoadStart = function (targetMC)
{
&nbsp;var loadProgress = myMCL.getProgress(targetMC);
&nbsp;myTrace ("The movieclip " + targetMC + " has started loading");
&nbsp;myTrace("Bytes loaded at start=" + loadProgress.bytesLoaded);
&nbsp;myTrace("Total bytes loaded at start=" + loadProgress.bytesTotal);
}

这个函数的第一行中申明了一个(对象类型的)变量，显然，这个变量的值由myMCL对象的getProgress方法获得.刚才已经介绍了getProgress方法,这里可以看到,返回的loadProgress.bytesLoaded就是loadProgress对象的bytesLoaded属性.
这里我再啰嗦一句：为什么返回一个对象，而不返回具体的值。这是有原因的。函数返回值的功能使得程序设计更加完美，然而很多情况下，我们要返回的并非一个值，我们可能返回两个或者更多的值，甚至它们的数据类型都不相同。这样，只有通过对象的形式来返回了。这是解决问题最简单最高效的方法。下面三句myTrace就呼应了之前我们定义的监控函数，这样就能看到我们关注的变量了。

6、我们已经为onLoadStart事件部署了相应的工作，接下来我们要为上述其他事件部署工作了。紧接着是onLoadProgress，它接受三个参数：targetMC, loadedBytes, totalBytes。分别代表目标容器MC实例；已经读取的体积、总体积。

myMCL.onLoadProgress = function (targetMC, loadedBytes, totalBytes) {
&nbsp;myTrace ("movie clip: " + targetMC);
&nbsp;myTrace("Bytes loaded at progress callback=" + loadedBytes);
&nbsp;myTrace("Bytes total at progress callback=" + totalBytes);
}

7、我们的onLoadComplete方法仅接受一个参数，它就是容器MC实例。像onLoadStart一样，我们用getProgress方法来返回读取情况。

myMCL.onLoadComplete = function (targetMC)
{
&nbsp;var loadProgress = myMCL.getProgress(targetMC);
&nbsp;myTrace (targetMC + " has finished loading.");
&nbsp;myTrace("Bytes loaded at end=" + loadProgress.bytesLoaded);
&nbsp;myTrace("Bytes total at end=" + loadProgress.bytesTotal);
}

8、onLoadInit方法将在所有加载的内容被下载到本地容器MC中之后才开始执行。这将使得你能更好的控制加载进来的内容的属性。我选择的图片非常大，这样我们可以把读取过程看得更加清晰，而我也要对已经加载的图片尺寸进行修整，让它能全部显示出来。

myMCL.onLoadInit = function (targetMC)
{
&nbsp;myTrace ("Movie clip:" + targetMC + " is now initialized");
&nbsp;targetMC._width = 170;
&nbsp;targetMC._height = 170;
}

9、还有一个回调方法onLoadError。如果有错误发生，它将会被触发。作为一个优秀的程序员，部署完善的应用程序的时候，对错误发生的避免措施是必不可少的！

myMCL.onLoadError = function (targetMC, errorCode)
{
&nbsp;myTrace ("ERRORCODE:" + errorCode);
&nbsp;myTrace (targetMC + "Failed to load its content");
}

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.
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");

&nbsp;

路径可以选择相对路径。注意，路径的相对性也是一个大问题，当SWF在非本路径的HTML中被引用的时候，遵从HTML所在的路径！这一点是很多Flash教程都忽视的。所以，有时候绝对路径也有绝对路径的好处。[路径问题源文件下载，下载了就一目了然了

所有的调试工作最好在浏览器中，而非IDE中完成。而且脚本输出方式必须是AS2。
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.

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.
接下来，我将介绍实时调用MCL的情况。为了能适应更多的应用，我们经常动态地为MCL制定工作。

aw话外音：有时候，我们如此写：

1、var mcl:MovieClipLoader = new MovieClipLoader ();
2、var mcl = new MovieClipLoader ();

发现第一种写法无法为MCL制定onLoadStart等事件方法。这是编译器根据指定变量的数据类型产生的问题。osflash的一些朋友给了一些有用的观点，我也发现这个问题正好涉及到Flash内部的事件响应机制，不妨介绍一下：
Flash的三种事件响应机制

1、简单的回调函数，最老的；
2、侦听器，ASBroadcaster，FlashMX时代；
3、事件侦听器，EventDispather，FlashMX2004时代

这里，MCL用的是第二种机制，而整套V2组件则使用最后一套机制。
附：MCL官方申明，注意：上述方法中，仅包含getProgress方法！



intrinsic class MovieClipLoader
{
&nbsp; function MovieClipLoader();

&nbsp; function addListener(listener:Object):Boolean;
&nbsp; function getProgress(target:Object):Object;
&nbsp; function loadClip(url:String, target:Object):Boolean;
&nbsp; function removeListener(listener:Object):Boolean;
&nbsp; function unloadClip(target:Object):Boolean;
}

&nbsp;

个人补充认为：1、2在不严格要求数据类型的时候可以通用。

下面开始介绍用侦听器来检测MCL事件的方法。在此之前，我们解决一个最常见的问题，我们经常会在论坛中看到有人这样提问：

引用 ：

大家好，我动态地建立了一些MC，并逐个分配给它们一个事件句柄（标志）。然后，我将外埠资源读取到它们之中。但是这些分配好的事件句柄都不工作了！
紧接着，发问人一般会贴出一对乱七八糟的代码，并大呼救命。

那么，我们首先来分析一下这个错误发生的原因：当外埠资源被载入到一个MC中时，这个MC将会重新初始化。这意味着任何被预先制定好的代码都将付之东流。对于开发人员已经手动在舞台上安排好的MC则并没有相关的麻烦，这是因为任何直接通过onClipEvent制定到MC的代码都能幸免被重新初始化。而动态建立的MC则进行上述的“初始化”，因为我们是在运行中给它们配置的事件代码。

我们如何避免这个问题呢？其实方法太多了，很多论坛也进行了极为详细的讨论，我就不多赘述了。

你现在也许还记得刚才我介绍的“读取外埠数据参与Flash应用程序部署是一件非常重要和常见的工作，尤其是我们常常需要检测这些数据加载的进度”

我们已经介绍了MCL的几个回调函数，所以这里也不再赘述了。我们现在制作这样一个效果：缩略图标式的图片浏览系统。我们将要从外部读取一些JPG图片，将它们放入我们动态部署的MC中。并且我们希望这些动态建立的MC都具有各自的onPress事件。我们通过在MC装载好外部资源之后再为之分配事件。

在我们开始之前，我还想提醒大家注意一些经常出现的疏漏：一定要在发布的时候设置成Flash7+AS2以上的版本；其次，用浏览器测试你的效果，而不是IDE；否则你将会得到奇怪的结果。

现在，我们开始编制代码，你会发现它比你想象的要简单得多。

1、新建一个Flash文档。

2、找四张100*100像素的缩略图片。

3、建立一个动态文本框，大概在300*300像素左右，使用12号字体，并使之现实边框，这样我们更好监测。别忘了设置它为多行的。

4、建立一个100X100像素的矩形，转变为MC，然后将它移出场景。这时候，他已经出现在库中了。在库中，设置他的链接名为“img”，并使其“在第一帧导出”。其实这个矩形会在外部资源载入的时候被取代，现在只是为了调试方便。

5、在刚才放置textBox文本框的层之上新建一层，这一层用于放置我们的代码，先写上：

stop();

6、现在我们定义一个MCL的实例，此外定义一个基本对象，作为我们的侦听器：

myMCL = new MovieClipLoader(); //define MovieClipLoader
myListener = new Object(); //define listener

7、接下来我们用侦听器来侦听onLoadComplete事件，该事件的作用上文已经提到了。我们现在把它交给listener对象，而不是MCL实例。当然，最终要把侦听器对象再交回MCL（以侦听其回调函数）的时候，得到的效果就是我们需要的效果了。

记住，只有当读取完毕的时候，对MC部署事件任务才是安全可靠的！所以，在onLoadComplete被触发的时候才部署这个onPress事件给MC:

myListener.onLoadComplete = function(targetMC){
&nbsp;debug.text += "LOADING OF " + targetMC
&nbsp;+ " COMPLETE" + newline;
&nbsp;targetMC.onPress = function() {
&nbsp;debug.text += newline
&nbsp;+ "targetMC = " + targetMC._name;
&nbsp;}
}

注：上述代码中有几行被人为打断，但这并不影响效果。

你也许已经注意到了，MC的实例名称在onLoadComplete被触发的时候是作为一个参数的身份传递给onLoadComplete的，这样我们控制这个MC就非常方便了。比如这里就可以用点击MC来检测事件是否被成功部署给MC。

8、现在我们建立一个函数，它包含一个简单的循环来部署场景上的MC。并且及时地为每一个部署好的MC分配读取外埠资源的任务（loadClip方法），代码如下：

function initClips(){
&nbsp;for (i=1; i&lt;=4; i++){
&nbsp;this.attachMovie("img", "img" + i, i);
&nbsp;this["img"+i]._x = i*110;
&nbsp;myMCL.loadClip("0" + i + ".jpg" ,
&nbsp;this["img"+i]); //code wrapped
&nbsp;}
}

9、到这里基本上就完成了。现在我们剩下的工作就是注册侦听器并且按照需求调用相关函数、方法，反映到代码上就是以下两行：

myMCL.addListener(myListener);
initClips();

注意这里的顺序，我们的侦听器对象在调用initClip()函数之前就被作用于MCL实例了。现在我们的MC的onPress事件可以顺利工作了，因为当图片被完全读入之后，事件才被分配过去。我们的代码也非常简洁。我们再也不用为了loading而去制作麻烦的循环了，MovieClipLoader帮我们完成了所有工作！

附：完整代码如下：



stop();
myMCL = new MovieClipLoader();
myListener = new Object();
myListener.onLoadComplete = function(targetMC)
{
&nbsp; targetMC.onPress = function ()
&nbsp; {
&nbsp;&nbsp;&nbsp; trace("pressed");
&nbsp; }
}

function initClips()
{
&nbsp; for (i=1;i&lt;=4;i++)
&nbsp; {
&nbsp;&nbsp;&nbsp; this.attachMovie("img","img"+i,i);
&nbsp;&nbsp;&nbsp; this["img"+i]._x = i*110;
&nbsp;&nbsp;&nbsp; myMCL.loadClip(url,this["img"+i]);
&nbsp; }
}
myMCL.addListener(myListener);
initClips();



到此为止，你应该相信MCL确实是一个不可多得的好东西了吧？

V2，也爱，也恨！这里介绍关于含有V2组件项目的loading问题

V2组件自面世以来就颇受争议，大体概括如下：

优点：

1、界面比V1组件更加美观、统一，人机交互模式更加完善
2、均采用面向对象脚本部署

缺点：

体积笨重，开发一些只用到一两个组件的小应用程序时很尴尬。

消息机制方面使用EventDispather的消息广播机制，取代原有的AsBroadcast机制。使得刚出来的时候很多人根本不会用。

这里就不讨论更多了，先说loading。含有大量v2组件的产品要想见人肯定是不能不作loading的，比如aw's blog左边的那个blog小贴士。然而每次在loading的时候似乎都会遇到麻烦。那就是笨重的体积全部被放到第一帧导出了，这样导致对一些300k以内的，含有v2组件的SWF文件进行远程载入的loading效果变得捉襟见肘。

解决的办法也不是没有，简单概括为三个步骤：

一、去掉“Export in first frame”



二、在发布的时候设置一下“Export frame for classes”,这一点非常重要!



三、对于外埠读取的含有V2的swf文件，将容器mc进行如下设置：

loader_mc._lockroot = true;

好了，现在放心享受精彩而笨重的V2组件吧~！

]]></description>
		</item>
		<item>
			<title>Flash广告播放器开发</title>
			<link>http://www.kingmx.com/article.php?id=13414</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            很多网站都使用了swf格式的flash广告，如何让这些广告更有序的出现，网站建设者们都使用了flash广告播放器，其表现形式也非常丰富，但里面所含的技术大同小异。Flash广告播放器播放的广告经常需要更换，因此，使用外部文件导入到广告播放器是一种可行的方法。这些外部文件包括swf、jpg等格式的广告文件、组织数据的xml文件和用来格式化文本的css文件等，这样，更换广告，改变文本的格式就变得非常方便。： 
准备播放器的素材 
创建目录，用于保存相关文件，以播放jpg格式的图片为例，首先准备几张图片，统一放在一个名为"mypic"的目录下，分别命名为1.jpg到n.jpg。 
编写外部数据文件 
&nbsp;&nbsp;&nbsp; 1、编写css文件，新建一个txt文件，输入播放器中的文本格式内容，如字体颜色等。如下所示： 

.message&nbsp;{&nbsp; 
color:&nbsp;#FFFFFF;&nbsp; 
font-family:&nbsp;Arial,Helvetica,sans-serif;&nbsp; 
font-size:&nbsp;12px;&nbsp; 
font-weight:&nbsp;bold;&nbsp; 
}&nbsp;
将上面写好的文件保存，把文件名改为styles.css。&nbsp;
&nbsp;&nbsp;&nbsp; 2、编写xml文件，新建一个txt文件，输入相关数据，如下所示： 

&lt;?xml&nbsp;version="1.0"&nbsp;encoding="gb2312"?&gt;&nbsp; 
&lt;info&nbsp;baseURL="mypic/"&nbsp;delayTime="8"&gt;&nbsp; 
&lt;picName&nbsp;id="0"&nbsp;Name="pic1.jpg"&gt;&lt;![CDATA[&lt;a&nbsp;href="http://www.macromedia.com"&nbsp;target="_blank"&nbsp;class="message"&gt;信息技术教育第1期&lt;/a&gt;]]&gt;&lt;/picName&gt;&nbsp; 
&lt;picName&nbsp;id="1"&nbsp;Name="pic2.jpg"&gt;&lt;![CDATA[&lt;a&nbsp;href="http://www.macromedia.com"&nbsp;target="_blank"&nbsp;class="message"&gt;信息技术教育第2期&lt;/a&gt;]]&gt;&lt;/picName&gt;&nbsp; 
&lt;picName&nbsp;id="2"&nbsp;Name="pic3.jpg"&gt;&lt;![CDATA[&lt;a&nbsp;href="http://www.macromedia.com"&nbsp;target="_blank"&nbsp;class="message"&gt;第3张图片&lt;/a&gt;]]&gt;&lt;/picName&gt;&nbsp; 
&lt;picName&nbsp;id="3"&nbsp;Name="pic4.jpg"&gt;&lt;![CDATA[&lt;a&nbsp;href="http://www.macromedia.com"&nbsp;target="_blank"&nbsp;class="message"&gt;第4张图片&lt;/a&gt;]]&gt;&lt;/picName&gt;&nbsp;&nbsp;&nbsp; 
&lt;/info&gt;&nbsp;
同样保存为myinfo.xml文件。 
编写播放器的类库 
播放器要载入多种外部文件，因此，编写自己的一个加载类库是一种好的解决方法，首先建立一个抽象加载类，定义属性、方法及事件，其它的具体加载类都继承此抽象加载类。&nbsp;
&nbsp;&nbsp;&nbsp; 1、抽象加载类 

import&nbsp;mx.utils.Delegate;&nbsp; 
import&nbsp;mx.events.EventDispatcher;&nbsp; 
class&nbsp;fc.load.AbstractLoad&nbsp;{&nbsp; 
&nbsp;&nbsp;private&nbsp;var&nbsp;dispatchEvent:Function;&nbsp; 
&nbsp;&nbsp;public&nbsp;var&nbsp;addEventListener:Function;&nbsp; 
&nbsp;&nbsp;public&nbsp;var&nbsp;removeEventListener:Function;&nbsp; 
&nbsp;&nbsp;private&nbsp;var&nbsp;loadObject:Object;&nbsp; 
&nbsp;&nbsp;private&nbsp;var&nbsp;loadID:Number;&nbsp; 
&nbsp;&nbsp;function&nbsp;getBytesLoaded()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;loadObject.getBytesLoaded();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;function&nbsp;getBytesTotal()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;loadObject.getBytesTotal();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;private&nbsp;function&nbsp;checkProgress()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;perLoaded:Number&nbsp;=&nbsp;Math.floor(getBytesLoaded()/getBytesTotal()*100);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;dispatchEvent({type:"onProgress",&nbsp;value:perLoaded});&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;endLoad(perLoaded);&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;&nbsp; 
private&nbsp;function&nbsp;startLoad()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;EventDispatcher.initialize(this);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadID&nbsp;=&nbsp;setInterval(Delegate.create(this,&nbsp;checkProgress),&nbsp;30);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;dispatchEvent({type:"onProgress",&nbsp;value:0});&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;private&nbsp;function&nbsp;endLoad(perLoaded)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(perLoaded&gt;=100)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatchEvent({type:"onComplete",&nbsp;value:loadObject});&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(loadID);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;}&nbsp; 
}&nbsp;
&nbsp;&nbsp;&nbsp; 2、加载xml的类 

import&nbsp;fc.load.AbstractLoad;&nbsp; 
import&nbsp;mx.utils.Delegate;&nbsp; 
class&nbsp;fc.load.Xml&nbsp;extends&nbsp;AbstractLoad&nbsp;{&nbsp; 
&nbsp;&nbsp;private&nbsp;var&nbsp;loadObject:XML;&nbsp; 
&nbsp;&nbsp;function&nbsp;Xml()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject&nbsp;=&nbsp;new&nbsp;XML();&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject.ignoreWhite&nbsp;=&nbsp;true;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;System.useCodepage&nbsp;=&nbsp;true;&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;public&nbsp;function&nbsp;load(url:String)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject.load(url);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;startLoad();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
}&nbsp;
&nbsp;&nbsp;&nbsp; 3、加载css的类 

import&nbsp;fc.load.AbstractLoad;&nbsp; 
import&nbsp;mx.utils.Delegate;&nbsp; 
class&nbsp;fc.load.Css&nbsp;extends&nbsp;AbstractLoad&nbsp;{&nbsp; 
&nbsp;&nbsp;private&nbsp;var&nbsp;loadObject:TextField.StyleSheet;&nbsp; 
&nbsp;&nbsp;function&nbsp;Css()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject&nbsp;=&nbsp;new&nbsp;TextField.StyleSheet();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;public&nbsp;function&nbsp;load(url:String)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject.load(url);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;startLoad();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
}&nbsp;
&nbsp;&nbsp;&nbsp; 4、加载影片的类 

import&nbsp;fc.load.AbstractLoad;&nbsp; 
class&nbsp;fc.load.Movie&nbsp;extends&nbsp;AbstractLoad&nbsp;{&nbsp; 
&nbsp;&nbsp;private&nbsp;var&nbsp;loadObject:MovieClip;&nbsp; 
&nbsp;&nbsp;function&nbsp;Movie(mc)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//装载影片等的影片剪辑&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject&nbsp;=&nbsp;mc;&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;public&nbsp;function&nbsp;load(url:String)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject.loadMovie(url);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;startLoad();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;public&nbsp;function&nbsp;unload()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;loadObject.unloadMovie();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
}&nbsp;
&nbsp;&nbsp;&nbsp; 5、编写loading类 

class&nbsp;Loading&nbsp;{&nbsp; 
&nbsp;&nbsp;var&nbsp;_path:MovieClip;&nbsp; 
&nbsp;&nbsp;function&nbsp;Loading(p)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path&nbsp;=&nbsp;p;&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;function&nbsp;create(value)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path.createTextField("loading",&nbsp;_path.getNextHighestDepth(),&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path.loading.autoSize&nbsp;=&nbsp;true;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path.loading.text&nbsp;=&nbsp;"loading..."+value+"%";&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path.loading._x&nbsp;=&nbsp;(200-_path.loading._width)/2;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path.loading._y&nbsp;=&nbsp;(233-_path.loading._height)/2;&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;function&nbsp;clear()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_path.loading.removeTextField();&nbsp; 
&nbsp;&nbsp;}&nbsp; 
}&nbsp;
制作广告播放器&nbsp;
&nbsp;&nbsp;&nbsp; 图层介绍如下： 
在"background"图层中，放置广告播放器的背景； 
在"label"图层中，设置帧标签，方便帧的跳转； 
在"as"图层中，放置相应的加载、播放代码等，主要包含四个空白关键帧，第2帧用于加载xml文件，并把其中的数据保存一个对象中。第10帧加载css文件，同样把信息保存在一个对象中，第20帧主要是与播放相关的代码，如载入广告文件，切换效果等。&nbsp;
&nbsp;&nbsp;&nbsp; 2、编写加载xml文件的代码： 

stop();&nbsp; 
import&nbsp;fc.load.*&nbsp; 
import&nbsp;mx.utils.Delegate;&nbsp; 
var&nbsp;pic&nbsp;=&nbsp;new&nbsp;Object();&nbsp; 
//保存图片信息的对象&nbsp; 
var&nbsp;xmlData&nbsp;=&nbsp;new&nbsp;Xml();&nbsp; 
xmlData.load("myinfo.xml");&nbsp; 
xmlData.addEventListener("onComplete",&nbsp;Delegate.create(this,&nbsp;loadComplete));&nbsp; 
xmlData.addEventListener("onProgress",&nbsp;Delegate.create(this,&nbsp;loadPorgress));&nbsp; 
function&nbsp;loadComplete(obj)&nbsp;{&nbsp; 
&nbsp;&nbsp;var&nbsp;readxml&nbsp;=&nbsp;obj.value.firstChild;&nbsp; 
&nbsp;&nbsp;pic.path&nbsp;=&nbsp;readxml.attributes.baseURL;&nbsp; 
&nbsp;&nbsp;//图片路径&nbsp; 
&nbsp;&nbsp;pic.time&nbsp;=&nbsp;readxml.attributes.delayTime;&nbsp; 
&nbsp;&nbsp;//图片延迟出现时间&nbsp; 
&nbsp;&nbsp;pic.list&nbsp;=&nbsp;[];&nbsp; 
&nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&lt;readxml.childNodes.length;&nbsp;i++)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;pic.list[i]&nbsp;=&nbsp;new&nbsp;Object();&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;pic.list[i].id&nbsp;=&nbsp;readxml.childNodes[i].attributes.id;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//索引读取&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;pic.list[i].name&nbsp;=&nbsp;readxml.childNodes[i].attributes.Name;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//图片名读取&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;pic.list[i].info&nbsp;=&nbsp;readxml.childNodes[i].firstChild;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//文字信息&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//trace(pic.path+pic.list[i].name);&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;delete&nbsp;xmlData;&nbsp; 
&nbsp;&nbsp;gotoAndPlay("css");&nbsp; 
}&nbsp; 
function&nbsp;loadPorgress(obj)&nbsp;{&nbsp; 
&nbsp;&nbsp;//trace("loading");&nbsp; 
}&nbsp;
&nbsp;&nbsp;&nbsp; 3、编写加载css文件的代码 

stop();&nbsp; 
import&nbsp;fc.load.Css;&nbsp; 
import&nbsp;mx.utils.Delegate;&nbsp; 
var&nbsp;style&nbsp;=&nbsp;new&nbsp;Object();&nbsp; 
var&nbsp;cssData:Css&nbsp;=&nbsp;new&nbsp;Css();&nbsp; 
cssData.load("styles.css");&nbsp; 
cssData.addEventListener("onComplete",&nbsp;Delegate.create(this,&nbsp;loadComplete));&nbsp; 
cssData.addEventListener("onProgress",&nbsp;Delegate.create(this,&nbsp;loadPorgress));&nbsp; 
function&nbsp;loadComplete(obj)&nbsp;{&nbsp; 
&nbsp;&nbsp;style&nbsp;=&nbsp;obj.value;&nbsp; 
&nbsp;&nbsp;gotoAndStop("pic");&nbsp; 
&nbsp;&nbsp;delete&nbsp;cssData;&nbsp; 
}&nbsp; 
function&nbsp;loadPorgress(obj)&nbsp;{&nbsp; 
&nbsp;&nbsp;//loading&nbsp; 
}&nbsp; 
4、编写载入广告等代码&nbsp; 
stop();&nbsp; 
import&nbsp;fc.load.Movie;&nbsp; 
import&nbsp;mx.utils.Delegate;&nbsp; 
import&nbsp;mx.transitions.*;&nbsp; 
import&nbsp;mx.transitions.easing.*;&nbsp; 
var&nbsp;myTransitionManager:TransitionManager;&nbsp; 
var&nbsp;index:Number&nbsp;=&nbsp;0;&nbsp; 
var&nbsp;time:Number&nbsp;=&nbsp;0;&nbsp; 
var&nbsp;_timeID:Number&nbsp;=&nbsp;0;&nbsp; 
var&nbsp;alpha&nbsp;=&nbsp;10;&nbsp; 
var&nbsp;showText&nbsp;=&nbsp;true;&nbsp; 
init();&nbsp; 
//加载外部jpg文件&nbsp; 
function&nbsp;init()&nbsp;{&nbsp; 
&nbsp;&nbsp;var&nbsp;picData:Movie&nbsp;=&nbsp;new&nbsp;Movie(this.createEmptyMovieClip("picmc",&nbsp;1));&nbsp; 
&nbsp;&nbsp;picData.load(pic.path+pic.list[index].name);&nbsp; 
&nbsp;&nbsp;picData.addEventListener("onComplete",&nbsp;Delegate.create(this,&nbsp;loadComplete));&nbsp; 
&nbsp;&nbsp;picData.addEventListener("onProgress",&nbsp;Delegate.create(this,&nbsp;loadPorgress));&nbsp; 
}&nbsp; 
//加载完成函数&nbsp; 
function&nbsp;loadComplete(obj)&nbsp;{&nbsp; 
&nbsp;&nbsp;picmc.onEnterFrame&nbsp;=&nbsp;function()&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this._width&nbsp;!=&nbsp;0)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;this.onEnterFrame;&nbsp; 
//添加过渡效果&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myTransitionManager:TransitionManager&nbsp;=&nbsp;new&nbsp;TransitionManager(picmc);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTransitionManager.startTransition({type:PixelDissolve,&nbsp;direction:Transition.IN,&nbsp;duration:0.5,&nbsp;easing:None.easeNone,&nbsp;xSections:20,&nbsp;ySections:20});&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myListener:Object&nbsp;=&nbsp;new&nbsp;Object();&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListener.allTransitionsInDone&nbsp;=&nbsp;function(eventObj:Object)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setText();&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTransitionManager.addEventListener("allTransitionsInDone",&nbsp;myListener);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;};&nbsp; 
}&nbsp; 
function&nbsp;loadPorgress(obj)&nbsp;{&nbsp; 
}&nbsp; 
//设置广告说明文字&nbsp; 
function&nbsp;setText()&nbsp;{&nbsp; 
&nbsp;&nbsp;this.createEmptyMovieClip("textmc",&nbsp;2);&nbsp; 
&nbsp;&nbsp;textmc.createEmptyMovieClip("mc",&nbsp;2);&nbsp; 
&nbsp;&nbsp;createBg(textmc.mc,&nbsp;0,&nbsp;233,&nbsp;200,&nbsp;20);&nbsp; 
&nbsp;&nbsp;textmc.createTextField("showInfo",&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0);&nbsp; 
&nbsp;&nbsp;with&nbsp;(textmc)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo.wordWrap&nbsp;=&nbsp;false;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo.html&nbsp;=&nbsp;true;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo.autoSize&nbsp;=&nbsp;true;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo.styleSheet&nbsp;=&nbsp;style;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo.htmlText&nbsp;=&nbsp;pic.list[index].info;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;=&nbsp;showInfo.text;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo.text&nbsp;=&nbsp;str;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo._x&nbsp;=&nbsp;(200-showInfo._width)/2;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;showInfo._y&nbsp;=&nbsp;233;&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;this.createTextField("showTime",&nbsp;3,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0);&nbsp; 
&nbsp;&nbsp;showTime.autoSize&nbsp;=&nbsp;true;&nbsp; 
&nbsp;&nbsp;showTime.text&nbsp;=&nbsp;pic.time+"s";&nbsp; 
&nbsp;&nbsp;_timeID&nbsp;=&nbsp;setInterval(this,&nbsp;"delayFunc",&nbsp;1000);&nbsp; 
}&nbsp; 
//文字背景&nbsp; 
function&nbsp;createBg(mc,&nbsp;sx,&nbsp;sy,&nbsp;w,&nbsp;h)&nbsp;{&nbsp; 
&nbsp;&nbsp;mc.beginFill(0x333333,&nbsp;40);&nbsp; 
&nbsp;&nbsp;//mc.lineStyle(1);&nbsp; 
&nbsp;&nbsp;mc.moveTo(sx,&nbsp;sy);&nbsp; 
&nbsp;&nbsp;mc.lineTo(sx+w,&nbsp;sy);&nbsp; 
&nbsp;&nbsp;mc.lineTo(sx+w,&nbsp;sy+h);&nbsp; 
&nbsp;&nbsp;mc.lineTo(sx,&nbsp;sy+h);&nbsp; 
&nbsp;&nbsp;mc.lineTo(sx,&nbsp;sy);&nbsp; 
&nbsp;&nbsp;mc.endFill();&nbsp; 
}&nbsp; 
//每张广告展示的时间设置&nbsp; 
function&nbsp;delayFunc()&nbsp;{&nbsp; 
&nbsp;&nbsp;var&nbsp;temptime&nbsp;=&nbsp;pic.time-time;&nbsp; 
&nbsp;&nbsp;showTime.text&nbsp;=&nbsp;temptime+"s";&nbsp; 
&nbsp;&nbsp;if&nbsp;(time&gt;=pic.time)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(_timeID);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;time&nbsp;=&nbsp;0;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//消失&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myTransitionManager:TransitionManager&nbsp;=&nbsp;new&nbsp;TransitionManager(picmc);&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;myTransitionManager.startTransition({type:PixelDissolve,&nbsp;direction:Transition.OUT,&nbsp;duration:0.5,&nbsp;easing:None.easeNone,&nbsp;xSections:20,&nbsp;ySections:20});&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myListener:Object&nbsp;=&nbsp;new&nbsp;Object();&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;myListener.allTransitionsOutDone&nbsp;=&nbsp;function(eventObj:Object)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index++;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(index&gt;=pic.list.length)&nbsp;{&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;=&nbsp;0;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;myTransitionManager.addEventListener("allTransitionsOutDone",&nbsp;myListener);&nbsp; 
&nbsp;&nbsp;}&nbsp; 
&nbsp;&nbsp;time++;&nbsp; 
}&nbsp;
本广告播放器使用自已编写的加载类，方便以后的加载操作。使用系统提供的过渡类，轻松制作多样的过渡效果。因此，开发项目时，如果能建立自己的类库，一定能事半功倍。]]></description>
		</item>
		<item>
			<title>将google map整合进flash form？</title>
			<link>http://www.kingmx.com/article.php?id=13410</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
无聊的时候总有无聊的想法，看了今天的标题，你大概以为我在天方夜谈，但如果你走进 Yahoo Maps Developer Network看看的话，你会知道我不是在说大话，还真的是应验了那句话"没有实现不了的应用，只有你想不到的应用！"详细看完yahoo map的资料你大概有个了解了吧，yahoo map在flash form中展示应该不难，只要下载他的Flash/AS API ，在flash form中用

&lt;cfformitemtype="script&gt;叫用mapAPI的data写成as文件放到此叫用&lt;/cfformitem&gt;

应该可以很ok的实现，而且我发现map提供了as的源码，对我这个对as不大感冒的人真的是感激不尽，直接载下来用了拉！^_^原理就是用一个value来触发coldfusion和flash之间的连接，进行数据交互，我想大概的流程是这样的，按照yahoo map api的文档，你可以调用里面的实例，来叫用数据返回，将整理好的code保存成fla文件，导出swf文件放入flash form中，可以这样插入：

&lt;cftextareaname="Ymap"html="true"height="400"width="600"&gt;

&lt;p&gt;&lt;imgid="ymap"hspace="0"vspace="0"src="Ymap.swf"&gt;&lt;/p&gt;

&lt;/cftextarea&gt;

下面的代码实现了在map中的拖拉，yahoo粘过来的

importcom.yahoo.maps.tools.PanTool;

myMap.addEventListener(com.yahoo.maps.api.flash.YahooMap.EVENT_INITIALIZE,onInitMap);

functiononInitMap(eventData){

varpanTool=newPanTool();

myMap.addTool(panTool,true);

}

相关资料地址：

Yahoo! Maps AS-Flash API - Getting Started Guide

Reference Manual for the Yahoo! Maps Flash APIs

The New Family of Yahoo! Maps Web Services


]]></description>
		</item>
		<item>
			<title>Flash制作书法动画</title>
			<link>http://www.kingmx.com/article.php?id=13411</link>
			<pubDate>2006-11-2</pubDate>
			<description><![CDATA[
            
先看动画效果： 





1.首先新建一flash文档，修改文档尺寸为，宽500，高350，设背景颜色为＃006666。然后制作所需的元件：

制作卷轴：

点击插入菜单—选择“新建元件”，在弹出的对话框上名称：填上“轴”，行为：选择“图形”然后确定，


]]></description>
		</item>
	</channel>
 </rss>
