<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[*Eoocy's Blog* - AS3技巧与特效]]></title>
<link>http://www.eoocy.com/</link>
<description><![CDATA[激情的工作 开心的生活]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[lihelihe@126.com(Eoocy)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>*Eoocy&#39;s Blog*</title>
	<url>http://www.eoocy.com/images/logos.gif</url>
	<link>http://www.eoocy.com/</link>
	<description>*Eoocy&#39;s Blog*</description>
</image>

			<item>
			<link>http://www.eoocy.com/article.asp?id=10</link>
			<title><![CDATA[AS3的精典功能经验技巧]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Tue,13 Jan 2009 14:51:53 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=10</guid>
		<description><![CDATA[<p>在L4cd的BLOG上看到几个比较好的文章，现在整理一下，统一发布，感谢Lc4d共享他的经验<br />
&nbsp;</p>
<h4>1.getDefinition - 模块化你的程序</h4>
<p>为了加快程序的加载..<br />
我们通常会把不同的功能模块做成不同的swf,要需要的时候再进行加载.<br />
<br />
开始的时候..我们通常会直接使用loader加载,,然后用addChild把loader显示出来..<br />
这样就完成了最简单的&quot;模块&quot;化了..<br />
<br />
当然进一步..我们会发现上面的方法已经满足不了我们的需求..<br />
有时候我们需要的不是一个实例对象,我们想得到的是一个类..让我们可以像调用自身库中的类一样可以实例化..复制..等等<br />
<br />
这时候我们就可以使用ApplicationDomain(应用程序域),把加载进来的swf中的库的东西当自己的库一样使用<br />
<br />
概念性的东西还是不好说...<br />
直接看代码吧..下面的代码就是一个最简单的例子<br />
&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//还是需要loader先进行加载 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">var</span><span>&nbsp;loader:</span><span class="keyword">Loader</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Loader</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>loader.contentLoaderInfo.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.COMPLETE,loaderComplete) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//sub.swf是一个外部swf,该swf库里有一个链接名叫&quot;k_abc&quot;元件 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>loader.load(</span><span class="keyword">new</span><span>&nbsp;URLRequest(</span><span class="string">&quot;sub.swf&quot;</span><span>)) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;loaderComplete(e:</span><span class="keyword">Event</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//创建一个应用程序域 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;app:</span><span class="keyword">ApplicationDomain</span><span>&nbsp;=&nbsp;loader.contentLoaderInfo.applicationDomain &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//使用getDefinition返回sub.swf的库中链接名为k_abc的Class </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;c:Class&nbsp;=&nbsp;app.getDefinition(</span><span class="string">&quot;k_abc&quot;</span><span>)&nbsp;as&nbsp;Class &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//接下来就不多说了..像普通的类一样操作就</span></li>
</ol>
</div>
<h4><br />
2.AS3中for循环创建(复制)对象</h4>
<p><br />
在as2中,我们经常使用for来创建或复制多个相同的对象,<br />
到了as3,由于建立对象的方法的改变,以前的方法已经不适用了.<br />
今天介绍一下as3的方法:<br />
方法常用的有两种,<br />
第一种适用所有的对象,方法是先建一个数组,然后把建立的对象的引用指定对数组相应的索引<br />
第二种适用显示对象,其实在as3中,都应该用这种方式,就是给对象指定name,然后使用getChildByName的方式来引用该对象.</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//通用的方法,适用所以对象 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">var</span><span>&nbsp;obj:</span><span class="keyword">Array</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Array</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i:</span><span class="keyword">uint</span><span>=0;i&lt;10;i++){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;m:</span><span class="keyword">MovieClip</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">MovieClip</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;addChild(m) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;obj[</span><span class="string">&quot;mc&quot;</span><span>+i]&nbsp;=&nbsp;m &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>trace(obj[</span><span class="string">&quot;mc1&quot;</span><span>]) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="comment">//适用显示对象 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;k:</span><span class="keyword">uint</span><span>=0;k&lt;10;k++){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;mm:</span><span class="keyword">MovieClip</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">MovieClip</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;mm.name&nbsp;=&nbsp;</span><span class="string">&quot;mc&quot;</span><span>+k &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;addChild(mm) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>trace(getChildByName(</span><span class="string">&quot;mc1&quot;</span><span>))&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
//通用的方法,适用所以对象
var obj:Array = new Array()
for(var i:uint=0;i&lt;10;i++){
	var m:MovieClip = new MovieClip()
	addChild(m)
	obj[&quot;mc&quot;+i] = m
}
trace(obj[&quot;mc1&quot;])

//适用显示对象
for(var k:uint=0;k&lt;10;k++){
	var mm:MovieClip = new MovieClip()
	mm.name = &quot;mc&quot;+k
	addChild(mm)
}
trace(getChildByName(&quot;mc1&quot;))
</pre>
<p><br />
另外,有时候我们会遇到这样的情况<br />
var obj0:MC0 = new MC0()<br />
var obj1:MC1 = new MC1()<br />
var obj2:MC2 = new MC2()<br />
var obj3:MC3 = new MC3()<br />
<br />
这个时修，我们可以使用getDefinitionByName,用字符串返回类<br />
&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i:</span><span class="keyword">uint</span><span>=0;i&lt;4;i++){ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;_class:Class&nbsp;=&nbsp;getDefinitionByName(</span><span class="string">&quot;MC&quot;</span><span>+i)&nbsp;as&nbsp;Class &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;m&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;_class() &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;addChild(m) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<h4><br />
3.代理类</h4>
<p>对于代理类,它的作用就是在不能传参数的时候帮助你传参数,什么时候不能传参数,<br />
像:<br />
<span style="color: #000000"><b>addEventListener(Event.COMPLETE,function)</b></span><br />
这个时候如果我们需要给function参指定的参数以达到不同的效果,就需要用到代理..,我们看看以下的用了代理函数的代码<br />
<span style="color: #000000"><b>addEventListener(Event.COMPLETE,getFun(function,args))</b></span><br />
<br />
这样,我们就可以在本来不可以传参的情况下传送参数.其中getFun就是代理函数.(一般网上都已经直接写成了代理类),getFun会帮我们把function,args生成一个无参数的函数再传给addEventListener,那么我们原来的function只需要写成<br />
function(e:Event[,参数]):void{<br />
　　//代码<br />
}<br />
就可以了</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;getFun(_function:</span><span class="keyword">Function</span><span>,...alt):</span><span class="keyword">Function</span><span>{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;_fun:</span><span class="keyword">Function</span><span>&nbsp;=&nbsp;</span><span class="keyword">function</span><span>&nbsp;(e:*):</span><span class="keyword">void</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;_alt:</span><span class="keyword">Array</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Array</span><span>() &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_function.apply(</span><span class="keyword">null</span><span>,_alt.concat(e,alt)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">return</span><span>&nbsp;_fun; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<h4>4.让对象removeChild时自动删除子对象/属性/侦听</h4>
<p>在AS3里..我们无法手动完全删除一个对象,,<br />
以MovieClip为例..<br />
我们只有在删除它的时候<br />
除了removeChild(对象)外<br />
还必须清空它的子对象<br />
删除所有动态添加的属性<br />
删除所有侦听<br />
删除所有引用<br />
然后等待垃圾回收,<br />
<br />
可是实际操作的时候..<br />
在长长的代码当中..经常会忘记自己什么时候写了侦听..什么时候添加了动态属性<br />
<br />
其实,,我们可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西<br />
<br />
下面这个类继承了MovieClip,当他的实例在removeChild的时候,对象将&quot;自我毁灭&quot;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;net.L4cd.display{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">import</span><span>&nbsp;flash.display.</span><span class="keyword">MovieClip</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">import</span><span>&nbsp;flash.events.</span><span class="keyword">Event</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;dynamic&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;iMovieClip&nbsp;</span><span class="keyword">extends</span><span>&nbsp;</span><span class="keyword">MovieClip</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;lis:</span><span class="keyword">Array</span><span>;</span><span class="comment">//定义一数组保存侦听 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;iMovieClip(){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lis&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Array</span><span>() &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.REMOVED,remove)</span><span class="comment">//侦听删除事件 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//重写addEventListener,在增加侦听的时候..把相应的事件保存到数组 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;</span><span class="keyword">addEventListener</span><span>(type:</span><span class="keyword">String</span><span>,&nbsp;listener:</span><span class="keyword">Function</span><span>,&nbsp;useCapture:</span><span class="keyword">Boolean</span><span>&nbsp;=&nbsp;</span><span class="keyword">false</span><span>,&nbsp;priority:</span><span class="keyword">int</span><span>&nbsp;=&nbsp;0,&nbsp;useWeakReference:</span><span class="keyword">Boolean</span><span>&nbsp;=&nbsp;</span><span class="keyword">false</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lis.push([type,listener,useCapture]) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">super</span><span>.</span><span class="keyword">addEventListener</span><span>(type,listener,useCapture,priority,useWeakReference) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&quot;自我毁灭&quot;的方法 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;remove(e:</span><span class="keyword">Event</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(e.currentTarget&nbsp;!=&nbsp;e.target)</span><span class="keyword">return</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除子对象 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除前有子对象&quot;</span><span>,numChildren) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(numChildren&nbsp;&gt;&nbsp;0){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeChildAt(0) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除后有子对象&quot;</span><span>,numChildren) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除动态属性 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;k:</span><span class="keyword">String</span><span>&nbsp;</span><span class="keyword">in</span><span>&nbsp;</span><span class="keyword">this</span><span>){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除属性&quot;</span><span>,k) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">delete</span><span>&nbsp;</span><span class="keyword">this</span><span>[k] &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除侦听 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i:</span><span class="keyword">uint</span><span>=0;i&lt;lis.length;i++){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除Listener&quot;</span><span>,lis[i][0]) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeEventListener(lis[i][0],lis[i][1],lis[i][2]) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lis&nbsp;=&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
package net.L4cd.display{
	import flash.display.MovieClip;
	import flash.events.Event;
	dynamic public class iMovieClip extends MovieClip{
		private var lis:Array;//定义一数组保存侦听
		public function iMovieClip(){
			lis = new Array()
			addEventListener(Event.REMOVED,remove)//侦听删除事件
		}
		
		//重写addEventListener,在增加侦听的时候..把相应的事件保存到数组
		override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
			lis.push([type,listener,useCapture])
			super.addEventListener(type,listener,useCapture,priority,useWeakReference)
		}
		
		//&quot;自我毁灭&quot;的方法
		private function remove(e:Event):void{
			if(e.currentTarget != e.target)return
			stop()
			//删除子对象
			trace(&quot;删除前有子对象&quot;,numChildren)
			while(numChildren &gt; 0){
				removeChildAt(0)
			}
			trace(&quot;删除后有子对象&quot;,numChildren)
			
			//删除动态属性
			for(var k:String in this){
				trace(&quot;删除属性&quot;,k)
				delete this[k]
			}
			
			//删除侦听
			for(var i:uint=0;i&lt;lis.length;i++){
				trace(&quot;删除Listener&quot;,lis[i][0])
				removeEventListener(lis[i][0],lis[i][1],lis[i][2])
			}
			lis = null
		}
	}
}</pre>
<p>然后我们另外新建一个flash,直接在时间轴上写下以下代码</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;net.L4cd.display.iMovieClip; &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">var</span><span>&nbsp;mc:</span><span class="keyword">MovieClip</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;iMovieClip() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.ADDED,aaaa) &nbsp;&nbsp;</span></li>
    <li><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.ADDED_TO_STAGE,aaaa) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.ENTER_FRAME,aaaa) &nbsp;&nbsp;</span></li>
    <li><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.CLICK,aaaa) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.MOUSE_DOWN,aaaa) &nbsp;&nbsp;</span></li>
    <li><span>mc.a&nbsp;=&nbsp;</span><span class="string">&quot;http://L4cd.Net&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.b&nbsp;=&nbsp;</span><span class="string">&quot;我是动态属性2&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>mc.name&nbsp;=&nbsp;</span><span class="string">&quot;我是MC&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>addChild(mc) &nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;aaaa(e:</span><span class="keyword">Event</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>removeChild(mc) &nbsp;&nbsp;</span></li>
    <li><span>mc&nbsp;=&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
import net.L4cd.display.iMovieClip;
var mc:MovieClip = new iMovieClip()
mc.addEventListener(Event.ADDED,aaaa)
mc.addEventListener(Event.ADDED_TO_STAGE,aaaa)
mc.addEventListener(Event.ENTER_FRAME,aaaa)
mc.addEventListener(MouseEvent.CLICK,aaaa)
mc.addEventListener(MouseEvent.MOUSE_DOWN,aaaa)
mc.a = &quot;http://L4cd.Net&quot;
mc.b = &quot;我是动态属性2&quot;
mc.name = &quot;我是MC&quot;
addChild(mc)
function aaaa(e:Event){
	
}
removeChild(mc)
mc = null</pre>
<p>运行后.,,输出框就会出现</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>删除前有子对象&nbsp;0 &nbsp;&nbsp;</span></span></li>
    <li><span>删除后有子对象&nbsp;0 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除属性&nbsp;b &nbsp;&nbsp;</span></li>
    <li><span>删除属性&nbsp;a &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除Listener&nbsp;removed &nbsp;&nbsp;</span></li>
    <li><span>删除Listener&nbsp;added &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除Listener&nbsp;addedToStage &nbsp;&nbsp;</span></li>
    <li><span>删除Listener&nbsp;enterFrame &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除Listener&nbsp;click &nbsp;&nbsp;</span></li>
    <li><span>删除Listener&nbsp;mouseDown&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
删除前有子对象 0
删除后有子对象 0
删除属性 b
删除属性 a
删除Listener removed
删除Listener added
删除Listener addedToStage
删除Listener enterFrame
删除Listener click
删除Listener mouseDown</pre>
<p>这样,,,我们能做的事都已经做完了..等垃圾回收进行回收就ok了<br />
<br />
上面的remove方法就是mc在移除的时候,对自己进行的清理,,<br />
注意的是,以上只针对MovieClip进行的清理,每个类或你自定义的类都有不同..<br />
如Sprite不需用要stop(),不需要删除动态属性..等等..<br />
这个就由你自己去发挥~<br />
写一组自己的&quot;自我毁灭&quot;类..<br />
<br />
还有需要注意的是..像有时候,你只想removeChild,而不想进行删除,这样可以把上面的代码进行修改.<br />
把remove设置为公开的方法<br />
然后把addEventListener(Event.REMOVED,remove)去掉..<br />
最后在你想删除对象的时候,,,再调用remove()就ok了..</p>
<p>&nbsp;</p>
<h4>5.自定义双击事件 - iDoubleClick</h4>
<p>flash从as3开始支持双击事件..<br />
我们只需要使用对象.doubleClickEnabled = true,再侦听MouseEvent.DOUBLE_CLICK事件~<br />
就可以使用双击事件<br />
可是发现了一个不足的地方..<br />
如果我们同时侦听双击跟单击事件,,<br />
那当双击的时候.就会出现两个事件同时发生..<br />
这种情况实在不是很符合我们一般的需求..<br />
<br />
看来还是要用as2的老办法,用单击间的延时..来判断单击与双击..不过由于as3的事件机制~~<br />
我们完全可以模拟发现双击..<br />
<br />
<br />
直接看看应用代码<br />
&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//导入类 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">import</span><span>&nbsp;net.L4cd.*; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//启用双击事件,注意一下.这里的200是指两次点击之前的延时. </span><span>&nbsp;&nbsp;</span></li>
    <li><span>iDoubleClick.enable(mc,200) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="comment">//另外可以使用&nbsp;&nbsp;iDoubleClick.disable(mc)&nbsp;&nbsp;&nbsp;来取消自定义双击 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//像平常一样侦听 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.DOUBLE_CLICK,mcDouClick) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.CLICK,mcClick) &nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;mcClick(e:</span><span class="keyword">MouseEvent</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;trace(e) &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;mcDouClick(e:</span><span class="keyword">MouseEvent</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;trace(e) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
//导入类
import net.L4cd.*;
//启用双击事件,注意一下.这里的200是指两次点击之前的延时.
iDoubleClick.enable(mc,200)

//另外可以使用  iDoubleClick.disable(mc)   来取消自定义双击
//像平常一样侦听
mc.addEventListener(MouseEvent.DOUBLE_CLICK,mcDouClick)
mc.addEventListener(MouseEvent.CLICK,mcClick)
function mcClick(e:MouseEvent):void{
	trace(e)
}
function mcDouClick(e:MouseEvent):void{
	trace(e)
}</pre>
<p><br />
注意使用了自定义事件后就不要使用doubleClickEnabled = true,以免冲突然</p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=8</link>
			<title><![CDATA[利用stage.invalidate()方法和render事件提高as3程序的运行效率【转载】 ]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Sun,11 Jan 2009 01:36:56 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=8</guid>
		<description><![CDATA[AS3中的DisplayObject有一个render事件，他会在重绘DisplayList之前触发，这给我们提供了在重绘之前最后一次操作的机会。<br/>每次需要DisplayObject触发render事时，都要调用一次 stage.invalidate();<br/><br/>下面用一个小例子来说明一下具体用法把。<br/>假设我们现在要写一个list组件，该组件有addItem()方法用于添加list项目，和remvoeItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> 方法用于删除list项目，当然还可能有addItemAt<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">,</span><span style="color:#5000a0">removeItemAt</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>等方法，这些方法调用后，都需要对list内的显示对象进行重新排列。<br/>我们先实现一个List类，用于显示列表项目<br/>List类中，有addItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> 和 removeItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> 这两个方法提供给外部调用，用于添加和删除list项目，这两个方法中除了将列表项目添加<span style="color:#0000ff">/</span>删除，还要调用一个方法来重新对list中的项目进行排列，layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>。<br/>关键就是，这个layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>的调用，他的调用次数越少，那效率当然就越高啦，如果是常规的做法，就是类似这样：<br/><br/>代码<span style="color:#0000ff">:</span><br/><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/><span style="color:#0000ff">}</span><br/><br/>将item加入后，重新排列列表<br/><br/>下面是List类的源代码<span style="color:#0000ff">:</span><br/><br/>代码<span style="color:#0000ff">:</span><br/><br/>package <span style="color:#0000ff">{</span> <br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>DisplayObject<span style="color:#0000ff">;</span> <br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span> <br/>import flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">;</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> class List <span style="color:#00a0c0"><strong>extends</strong></span> Sprite <br/><span style="color:#0000ff">{</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/><span style="color:#0000ff">}</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> removeItem<span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>contains<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">)</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span> <br/><span style="color:#0000ff">}</span> <br/><br/>这个程序粗看似乎没什么问题，但却存在一个效率问题<br/>如果只调用一次addItem，没问题，如果调用10次呢？ 前9次的layoutcontents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>都不是必须的，只有第十次才是真正需要的这样程序的效率就降低了。<br/>我们可以试一下<br/><br/>先需要一个简单的ListItem<br/><br/>代码<span style="color:#0000ff">:</span><br/>package <br/><span style="color:#0000ff">{</span> <br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Shape<span style="color:#0000ff">;</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> class ListItem <span style="color:#00a0c0"><strong>extends</strong></span> Shape <br/><span style="color:#0000ff">{</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000a0"><strong>super</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics<span style="color:#0000ff">.</span><span style="color:#5000a0">beginFill</span><span style="color:#0000ff">(</span>0xFF6600<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics<span style="color:#0000ff">.</span>drawRect<span style="color:#0000ff">(</span>0<span style="color:#0000ff">,</span> 0<span style="color:#0000ff">,</span> 30<span style="color:#0000ff">,</span> 16<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics<span style="color:#0000ff">.</span><span style="color:#5000a0">endFill</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span> <br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/>然后测试<br/>package <span style="color:#0000ff">{</span><br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class ListTest <span style="color:#00a0c0"><strong>extends</strong></span> Sprite <span style="color:#0000ff">{</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> ListTest<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> <span style="color:#5000a0">list</span><span style="color:#0000ff">:</span>List <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> List<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span><span style="color:#5000a0">list</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#5000a0">list</span><span style="color:#0000ff">.</span><span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#5000a0">list</span><span style="color:#0000ff">.</span><span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#5000a0">list</span><span style="color:#0000ff">.</span><span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/>我们可以看到，输出了3次 <span style="color:#800000"><strong>do</strong></span> layout 说明layoutcontents执行了3次，前两次都是多余的。<br/>现在，解决办法就是利用render事件啦。<br/>因为在当前帧内，显示列表更新前会触发render事件，所以在render事件触发后来排列列表项目，就可以保证排列方法在做了任意次的添加或删除操作后只需调用一次，从而提高效率。<br/>这么做只需要对List类稍做一些改动，首先肯定是要监听render事件，我们可以仅监听stage对象的render事件即可，因为这样以后可以做一个独立的RepaintManger来管理所有组件的重绘（可以参考AsWing的RepaintManager类）。<br/>在render事件触发后，做我们需要的调整，由于要render事件触发，就必须先调用stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> ，所以每次添加或删除list项目后，都要执行一次该方法，即<span style="color:#0000ff">:</span><br/>代码<span style="color:#0000ff">:</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span>voide <span style="color:#0000ff">{</span><br/><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><br/>stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><br/><span style="color:#0000ff">}</span><br/><br/>由于是监听的stage的render事件，所以在添加删除操作后，要做一个标记，表示list有改动，需要在render事件后重新排列，如果该标记为 false，那么即使render触发了也不做排列，因为stage的render事件也有可能是由于该stage内的其他child需要重绘而造成 stage的render触发。<br/><br/><br/>下面是改过后的List代码<br/>package <span style="color:#0000ff">{</span><br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>DisplayObject<span style="color:#0000ff">;</span><br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span><br/>import flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">;</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class List <span style="color:#00a0c0"><strong>extends</strong></span> Sprite <span style="color:#0000ff">{</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>var</strong></span> changed<span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Boolean</strong></span><span style="color:#0000ff">;</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> List<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000a0"><strong>super</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;addEventListener<span style="color:#0000ff">(</span>Event<span style="color:#0000ff">.</span>ADDED_TO_STAGE<span style="color:#0000ff">,</span> __addToStage<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;requireLayout<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> removeItem<span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>contains<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requireLayout<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>function</strong></span> requireLayout<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;changed <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>stage <span style="color:#0000ff">!</span><span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>null</strong></span><span style="color:#0000ff">)</span> stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#008080">//对内部项目进行排列，可以是任意的排列算法</span><br/>protected <span style="color:#800000"><strong>function</strong></span> layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;do layout&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> y<span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Number</strong></span> <span style="color:#0000ff">=</span> 0<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> num<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span> <span style="color:#0000ff">=</span> numChildren<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>for</strong></span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>var</strong></span> i<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">=</span>0<span style="color:#0000ff">;</span> inum<span style="color:#0000ff">;</span> i<span style="color:#0000ff">+</span><span style="color:#0000ff">+</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> child<span style="color:#0000ff">:</span>DisplayObject <span style="color:#0000ff">=</span> getChildAt<span style="color:#0000ff">(</span>i<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child<span style="color:#0000ff">.</span>x <span style="color:#0000ff">=</span> 0<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child<span style="color:#0000ff">.</span>y <span style="color:#0000ff">=</span> y<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y <span style="color:#0000ff">+</span><span style="color:#0000ff">=</span> child<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">+</span>2<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>function</strong></span> __addToStage<span style="color:#0000ff">(</span>e<span style="color:#0000ff">:</span>Event<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;stage<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>Event<span style="color:#0000ff">.</span>RENDER<span style="color:#0000ff">,</span> __render<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>changed<span style="color:#0000ff">)</span> stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>function</strong></span> __render<span style="color:#0000ff">(</span>e<span style="color:#0000ff">:</span>Event<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>changed<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changed <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>false</strong></span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/>当我们再次运行ListTest的时候，do layout 只输出了一次。<br/>就是这些内容，当然，你可能会说，需要做到这些根本不需要这么复杂，只要公开layoutContents方法，在所有操作调用之后让调用者自行调用一次layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>。<br/>在这个例子中当然可以，但是当情况很复杂的时候，使用者每进行一次操作都要自行调用更新的方法，这样做并不是好的解决方案。试想，如果 flashplayer不会为我们处理显示DisplayObject的工作，而是每次addChild<span style="color:#0000ff">/</span>removeChild之后，我们都需要自行调用flashplayer底层的方法来让我们需要的东西显示出来，这样做显然很不好。<br/>完了，就这些东东，写完之后俺感觉自己的表达能力不好，如果觉得我说的很模糊，那就研究下代码吧，全部代码都在上面了，欢迎指教和讨论 <span style="color:#0000ff">^</span><span style="color:#0000ff">^</span> <br/> <br/><span style="color:#0000ff">[</span><span style="color:#008000">color</span><span style="color:#0000ff">=</span>#000099<span style="color:#0000ff">]</span><span style="color:#0000ff">[</span>b<span style="color:#0000ff">]</span>原文地址<span style="color:#0000ff">[</span><span style="color:#0000ff">/</span>b<span style="color:#0000ff">]</span><span style="color:#0000ff">[</span><span style="color:#0000ff">/</span><span style="color:#008000">color</span><span style="color:#0000ff">]</span><br/><span style="color:#0000ff">[</span><span style="color:#008000">url</span><span style="color:#0000ff">=</span>http<span style="color:#0000ff">:</span><span style="color:#008080">//www.5ias.com/as3/2007-12-3/LiYong-render-ShiJianTiGao-as3-ChengXuDeYunHangXiaoLv.html]http://www.5ias.com/as3/2007-12-3/LiYong-render-ShiJianTiGao-as3-ChengXuDeYunHangXiaoLv.html[/url]</span><br/> [/color]]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=7</link>
			<title><![CDATA[一些容易混淆的AS3问题，肯定让你有收获]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Sat,10 Jan 2009 23:23:20 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=7</guid>
		<description><![CDATA[<span style="color:#000000">先说的最基础的：<br/><br/><br/>今天看到Aone发现一个switch扩展应用，一下仿佛自已好傻，一直以为switch没什么太大用处，原来是我们学艺不精啊。<br/><br/>switch可以这么写：<br/><br/>[color=#800000]<strong>var</strong></span> d<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">=</span>0<br/><span style="color:#800000"><strong>switch</strong></span><span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>case</strong></span> aone<span style="color:#0000ff">(</span>d<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;测试测试啊~都闪开点~被trace到了不负责啊~&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>break</strong></span><br/><span style="color:#0000ff">}</span><br/><span style="color:#800000"><strong>function</strong></span> aone<span style="color:#0000ff">(</span>d<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Boolean</strong></span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> d<span style="color:#0000ff">&lt;</span>100<span style="color:#0000ff">?</span><span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>false</strong></span><br/><span style="color:#0000ff">}</span><br/><br/>或者直接省略<br/><br/><span style="color:#800000"><strong>var</strong></span> d<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">=</span>0<br/><span style="color:#800000"><strong>switch</strong></span><span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>case</strong></span> d<span style="color:#0000ff">&lt;</span>100<span style="color:#0000ff">:</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;测试测试啊~都闪开点~被trace到了不负责啊~&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>break</strong></span><br/><span style="color:#0000ff">}</span><br/><span style="color:#800000"><strong>case</strong></span> 可以用条件语句，还可以用方法，switch<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>里的参数也可以换成函数的。<br/><br/><br/>正式开始今天的一问一答：<br/><br/>舞台与时间轴问答<br/>舞台和时间轴的真相正如相对论一样是不引起注意的，但真相带给我们的收获是巨大的。为了使得教程更加面向原因，这里采用问答形式慢慢揭开面纱。本着辩证的思想，在每个观点的背后尽量用实际的代码去求证。当然，还是按照从浅到深的顺序开始。<br/><br/><br/>问：flash中的主时间轴是舞台吗？<br/>答：否，时间轴不是舞台。舞台是播放器。舞台可能是安装到程序中的flashPlayer<span style="color:#0000ff">.</span>exe播放器，也可能是网页中的控件，还可以其它语言如vb，vc<span style="color:#0000ff">,</span>中的控件。主时间轴是播放器播放的swf文件，也是常说的文档类。而舞台是Stage类。<br/><br/><br/>问：什么是文档类？<br/>答：文档类基于MovieClip。是与主时间轴绑定的类。我们可以自定义类与它绑定，如果不指定则自动生成MainTimeline类。<br/>证明：新建一个swf，在第一帧输入：trace<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>this</strong></span> is <span style="color:#0000a0"><strong>MovieClip</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">,</span>向上转型成功，返回true。<br/><br/><br/>问：MainTimeline做了什么事情？<br/>答MainTimeline类自动导入了flash核心类库，以flash开头的包都被导入了。核心类库的swc文件名为：playerglobals<span style="color:#0000ff">.</span>swc。可以在flash的安装目录下搜索到。MainTimeline还自动生成对舞台上的对象引用并初始化。<br/>证明：我们在文档类中建立一个空类：<br/><br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>package<br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#00a0c0"><strong>public</strong></span> class Document <span style="color:#00a0c0"><strong>extends</strong></span> Sprite<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/><br/>然后在时间轴第一帧输入var shape<span style="color:#0000ff">:</span>Shape<span style="color:#0000ff">=</span><span style="color:#800000"><strong>new</strong></span> Shape<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span>报错，原本可以直接使用的Shape没有定义。<br/>附：as3不建议在时间轴上写代码，因为那是脚本编程方式，但在时间轴上非常适用调试代码，因为省去了导入，构造函数等等繁琐的事情。<br/><br/><br/>问：全局坐标指的主时间轴坐标还是舞台坐标<span style="color:#0000ff">?</span><br/>答：指舞台坐标。<br/>证明：在舞台上画一个方块，起名为mc。在第一帧上输入如下代码：<br/><br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>mc<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">,</span>clickHandle<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>function</strong></span> clickHandle<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">:</span>MouseEvent<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span><br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>var</strong></span> point<span style="color:#0000ff">=</span><span style="color:#800000"><strong>new</strong></span> Point<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">.</span>localX<span style="color:#0000ff">,</span>evtObj<span style="color:#0000ff">.</span>localY<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>p<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; p<span style="color:#0000ff">=</span>mc<span style="color:#0000ff">.</span><span style="color:#5000a0">localToGlobal</span><span style="color:#0000ff">(</span>p<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>p<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">.</span>stageX<span style="color:#0000ff">,</span>evtObj<span style="color:#0000ff">.</span>stageY<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><br/><br/><br/><br/>对照可以分发现转换后的坐标就是舞台坐标。<br/><br/><br/>问：主时间轴，也就是文档类的坐标跟舞台有什么不同？<br/>答：文档类与舞台是显示列表中的两个顶级容器，舞台是文档类对象的容器。文档类的坐标相对于文档类对象，舞台坐标相对于舞台。当文档类对象和舞台原始坐标点不同时，区别就显现了。<br/>证明：在舞台左上角画个方块，坐标为<span style="color:#0000ff">(</span>0<span style="color:#0000ff">,</span>0<span style="color:#0000ff">)</span>。在第一帧输入如下代码：<br/>x<span style="color:#0000ff">=</span>10<span style="color:#0000ff">;</span><br/>y<span style="color:#0000ff">=</span>10<span style="color:#0000ff">;</span><br/>可以看到方块位置变了。这说明文档类对象不必非要跟舞台原坐标点重合。正式因为平时都是重合的，所以看不见差别。<br/><br/><br/>问：文档类大小也跟舞台大小不同吗？<br/>答：是的。舞台是可以缩放的，当缩放舞台时可以不缩放文档对象，即使缩放文档对象也不一定拉伸到整个舞台。所以当然是不同的。<br/>证明：如图：<br/><br/><br/><br/><br/><br/><br/><br/>问：舞台有哪些缩放方式：<br/>答：使用Stage的scaleMode来控制缩放模式。scaleMode使用StageScaleMode类的静态常量表示：<br/>StageScaleMode<span style="color:#0000ff">.</span>NO_SCALE<br/>swf文件不随播放器窗口改变。会自动居中。<br/><br/>StageScaleMode<span style="color:#0000ff">.</span>SHOW_ALL<br/>以缩放方式缩放swf文件，维持宽高比。<br/><br/>StageScaleMode<span style="color:#0000ff">:</span>NO_BORDER<br/>以裁剪方式缩放swf文件，维持宽高比。<br/><br/>StageScaleMode<span style="color:#0000ff">.</span>EXACT_FIT<br/>拉伸swf文件，改变宽高比。<br/><br/>注意：在调试模式下NO_SCALE是默认值。而在发布后SHOW_ALL是默认值。<br/><br/>附：由于可以选择缩放，我们在网页中可以使用两种方式让swf在网页中居中：<br/>1．使用缩放模式。使用网页代码让控件居中。<br/>2．控件随着网页的大小而改变。采用noscale模式使内容居中。<br/> <br/>问：缩放看起来非常适合播放动画。但当制作应用程序时不必缩放，能否让swf不要自动居中？<br/>答：可以。在NO_SCALE模式下可以使用align属性来确定对齐方式，align使用StageAlign类的静态常量表示：<br/>StageAlign<span style="color:#0000ff">.</span>TOP<span style="color:#0000ff">:</span> 顶对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM<span style="color:#0000ff">:</span> 底对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">LEFT</span><span style="color:#0000ff">:</span> 左对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">RIGHT</span><span style="color:#0000ff">:</span> 右对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_LEFT<span style="color:#0000ff">:</span> 左上对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_RIGHT<span style="color:#0000ff">:</span> 右上对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_LEFT<span style="color:#0000ff">:</span> 左下对齐。<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_RIGHT<span style="color:#0000ff">:</span> 右下对齐。<br/><br/>我们可以在播放器中导入多个swf采取不同的对齐方式。组合成一个应用程序。<br/><br/><br/>问：舞台的大小如何访问？<br/>答：舞台大小使用stageWidth和stageHeight访问。不管采用哪种缩放模式，都是播放器或者控件的实际大小。<br/><br/><br/>问：鼠标事件中的stageX和stageY也是这样吗？<br/>答：不是，当使用除NO_SCALE之外的模式缩放后，swf文件也被缩放了，舞台内部DPI发生了变化，stageX与stageY是新DPI下的舞台坐标。<br/><br/><br/>问：舞台也继承DisplayObject，那么舞台的x<span style="color:#0000ff">,</span>y和width<span style="color:#0000ff">,</span>height又指的什么？<br/>答：舞台的x<span style="color:#0000ff">,</span>y<span style="color:#0000ff">,</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span>height都是只读的。由于播放器不允许我们改变在系统中的位置，所以x<span style="color:#0000ff">,</span>y都为0。width和height属性也不是改变播放器的大小，而指向文档类的width和height。<br/>证明：<br/>画一个方块，在第一帧输入如下代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/><span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>root<span style="color:#0000ff">.</span><span style="color:#008000">width</span><span style="color:#0000ff">=</span><span style="color:#0000ff">=</span>stage<span style="color:#0000ff">.</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span>root<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">=</span><span style="color:#0000ff">=</span>stage<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><span style="color:#008080">//结果为true,true。</span><br/><br/><br/>问：文档类的x<span style="color:#0000ff">,</span>y是文档类在舞台上的坐标，那么文档类的width和height是文档类的宽和高吗？怎么root<span style="color:#0000ff">.</span>width和root<span style="color:#0000ff">.</span>height结果与属性面板中设置的不同啊。<br/>答：root<span style="color:#0000ff">.</span>width和root<span style="color:#0000ff">.</span>height确实不是文档类的大小。属性面板中才是文档类的大小。<br/><br/><br/>问：那么文档类的大小用什么来访问呢？<br/>答：文档类的大小使用文档类的loaderInfo属性访问，是loaderInfo<span style="color:#0000ff">.</span>width和loaderInfo<span style="color:#0000ff">.</span>height。<br/><br/>问：为什么我访问时提示：Error<span style="color:#0000ff">:</span> Error #2099<span style="color:#0000ff">:</span> 正在加载的对象因尚未完全加载而无法提供此信息？<br/>答：即使是文档类的loaderInfo属性也需要主swf文件加载完毕后才能访问，因此还是得在事件中访问。<br/>证明：<br/>在第一帧输入如下代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>loaderInfo<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>Event<span style="color:#0000ff">.</span>COMPLETE<span style="color:#0000ff">,</span>mainSwfComplete<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>function</strong></span> mainSwfComplete<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">:</span>Event<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span><br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>loaderInfo<span style="color:#0000ff">.</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span>loaderInfo<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><br/>看，现在可以访问了。不光是width和height，还有其它属性也需要这样访问。所以最好在complete或init中访问loaderInfo的属性。<br/><br/><br/>问：那么文档类的width和height究竟表示什么？<br/>答：问的好。文档类的width和height表示的是可视内容的大小。<br/>证明，在舞台上画两条线，如图：<br/><br/><br/>在帧上输入：trace<span style="color:#0000ff">(</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span><span style="color:#008000">height</span><span style="color:#0000ff">)</span>。<br/>发现大小是这两条线确定的矩形范围。<br/>附：假设改变文档对象的背景色，也是改变可视内容范围的背景色。在帧上添加代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/>opaqueBackground<span style="color:#0000ff">=</span>0xFF0000<span style="color:#0000ff">;</span><br/> <br/> <br/>问：那么改变文档类的width和height是改变了可视区域的大小吗？<br/>答：不完全是。flash以播放器原点为坐标原点采取按比例延伸方式，也可以称作放射。原理如图：<br/><br/><br/>这张图显示了采用放射方式使宽度扩展两倍。上面一个方块中的每一个像素的横坐标都由原位置延伸到2倍距离。得到的结果是宽度延伸了2倍，横坐标也成了原来的两倍。对于高度也是这样。改变宽度为原来的两倍等价于设置scaleX＝2。实际应用中由于同时改变了大小和坐标使得我们很不习惯。所以一般我们不改变文档类对象的大小。<br/><br/><br/>问：当使用了opaqueBackgoundg改变主时间轴的背景色后，能响应鼠标点击事件吗？<br/>答：不能。不但背景色不能响应点击事件，就算画一个矢量图形，导入一张位图，文档类对象也不能捕获鼠标事件。这是因为这些图形不是InteractiveObject的子类，不支持鼠标事件，不能成为事件目标，而系统也不选择文档类对象作为事件目标。使得系统直接选择舞台为事件目标。<br/>证明：画几个矢量，再载入一副位图，在帧上添加代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>addEventListener<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">,</span>clickHandle<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>stage<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">,</span>clickHandle<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>function</strong></span> clickHandle<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">:</span>MouseEvent<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span><br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">.</span>currentTarget<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><br/>dispatchEvent<span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> MouseEvent<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>点击矢量和位图，输出的只有stage而没有主时间轴。<br/><br/><br/>问：那么文档类对鼠标一点作用都不起了吗？<br/>答：否，虽然系统不选择文档类对象作为事件目标，但文档类关于鼠标交互属性还是有作用的。这个属性就是mouseChildren。使用这个属性能够禁用swf文件中的所有鼠标事件。<br/>证明：在舞台上分别放个按钮，输入文本，带超级链接的文本。在帧上输入<span style="color:#0000ff">:</span>mouseChildren<span style="color:#0000ff">=</span>false。发现按钮没了反应，文本不能输入，超级链接也没用了。<br/><br/><br/>问：我看stage也有这个属性。把stage的mouseChildren设置为false岂不可以禁止包括swf文件内的所有鼠标事件？<br/>答：确实如此。<br/><br/><br/>问：stage虽然是继承而来的，但很多成员都被禁用了。因为要禁止对播放器的修改，有些成员对播放器也无意义，那么哪些成员被Stage类保留下来了呢？哪些又是新添加的成员呢？能详细说明吗？<br/>答：<br/>保留的方法：<br/>1<span style="color:#0000ff">.</span>EventDispatcher的所有方法，用于为舞台添加特属于舞台的事件。<br/>2<span style="color:#0000ff">.</span>保留的容器方法。 <br/>addChild<br/>addChildAt<br/>removeChildAt<br/>setChildIndex<br/>swapChildrenAt<br/>getObjectUnderPoint<br/><br/>3<span style="color:#0000ff">.</span><span style="color:#0000a0"><strong>Stage</strong></span><span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>方法<span style="color:#0000ff">:</span><br/>触发显示对象的render事件用于延迟技术。<br/><br/><br/>事件：<br/>由于处于显示列表的顶级，Stage的事件都不冒泡，也没有默认调用方法。事件对象是Event。属性target值为Stage对象。<br/><br/>fullScreen<br/>类型为flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">.</span>FULL_SCREEN。进行全屏切换时触发。事件对象可使用fullScreen属性，全屏为true。<br/><br/>resize<span style="color:#0000ff">:</span><br/>类型为flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">.</span>RESIZE。<span style="color:#0000ff">.</span>当scaleMode设置为NO_SCALE时改变swf文件尺寸时调用。用于作布局。<br/><br/>mouseLeave<span style="color:#0000ff">:</span><br/>类型为flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">.</span>MOUSE_LEAVE。当鼠标离开播放器窗口时触发。<br/><br/><br/>属性：<br/>保留属性：<br/>numChildren<span style="color:#0000ff">:</span><br/>舞台中swf文件的个数。<br/><br/>mouseChildren<span style="color:#0000ff">:</span><br/>忽略所有swf文件的鼠标事件。<br/><br/><br/>下面是操作播放器的属性：<br/>focus<span style="color:#0000ff">:</span><br/>指定舞台中具有键盘焦点的对象。由于只能有一个对象具有焦点。所以由舞台来处理焦点是合适的。<br/><br/>frameRate<span style="color:#0000ff">:</span><br/>设置舞台的帧速。默认为属性面板中指定的帧速。<br/><br/>stageFocusRect<span style="color:#0000ff">:</span><br/>是否显示焦点矩形。一般用来调试。<br/><br/><span style="color:#008000">scaleMode</span><span style="color:#0000ff">:</span><br/>StageScale<span style="color:#0000ff">.</span>Mode<span style="color:#0000ff">:</span><br/>StageScaleMode<span style="color:#0000ff">.</span>NO_SCALE<br/>swf&nbsp;&nbsp;文件不随播放器窗口改变。会自动居中。<br/>StageScaleMode<span style="color:#0000ff">.</span>SHOW_ALL<br/>以缩放方式缩放swf文件，维持宽高比。<br/>StageScaleMode<span style="color:#0000ff">:</span>NO_BORDER<br/>以裁剪方式缩放swf文件，维持宽高比。<br/>StageScaleMode<span style="color:#0000ff">.</span>EXACT_FIT<br/>拉伸swf文件，改变宽高比。<br/><br/>stageWidth和stageHeight<span style="color:#0000ff">:</span><br/>舞台的宽和高。只读属性。<br/><br/>width和height<span style="color:#0000ff">:</span><br/>可视区域的宽高。 <br/><br/>displayState<span style="color:#0000ff">:</span><br/>as3现在拥有全新的全屏概念。再不是原来的缩放方式而是全新的硬件支持。速度大幅度提高。并且可以在网页上使用全屏。但全屏设置只被设计用来看电影，输入文本和键盘事件变得无效。displayStage使用StageDisplayStage<span style="color:#0000ff">.</span>NORMAL和StageDisplayState<span style="color:#0000ff">.</span>FULL_SCREEN表示全屏值。使用全屏还要求flash控件属性allowFullScreen设为true。<br/><br/><span style="color:#008000">align</span><span style="color:#0000ff">:</span><br/>使用StageAlign类的静态属性确定对齐方式：<br/>StageAlign<span style="color:#0000ff">.</span>TOP<span style="color:#0000ff">:</span> 顶对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM 底对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">LEFT</span> 左对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">RIGHT</span> 右对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_LEFT 左上对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_RIGHT 右上对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_LEFT 左下对齐。<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_RIGHT 右下对齐。<br/><br/> <br/>问：我对舞台的invalidate方法不太了解，延迟技术指什么？<br/>所谓延迟就是当需要频繁调用一段重负荷代码时，为了节约cpu资源，把这段代码推迟到下一帧执行。需要使用这段代码的不直接通过调用而是使用一个方法声明请求延迟渲染，这如同把一个公共变量设置为true，当系统发现变量的改变后就重新渲染舞台。stage的invalidate方法就是声明延迟渲染的方法。<br/><br/><br/>问：我看上面舞台保留的方法虽然没有DisplayObject的多，但对于添加对象已经足够，一般在什么情况下需要对舞台添加对象呢？<br/>答：舞台可导入多个外部swf文件在同一个播放器中播放。但更有用的是从库中创建鼠标指针，对话框等显示对象。它们被放置到最上层，且不必跟文档类搅和在一起。这使得文档类的设计跟鼠标、回话窗口分开。这些对话框等组件更容易作为公共组件框架跟其它程序迅速匹配。<br/><br/><br/>问：现在对舞台与主时间轴的概念已经很清晰了。这两个对象被系统创建。我们只能通过DisplayObject中提供的stage和root属性分别引用它们，可以随时访问是吧？<br/>答：不能随时访问，只有添加到显示列表中的对象才能引用它们。因为它们作为顶级显示容器，如果在显示列表外也可以访问，那被删除的显示对象在后台依然可以影响前台显示，这样会导致混乱。<br/><br/><br/>问：主时间轴和stage也有这两个属性，它们指什么？<br/>答：主时间轴的root指主时间轴，主时间轴的stage指舞台，舞台的root和stage都指舞台。<br/><br/><br/>问：还有什么限制吗？<br/>访问舞台还与安全模型有关。不受信任的域是无法访问舞台的，因为它们获取了舞台后可以利用扫描方式盗取用户信息。<br/><br/>问：原来访问舞台有这么多限制啊，那访问主时间轴应该没有什么限制吧？<br/>答：没有。MovieClip的成员都可以使用。你甚至可以把buttonMode设置成true。让整个主时间轴成为一个大按钮。<br/><br/><br/>问：那我也可以使用滤镜渲染整个swf文件了吧，使用flash不能这样呢。<br/>答：确实。但不要滥用，使用滤镜渲染主时间轴会作用于所有显示对象，也会渲染所有帧。这会消耗很多cpu资源。<br/>证明：在舞台上绘制各种图形，文字，图片。在第一帧输入如下代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/><span style="color:#800000"><strong>var</strong></span> dro&#112;ShadowropShadowFilter <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> Dro&#112;ShadowFilter<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>var</strong></span> filtersArray<span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Array</strong></span> <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> <span style="color:#0000a0"><strong>Array</strong></span><span style="color:#0000ff">(</span>dro&#112;Shadow<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span>filters <span style="color:#0000ff">=</span> filtersArray<span style="color:#0000ff">;</span><br/>可以看到所有对象都被添加了阴影。[/color]]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=6</link>
			<title><![CDATA[textField的图文混排(1)]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Fri,09 Jan 2009 16:50:37 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=6</guid>
		<description><![CDATA[一直以来FLASH的图文混排都是讨论的焦点，AS3的诞生给图文混排带来了最大的控制空间，它能够做到精确的控制文本了，但是对图文混排还是有点弱，特别是HTML文本，功能差好多。<br/><br/>这一问题直到flash10只才得到提升，Flash CS4 的最新text API有相关的功能,可以使用更高级的文本控制功能，CS4 做这个东西已不是难题。<br/><br/><br/>我转一个 &#34;圆号手&#34; 朋友做的图文混排思路 用CS3做的<br/><br/><img src="http://www.eoocy.com/example/tempImages/图1.jpg" border="0" alt=""/><br/><br/>var arr:Array=[];//存表情替换符的位置<br/>var face:Array=[];//存表情编号<br/>var pos:Array=[];//存表情应该显示的位置<br/>while(1)<br/>{<br/>&#160;&#160;&#160;&#160;arr.push(str.search(/#[0-9][0-9]/));<br/>&#160;&#160;&#160;&#160;if(arr[arr.length-1]!=-1)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;face.push(str.substr(arr[arr.length-1]+1,2));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pos.push(txt.getCharBoundaries (arr[arr.length-1]));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str=str.replace(/#[0-9][0-9]/,&#34;&nbsp;&nbsp;&nbsp;&nbsp; &#34;);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;txt.htmlText=string.replace(/#[0-9][0-9]/g,&#34;&nbsp;&nbsp;&nbsp;&nbsp; &#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;arr.pop();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;<br/>&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>}<br/><br/><br/>用的时候 ：var string=&#34;我日你个#01TextField我<br/><br/>用htmlText两个麻烦一个是图片不能放中间，一个是把gif当成静态显示<br/><br/>直接做了一个跟textField一样大的容器，专门addChild表情<br/><br/>他是用两层做的，也就是文字和图片分开的，分别控制坐标，个人觉得不是很好，为样很麻烦，不好控制<br/>最麻烦的就是滚动后的定位，还有其它问题很多。<br/><br/>过几天我想试着做一个，再来更新这个帖，先在这留个脚印!]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=5</link>
			<title><![CDATA[一个FLASH ToolTip 用起来很方便]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Wed,07 Jan 2009 15:05:20 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=5</guid>
		<description><![CDATA[一直觉得ToolTip很烦人，功能不大，还得现写，还要注意自动控制宽高，很浪费时间。<br/>所以自已写了一个比较全面的ToolTip，以备应急时用。<br/>自动适应字数宽度，有多少字放多少字，只要你原意<br/>可以指定是否显示中间的小尖头，<br/>是否相对鼠标居中显示，<br/>也可以自定义设置相对mouse的X 和 Y距离<br/>CSS外部定义字体样式<br/>可在不删除的情况下更新文字<br/>源码放出来，共享。<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.eoocy.com/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp35938_href" href="http://www.eoocy.com/javascript:MediaShow('swf','temp35938','example/toolTip/explain.swf','400','300')"><img name="temp35938_img" src="http://www.eoocy.com/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp35938_text">在线播放</span></a><div id="temp35938"></div></div></div><br/><br/><br/><img src="http://www.eoocy.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.eoocy.com/attachments/month_0901/i200917225940.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=3</link>
			<title><![CDATA[AS3 库资源 很多非常有用的类库]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Sun,04 Jan 2009 00:56:08 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=3</guid>
		<description><![CDATA[下面是非常有用的类库，找到他们的时候我兴奋的不得了<br/>APIs、Libs、Components<br/><br/><br/>1、as3ebaylib<br/><a href="http://code.google.com/p/as3ebaylib/" target="_blank" rel="external">http://code.google.com/p/as3ebaylib/</a><br/><br/>2、as3youtubelib<br/><a href="http://code.google.com/p/as3youtubelib/" target="_blank" rel="external">http://code.google.com/p/as3youtubelib/</a><br/><br/>3、as3flickrlib<br/><a href="http://code.google.com/p/as3flickrlib/" target="_blank" rel="external">http://code.google.com/p/as3flickrlib/</a><br/><br/>4、Yahoo ASTRA Flash Components<br/><a href="http://developer.yahoo.com/flash/astra-flash/" target="_blank" rel="external">http://developer.yahoo.com/flash/astra-flash/</a><br/><br/>5、facebook-as3<br/><a href="http://code.google.com/p/facebook-as3/" target="_blank" rel="external">http://code.google.com/p/facebook-as3/</a><br/><br/>6、as3awss3lib<br/><a href="http://code.google.com/p/as3awss3lib/" target="_blank" rel="external">http://code.google.com/p/as3awss3lib/</a><br/><br/>7、Adobe ActionScript 3:resources:apis:libraries （官方，包括corelib、FlexUnit、Flickr、Mappr、RSS and Atom libraries、Odeo、YouTube）<br/><a href="http://labs.adobe.com/wiki/index.php/ActionScri&#112;t_3:resources:apis:libraries" target="_blank" rel="external">http://labs.adobe.com/wiki/index.php/ActionScri&#112;t_3:resources:apis:libraries</a><br/><br/>8、Tweener&nbsp;&nbsp; 用于过渡与切换的一组动画库<br/><a href="http://code.google.com/p/tweener/" target="_blank" rel="external">http://code.google.com/p/tweener/</a><br/><br/>9、uicomponents-as3&nbsp;&nbsp;&nbsp;&nbsp;一组轻量级的AS3 UI组件库<br/><a href="http://code.google.com/p/uicomponents-as3/" target="_blank" rel="external">http://code.google.com/p/uicomponents-as3/</a><br/><br/>10、as3ds&nbsp;&nbsp;&nbsp;&nbsp;AS3的数据结构实现<br/><a href="http://code.google.com/p/as3ds/" target="_blank" rel="external">http://code.google.com/p/as3ds/</a><br/><br/> <br/><br/>11、mecheye-as3-libraries&nbsp;&nbsp;&nbsp;&nbsp;一组主要用于Flash 游戏开发的AS3库<br/><a href="http://code.google.com/p/mecheye-as3-libraries/" target="_blank" rel="external">http://code.google.com/p/mecheye-as3-libraries/</a><br/><br/><br/><br/>12、XIFF&nbsp;&nbsp; 一套XMPP协议的AS3实现<br/><a href="http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/" target="_blank" rel="external">http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/</a><br/><br/>13、FZip&nbsp;&nbsp; 一套AS3库，可用作对ZIP压缩文件的载入、修改与创建<br/><a href="http://codeazur.com.br/lab/fzip/" target="_blank" rel="external">http://codeazur.com.br/lab/fzip/</a><br/><br/>14、FlexLib&nbsp;&nbsp; 一套开源的Flex界面组件库<br/><a href="http://code.google.com/p/flexlib/" target="_blank" rel="external">http://code.google.com/p/flexlib/</a><br/><br/>15、AnimatedGIfLoader Flex Component&nbsp;&nbsp;&nbsp;&nbsp; 可载入GIF的Flex组件<br/><a href="http://dougmccune.com/blog/animatedgifloader-flex-component/" target="_blank" rel="external">http://dougmccune.com/blog/animatedgifloader-flex-component/</a><br/><br/>16、goplayground&nbsp;&nbsp;&nbsp;&nbsp;一套轻量级的，可用创建属于你自己的AS3 动画工具的库<br/><a href="http://code.google.com/p/goplayground/" target="_blank" rel="external">http://code.google.com/p/goplayground/</a><br/><br/>17、AlivePDF&nbsp;&nbsp; 开源的用于PDF创建的AS3库<br/><a href="http://www.alivepdf.org/" target="_blank" rel="external">http://www.alivepdf.org/</a><br/><br/>18、jwopitz-lib&nbsp;&nbsp; 一组开源的Flex用户界面组件<br/><a href="http://code.google.com/p/jwopitz-lib/" target="_blank" rel="external">http://code.google.com/p/jwopitz-lib/</a><br/><br/>19、as3crypto&nbsp;&nbsp; AS3实现的一套加密库，包括多种加密算法<br/><a href="http://code.google.com/p/as3crypto/" target="_blank" rel="external">http://code.google.com/p/as3crypto/</a><br/><br/>20、flare&nbsp;&nbsp;&nbsp;&nbsp;一套强大的可视化交互的AS3类库<br/><a href="http://flare.prefuse.org/" target="_blank" rel="external">http://flare.prefuse.org/</a><br/><br/>21、SWFAddress&nbsp;&nbsp;&nbsp;&nbsp;一小而强大的库，可以为Flash和Ajax提供深链接的功能<br/><a href="http://www.asual.com/swfaddress/" target="_blank" rel="external">http://www.asual.com/swfaddress/</a><br/><br/>22、SWFObject&nbsp;&nbsp;&nbsp;&nbsp;用于嵌入Flash，Adobe官方也认可了<br/><a href="http://code.google.com/p/swfobj&#101;ct/" target="_blank" rel="external">http://code.google.com/p/swfobj&#101;ct/</a><br/><br/>23、ulse Particle System 一套开源的强大的AS3动态粒子系统<br/><a href="http://code.google.com/p/pulse-particle/" target="_blank" rel="external">http://code.google.com/p/pulse-particle/</a><br/><a href="http://www.rogue-development.com/pulseParticles.html" target="_blank" rel="external">http://www.rogue-development.com/pulseParticles.html</a><br/><br/>24、SpringGraph Flex Component<br/><a href="http://mark-shepherd.com/blog/springgraph-flex-component/" target="_blank" rel="external">http://mark-shepherd.com/blog/springgraph-flex-component/</a><br/><br/>25、GoASAP&nbsp;&nbsp;&nbsp;&nbsp;AS3动画库<br/><a href="http://code.google.com/p/goasap/" target="_blank" rel="external">http://code.google.com/p/goasap/</a><br/><a href="http://www.goasap.org/index.html" target="_blank" rel="external">http://www.goasap.org/index.html</a><br/><br/>26、asaplibrary&nbsp;&nbsp; 一套开源的Flash Actionscript3.0 RIA库<br/><a href="http://code.google.com/p/asaplibrary/" target="_blank" rel="external">http://code.google.com/p/asaplibrary/</a><br/><a href="http://asaplibrary.org/" target="_blank" rel="external">http://asaplibrary.org/</a><br/><a href="http://asapframework.org" target="_blank" rel="external">http://asapframework.org</a><br/><br/>27、as3mathlib 开源Flex/Actionscript数学库<br/><a href="http://code.google.com/p/as3mathlib/" target="_blank" rel="external">http://code.google.com/p/as3mathlib/</a><br/><br/>28、as3corelib 包含一些基础功能AS3库<br/><a href="http://code.google.com/p/as3corelib/" target="_blank" rel="external">http://code.google.com/p/as3corelib/</a><br/><br/>29、minimalcomps 一组AS3 UI组件<br/><a href="http://www.bit-101.com/minimalcomps/" target="_blank" rel="external">http://www.bit-101.com/minimalcomps/</a><br/><br/>30、as3gif<br/><a href="http://code.google.com/p/as3gif/" target="_blank" rel="external">http://code.google.com/p/as3gif/</a><br/><br/>31、queueloader-as3&nbsp;&nbsp;&nbsp;&nbsp; 一组AS3库，用来进行资源序列载入及监测<br/><a href="http://code.google.com/p/queueloader-as3/" target="_blank" rel="external">http://code.google.com/p/queueloader-as3/</a><br/><br/>32、TweenMax (AS3)<br/><a href="http://blog.greensock.com/tweenmaxas3/" target="_blank" rel="external">http://blog.greensock.com/tweenmaxas3/</a><br/><br/>33、Atellis Reflection Component&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一款Flex反射效果组件<br/><a href="http://labs.atellis.com/2007/07/11/atellis-reflection-component/" target="_blank" rel="external">http://labs.atellis.com/2007/07/11/atellis-reflection-component/</a><br/><br/>34、AS3Eval&nbsp;&nbsp;&nbsp;&nbsp;简单来说，就是用AS3实现的AS3编译器<br/><a href="http://eval.hurlant.com/" target="_blank" rel="external">http://eval.hurlant.com/</a><br/><br/>35、ByteArray的组件、库合集，包括liquid components、mousegesture、ASZip、GIF Player、GIF Animation Encoder、AlivePDF、Live JPEG Encoder、ScaleBitmap等<br/><a href="http://www.bytearray.org/?page_id=82" target="_blank" rel="external">http://www.bytearray.org/?page_id=82</a><br/><br/>36、AS3C&nbsp;&nbsp;&nbsp;&nbsp;针对AVM2虚拟机，用C#写的字节码编译器<br/><a href="http://code.google.com/p/as3c/" target="_blank" rel="external">http://code.google.com/p/as3c/</a><br/><br/>37、as3httpclientlib&nbsp;&nbsp; as3实现的http客户端<br/><a href="http://code.google.com/p/as3httpclientlib/" target="_blank" rel="external">http://code.google.com/p/as3httpclientlib/</a><br/><br/>38、as3ui&nbsp;&nbsp;一组常规的as3　ui界面库<br/><a href="http://code.google.com/p/as3ui/" target="_blank" rel="external">http://code.google.com/p/as3ui/</a><br/><br/>39、as3xls　让你在flex中可以读写Excel文件<br/><a href="http://code.google.com/p/as3xls/" target="_blank" rel="external">http://code.google.com/p/as3xls/</a><br/><br/>40、as3flexdb 让你的flex程序可以连接到MySQL服务器，主要是使用AMFPHP来访问PHP服务器<br/><a href="http://code.google.com/p/as3flexdb/" target="_blank" rel="external">http://code.google.com/p/as3flexdb/</a><br/>这一是一篇详细使用介绍的教程<br/><a href="http://itutorials.ro/viewtopic.php?f=9" target="_blank" rel="external">http://itutorials.ro/viewtopic.php?f=9</a>&amp;t=7<br/><br/>41、vivisectingmedia-as3 　一组AS3/Flex实用库，是作者在实践中总结出来的<br/><a href="http://code.google.com/p/vivisectingmedia-as3/" target="_blank" rel="external">http://code.google.com/p/vivisectingmedia-as3/</a><br/><br/><span style="font-size:14pt"><strong>Actionscript 3.0 Class</strong></span><br/><br/>1、fZip&nbsp;&nbsp; 此类可允许你载入标准的zip文件并提取里面包含的文件<br/><a href="http://wahlers.com.br/claus/blog/zip-it-up/" target="_blank" rel="external">http://wahlers.com.br/claus/blog/zip-it-up/</a><br/><br/>2、AS3: Layout class for Flash CS3&nbsp;&nbsp;&nbsp;&nbsp;一组用作布局的类<br/><a href="http://www.senocular.com/?id=2.8" target="_blank" rel="external">http://www.senocular.com/?id=2.8</a><br/><br/>3、CSSLoader&nbsp;&nbsp;&nbsp;&nbsp;该类允许Flex应用程序在运行时载入CSS<br/><a href="http://www.rubenswieringa.com/blog/cssloader" target="_blank" rel="external">http://www.rubenswieringa.com/blog/cssloader</a><br/><br/>4、AS3: QueryString&nbsp;&nbsp;&nbsp;&nbsp; 一个单例类，用来获取URL地址后所带参数值对<br/><a href="http://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/" target="_blank" rel="external">http://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/</a>#more-141<br/><br/>5、ActionScript 3 Contextual Menu Manager Class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AS3关联菜单管理类<br/><a href="http://www.blog.noponies.com/archives/103" target="_blank" rel="external">http://www.blog.noponies.com/archives/103</a><br/><br/><br/><span style="font-size:14pt"><strong>2D &amp; 3D Engine</strong></span><br/><br/>1、APE (Actionscript Physics Engine)&nbsp;&nbsp;物理引擎<br/>APE前身是as2版本的Flade，呼声很高，优点就是清晰简单，一共没有几个类：），目前版本alpha 0.45 ，有API文档和示例，教程有一篇quick start ，在Google Group上有一个论坛可以讨论。svn上一直在更新目前svn上的版本为0.5a<br/><br/><a href="http://www.cove.org/ape/" target="_blank" rel="external">http://www.cove.org/ape/</a><br/><br/>2、Away3D<br/><a href="http://code.google.com/p/away3d/" target="_blank" rel="external">http://code.google.com/p/away3d/</a><br/><br/>3、Papervision3D<br/><a href="http://code.google.com/p/papervision3d/" target="_blank" rel="external">http://code.google.com/p/papervision3d/</a><br/><br/>4、Sandy&nbsp;&nbsp;&nbsp;&nbsp;开源3D库<br/><a href="http://www.flashsandy.org/versions/3.0" target="_blank" rel="external">http://www.flashsandy.org/versions/3.0</a><br/><br/>5、FORM&nbsp;&nbsp;一套AS3完成的用于2D刚性物体的物理引擎<br/><a href="http://code.google.com/p/foam-as3/" target="_blank" rel="external">http://code.google.com/p/foam-as3/</a><br/><br/><br/>6、Five3D&nbsp;&nbsp; 基于矢量的Flash 3D 交互动画创建<br/><a href="http://five3d.mathieu-badimon.com/" target="_blank" rel="external">http://five3d.mathieu-badimon.com/</a><br/><br/>7、Flade (Flash Dynamics Engine)&nbsp;&nbsp; 一套开源的2D物理引擎，AS2实现<br/><a href="http://www.cove.org/flade/" target="_blank" rel="external">http://www.cove.org/flade/</a><br/><br/>8、Box2DFlashAS3&nbsp;&nbsp;&nbsp;&nbsp; 2D物理引擎，AS3实现，基于强大的Box2D C++物理库<br/><a href="http://box2dflash.sourceforge.net/" target="_blank" rel="external">http://box2dflash.sourceforge.net/</a><br/><br/>9、Paradox&nbsp;&nbsp; 基于Flash的第一称3D引擎<br/><a href="http://animasinteractive.com/propaganda/" target="_blank" rel="external">http://animasinteractive.com/propaganda/</a><br/><br/>10、ND3D AS3 3D Engine 　一款简单的AS3开源3D引擎，编译后的引擎大小仅约10K<br/><a href="http://code.google.com/p/nd3d/" target="_blank" rel="external">http://code.google.com/p/nd3d/</a><br/><a href="http://www.nulldesign.de/nd3d-as3-3d-engine/" target="_blank" rel="external">http://www.nulldesign.de/nd3d-as3-3d-engine/</a><br/><br/>11、motor2&nbsp;&nbsp;基于Box2d的AS3刚体引擎,也是2D的. <br/>作者就是 AS3数据结构的作者，2007年最后一天发布<br/>作者主页：<a href="http://lab.polygonal.de/motor_physics/" target="_blank" rel="external">http://lab.polygonal.de/motor_physics/</a><br/>代码：<a href="http://code.google.com/p/motor2/" target="_blank" rel="external">http://code.google.com/p/motor2/</a><br/><br/>12、WOW-Engine&nbsp;&nbsp;法国人写的，基于Sandy library的算法 3D物理引擎<br/><a href="http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/" target="_blank" rel="external">http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/</a><br/><br/><br/><br/><br/><span style="font-size:14pt"><strong>FrameWorks</strong></span><br/><br/>1、Cairngorm&nbsp;&nbsp; Adobe官方出的Flex框架<br/><a href="http://labs.adobe.com/wiki/index.php/Cairngorm" target="_blank" rel="external">http://labs.adobe.com/wiki/index.php/Cairngorm</a><br/><br/>2、PureMVC&nbsp;&nbsp; 纯AS3框架，也有其它语言的实现<br/><a href="http://www.puremvc.org/" target="_blank" rel="external">http://www.puremvc.org/</a><br/><br/>3、ASWing AS3&nbsp;&nbsp;一套开源的AS3 GUI框架<br/><a href="http://www.aswing.org/" target="_blank" rel="external">http://www.aswing.org/</a><br/><br/>4、EasyMVC&nbsp;&nbsp;由事件驱动的MVC框架<br/><a href="http://projects.simb.net/easyMVC/" target="_blank" rel="external">http://projects.simb.net/easyMVC/</a><br/><br/>5、Mate 基于Tag及事件驱动的Flex框架<br/><a href="http://mate.asfusion.com/" target="_blank" rel="external">http://mate.asfusion.com/</a><br/><br/>6、ARP&nbsp;&nbsp;&nbsp;&nbsp;基于模式（Pattern）的RIA框架，Flash平台，支持AS2和AS3<br/><a href="http://osflash.org/projects/arp" target="_blank" rel="external">http://osflash.org/projects/arp</a><br/><br/>7、Gaia&nbsp;&nbsp;开源的Flash前端框架，支持AS2和AS3，用于快速开发<br/><a href="http://www.gaiaflashframework.com/" target="_blank" rel="external">http://www.gaiaflashframework.com/</a><br/><br/>8、flest&nbsp;&nbsp;Actionscript3.0/Flex应用程序框架，用来开发企业级的RIA<br/><a href="http://code.google.com/p/flest/" target="_blank" rel="external">http://code.google.com/p/flest/</a><br/><br/>9、Gugga&nbsp;&nbsp;&nbsp;&nbsp; Flash Framework&nbsp;&nbsp;&nbsp;&nbsp;更新至AS3<br/><a href="http://www.gugga.com/flashblog/" target="_blank" rel="external">http://www.gugga.com/flashblog/</a><br/><br/>10、Prana 另一个提供了IOC反转控制的框架，类似著名的Spring框架<br/><a href="http://www.pranaframework.org/" target="_blank" rel="external">http://www.pranaframework.org/</a><br/><br/>11、OpenFlux&nbsp;&nbsp; 开源的Flex组件框架，让开发Flex组件更加快速容易<br/><a href="http://code.google.com/p/openflux/" target="_blank" rel="external">http://code.google.com/p/openflux/</a><br/><br/>12、Degrafa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;声明式的Flex图形框架，允许以MXML标签的方式绘制图形、创建皮肤，还包括对CSS的支持<br/><a href="http://code.google.com/p/degrafa/" target="_blank" rel="external">http://code.google.com/p/degrafa/</a><br/><br/>13、FlexMVCs&nbsp;&nbsp; 针对AS3和Flex的应用程序框架，基于PureMVC，作了些修正和精简<br/><a href="http://code.google.com/p/flexmvcs/" target="_blank" rel="external">http://code.google.com/p/flexmvcs/</a><br/><br/><span style="font-size:14pt"><strong>Flash &amp; Flex Tools、Servers</strong></span><br/><br/>1、FlexUnit&nbsp;&nbsp;&nbsp;&nbsp; Flex/Actionscript3.0单元测试框架<br/><a href="http://code.google.com/p/as3flexunitlib/" target="_blank" rel="external">http://code.google.com/p/as3flexunitlib/</a><br/><br/>2、Visual FlexUnit 增强的FlexUnit，支持“可视化断言”<br/><a href="http://code.google.com/p/visualflexunit/" target="_blank" rel="external">http://code.google.com/p/visualflexunit/</a><br/><br/>3、RED bug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug调试控制器，让Flash、Flex、AIR应用程序更加容易<br/><a href="http://www.realeyesmedia.com/redbug/" target="_blank" rel="external">http://www.realeyesmedia.com/redbug/</a><br/><br/>4、reflexutil 可在运行时对Flex组件进行调试<br/><a href="http://code.google.com/p/reflexutil/" target="_blank" rel="external">http://code.google.com/p/reflexutil/</a><br/><br/>5、FxSpy&nbsp;&nbsp; 当Flex应用程序运行时可以检测和动态的改变可视化组件属性值<br/><a href="http://code.google.com/p/fxspy/" target="_blank" rel="external">http://code.google.com/p/fxspy/</a><br/><br/>6、ThunderBolt 基于Firefox的Firebug插件的日志扩展，支持AS2及AS3<br/><a href="http://code.google.com/p/flash-thunderbolt/" target="_blank" rel="external">http://code.google.com/p/flash-thunderbolt/</a><br/><br/>7、FlashTracer Firefox扩展，可以以侧栏的方式将Flash中trace()的结果显示<br/><br/>8、RIALogger　另一款Flex/AIR的Debug工具<br/><a href="http://renaun.com/blog/flex-components/rialogger/" target="_blank" rel="external">http://renaun.com/blog/flex-components/rialogger/</a><br/><br/>9、Alcon 一款轻量级的AS2及AS3的Debug工具，AIR方式将Debug信息展示出来<br/><a href="http://blog.hexagonstar.com/alcon/" target="_blank" rel="external">http://blog.hexagonstar.com/alcon/</a><br/><br/>10、GDS (Granite Data Services) 开源，提供了Adobe LiveCycle Data Services类似功能的服务器<br/><a href="http://www.graniteds.org/" target="_blank" rel="external">http://www.graniteds.org/</a><br/><br/><span style="font-size:14pt"><strong>Flex Explorers&nbsp;&nbsp;（大部分为Flex2版本，但同样适用于Flex3）</strong></span><br/><br/>1、Flex3 Component Explorer&nbsp;&nbsp; Flex各类组件示例<br/><a href="http://examples.adobe.com/flex3/componentexplorer/explorer.html" target="_blank" rel="external">http://examples.adobe.com/flex3/componentexplorer/explorer.html</a><br/><br/>2、Resize ManagerFX Explorer （此为商业作品，要收费的）<br/><a href="http://www.teotigraphix.com/explorers/ResizeManagerFX/ResizeManagerFXExplorer.html" target="_blank" rel="external">http://www.teotigraphix.com/explorers/ResizeManagerFX/ResizeManagerFXExplorer.html</a><br/><br/>3、Flex3 Style Explorer<br/><a href="http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html" target="_blank" rel="external">http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html</a><br/><br/>4、Flex2 Style Explorer（添加了Kuler功能）Flex UI组件风格定制并可输出为CSS<br/><a href="http://www.maclema.com/content/sek/" target="_blank" rel="external">http://www.maclema.com/content/sek/</a><br/><br/>5、Flex2 Style Explorer（Adobe 原始的版本）<br/><a href="http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html" target="_blank" rel="external">http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html</a><br/><br/>6、Flex2 Filter Explorer&nbsp;&nbsp; 查看各类滤镜效果并可进行设置<br/><a href="http://merhl.com/flex2_samples/filterExplorer/" target="_blank" rel="external">http://merhl.com/flex2_samples/filterExplorer/</a><br/><a href="http://merhl.com/?p=40" target="_blank" rel="external">http://merhl.com/?p=40</a>&nbsp;&nbsp; (AIR版本)<br/><br/>7、Flex2 Primitive Explorer&nbsp;&nbsp; 在Flex中创建各种简单形状<br/><br/><a href="http://www.flexibleexperiments.com/Flex/PrimitiveExplorer/Flex2PrimitiveExplorer.html" target="_blank" rel="external">http://www.flexibleexperiments.com/Flex/PrimitiveExplorer/Flex2PrimitiveExplorer.html</a> <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=1</link>
			<title><![CDATA[TweenLite 和 TweenMax 参数说明]]></title>
			<author>lihelihe@126.com(admin)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Fri,19 Dec 2008 16:31:41 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=1</guid>
		<description><![CDATA[<strong><span style="font-size:16pt">TweenLite参数说明:</span></strong><br/><br/>1) $target : Object - 作为目标的对象， MovieClip或者其它对象<br/>2) $duration : Number - 动画的时间长度（单位：秒）<br/>3) $vars : Object – 对象，通过属性值，来存贮各种属性参数用于缓动。（如果你使用 TweenLite.from() 方法，这里的参数表示缓动的初始值）<br/>该对象所具有的属性：<br/>alpha: alpha 目标对象应该完成 (或开始，当使用 TweenLite.from()时)的透明度级别.如果 target.alpha 是1，当缓动被执行的时候，你指定参数为 0.5，它将把透明度从 1 缓动到 0.5.<br/>x: 改变 MovieClip的 x 位置,把这个值设置成你希望的 MovieClip 的结束位置(如果你使用的是 TweenLite.from()这个值表示开始位置).<br/>　　　　　　　　　　　( y scaleX scaleY rotation　等属性不再重复说明）<br/>特别的属性 (**可选的**):<br/>delay : Number - 延迟缓动 (以秒为单位).<br/>ease : Function - 缓动函数. 例如，fl.motion.easing.Elastic.easeOut 函数。默认的是 Regular.easeOut函数。<br/>easeParams : Array - 用来存贮缓动公式所需要的额外数据. 当使用 Elastic 公式并且希望控制一些额外的参数，比如放大系数和缓动时间。大多数的缓动公式是不需要参数的，因此，你不需要给其它的缓动公式传递参数。<br/>autoAlpha : Number - 用它来代替 alpha 属性，可以获得一些副加的效果，比如当 alpha 值缓动到 0时，自动将 visible 属性改为 false。当缓动开始前，autoAlpha 大于 0时，它将会把 visible 属性变成 true 。<br/>visible : Boolean - 在缓动结束时，想要指定 DisplayObject 的 visible 属性，请使用这个参数。<br/>volume : Number - 对 soundTransform （MovieClip/SoundChannel/NetStream 等）对象中的volume属性（音量大小）进行缓动<br/>tint : Number - 改变 DisplayObject 的颜色，设置一个16进制颜色值之后，当缓动结束时，目标对象将被变成这个颜色，（如果使用的是TweenLite.from()，这个值将表示目标对象开始缓动时的颜色)。举个例子，颜色值可以设定为： 0xFF0000。<br/>removeTint : Boolean - 要移除 DisplayObject 颜色，将这个参数设成 true 。<br/>frame : Number - 将 MovieClip 缓动到指帧频。<br/>onStart : Function - 在缓动开始时想要执行某个函数，就将函数的引用（通常是函数名）放到这里。如果缓动是带延迟的，那么在缓动开始前该函数不会被执行。<br/>onStartParams : Array - 为缓动开始时要执行的函数传递参数。(可选的)<br/>onUp&#100;ate : Function - 缓动过程中，每次更新时调用这里指定的函数(缓动开始后，每一帧被触发一次),<br/>onUp&#100;ateParams : Array - 给 onUp&#100;ate 参数指定的函数传递参数 (可选的)<br/>onComplete : Function - 缓动结束时执行的函数。<br/>onCompleteParams : Array - 给 onComplete 参数指定的函数传递参数 (可选的)<br/>persist : Boolean - 值为 true 时，TweenLite 实例将不会自动被系统的垃圾收集器给收走。但是当新的缓动出现时，它还是会被重写（overwritten）默认值为 false.<br/>renderOnStart : Boolean - 如果你使用带有延迟缓动的 TweenFilterLite.from() ，并且阻止缓动的渲染（rendering ）效果，直到缓动真正开始，将这个值设为 true.默认情况下该值为 false ，这会让渲染效果立即被执行，甚至是在延迟的时间还没到之前。<br/>overwrite : int - 当前的缓动被创建以后，通过这个参数可以限制作用于同一个对象的其它缓动，可选的参数值有：<br/>- 0 (没有): 没有缓动被重写。这种模式下，运行速度是最快的，但是需要注意避免创建一些控制相同属性的缓动，否则这些缓动效果间将出现冲突。<br/>- 1 (全部): (这是默认值，除非 OverwriteManager.init() 被调用过)对于同一对象的所有缓动在创建时将会被完全的覆盖掉。<br/>TweenLite.to(mc, 1, {x:100, y:200});<br/>TweenLite.to(mc, 1, {x:300, delay:2}); //后创建的缓动将会覆盖掉先前创建的缓动，（可以起到这样的作用：缓动进行到一半时被中断，执行新的缓动 译者注）<br/>- 2 (自动): (当 OverwriteManager.init() 被执行后,会根据具体的属性值进行选择)只覆盖对同一属性的缓动。<br/>TweenLite.to(mc, 1, {x:100, y:200});<br/>TweenLite.to(mc, 1, {x:300}); //only “x” 属性的缓动将被覆盖<br/>- 3 (同时发生): 缓动开始时，覆盖全部的缓动。<br/>TweenLite.to(mc, 1, {x:100, y:200});<br/>TweenLite.to(mc, 1, {x:300, delay:2}); //不会覆盖先前的缓动，因为每二个缓动开始时，第一个缓动已经结束了。<br/><br/>举例:<br/>将实例名为 “clip_mc” 的 MovieClip 透明度降到 50% (0.5) ，并将它 x 轴位置移动到 120 ，将音量将到 0，缓动总共用时 1.5 秒，代码如下：<br/>import gs.TweenLite;<br/>TweenLite.to(clip_mc, 1.5, {alpha:0.5, x:120, volume:0});<br/><br/>如果希望使用更高级的缓动函数在 5 内，将 alpha 变到 0.5，将 x 移动 到 120 ，使用 “easeOutBack” 弹性函数，缓动整体延迟 2 秒发生，并且在缓动结束时，执行 “onFinishTween” 函数，并且为这个函数传递几个参数，(一个数值 5 以及对 clip_mc 的引用)，代码如下：<br/>import gs.TweenLite;<br/>import fl.motion.easing.Back;<br/>TweenLite.to(clip_mc, 5, {alpha:0.5, x:120, ease:Back.easeOut, delay:2, onComplete: onFinishTween, onCompleteParams:[5, clip_mc]});<br/>function onFinishTween(argument1:Number, argument2:MovieClip):void {<br/>trace(”The tween has finished! argument1 = ” + argument1 + “, and argument2 = ” + argument2);<br/>}<br/><br/>如果你的舞台上的 MovieClip 已经停在了它的结束位置，你只想让它花上5秒种回到这个位置，(只需要改变 y 属性，比当前位置高 100 像素的位置，让它从那里下落), 代码如下（这次使用的是 TweenLite.from 译者注):<br/>import gs.TweenLite;<br/>import fl.motion.easing.Elastic;<br/>TweenLite.from(clip_mc, 5, {y:”-100″, ease:Elastic.easeOut});<br/>说明:<br/>- TweenLite类会让你的 Flash 文件增加 3kb大小。<br/>- 给参数值加上引号，表示对指定的属性进行相应操作。比如，使用 TweenLite.to(mc, 2, {x:”-20″}); 它将 mc.x 向左移动 20 像素，与此相同效果的代码是：TweenLite.to(mc, 2, {x:mc.x - 20});<br/>- 你可以用别的缓动函数替换 TweenLite 默认的缓动函数: Regular.easeOut.<br/>- 必须使用 Flash Player 9 或之后版本的播放器 (ActionScript 3.0)<br/>- 可以对任何 MovieClip 使用 “volume” 缓动,就比如：TweenLite.to(myClip_mc, 1.5, {volume:0});<br/>- 可以将 MovieClip 设定成某种颜色，使用 “tint” 参数,比如: TweenLite.to(myClip_mc, 1.5, {tint:0xFF0000});<br/>- 想要对数组内容进行缓动，将数值放到一个叫 endArray 的数组中即可，例如:<br/>var myArray:Array = [1,2,3,4];<br/>TweenLite.to(myArray, 1.5, {endArray:[10,20,30,40]});<br/>- 可以在任何时候终止缓动，使用 TweenLite.killTweensOf(myClip_mc); 函数。如果想强制终止缓动，可以传递一个 true 做为第二个参数，比如<br/>TweenLite.killTweensOf(myClip_mc, true);<br/>- 取掉延迟回调函数，用 TweenLite.killDelayedCallsTo(myFunction_func);这项功能可以用来控制回调函数的优先级。<br/>- 使用 TweenLite.from() 方法，可以使用对象从别的位置回到当前的位置。例如，你可以将对象在舞台上摆放整齐（缓动结束时的位置），然后利用<br/>缓动，让它们跑到那个位置上去，你可以将缓动的初始位置值 x 或 y 或 alpha (或者其它你需要的属性)当做参数传递给这个方法函数。<br/><br/>TweenLite 下载链接：<br/><a href="http://www.greensock.com/ActionS" target="_blank" rel="external"><a href="http://www.greensock.com/ActionS" target="_blank" rel="external">http://www.greensock.com/ActionS</a></a> … S3/TweenLiteAS3.zip<br/>下载下来的类包中，有一个 TweenLiteAS3_Sample_1.swf ，初学者可以用它来观察各种缓动的效果，并且直接得到相关的执行代码。算是一个可视化设计的工具，不要错过。<br/>下载到类包以后，解压缩到一个目录比如：d:\AS3Class ，在flash9 的首选参数－&gt;ActionScript-&gt;ActionScript3.0设置中添加类目录，d:\AS3Class\TweenLiteAS3 即可正确引用到相关的类。<br/><br/>应用举例：<br/>import gs.TweenLite;<br/>import gs.easing.*;<br/><br/>stage.addEventListener(MouseEvent.CLICK, onCK);<br/>function onCK(evt) {<br/>TweenLite.to(mc, 0.5, {x:mouseX, y:mouseY, rotation:360});<br/>}<br/>在舞台上点击，会让mc 元件旋转并跑动到鼠标位置。<br/><br/><br/><br/>描述2:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;缓动。 我们都在做。我们很多人都知道除了 Adobe&#39;s Tween 类之外，还有很多更好的动画引擎，（比如 Tweener）. 每种引擎都有它们各自的优缺点。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近几年，为了得到一个更紧凑的，跑得更快，效率更高的引擎，我创建了 TweenLite （我无法接受其它的一些引擎带来的文件尺寸上的负担）.它很快就融入到我的所有工作中。我告诉其它人，让大家能够从中获益，最终，我将它发布了出来。在过去的几年中，TweenLite越来越受欢迎，超乎了我的想像.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基于此，我又添加了一些新的功能，并且尽量保持这个文件的尺寸，让它小于3K。 TweenFilterLite 扩充了 TweenLite 并且加入了滤镜缓动，包含了 ColorMatrixFilter 的一些效果，比如饱和、对比、增亮、色调，甚至是着色，但文件的尺寸始终没有超过3K。与 TweenLite 的做法相似，提供有AS2版和AS3版的类包下载。<br/>TweenMax 比 TweenFilterLite 增加了更多的特性，包含 bezier 缓动，暂停/恢复，顺序执行等等。(见 www.TweenMax.com)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我猜你会想“如果这个是‘轻量级的’，那么它一定会丢掉很多特性，让我用的时候会有点担心”。这种想法是对的，在这里缺少一些其它缓动引擎所包含的特效，但是我可以肯定的说，在过去几年我的工程（很多获奖的 flash 程序以及500强企业的项目中）中，我几乎一直都在用它，而它从没有让我失望过。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我还真没发现过我还需要其它的功能。你可以对任何的属性（包括 DisplayObject 对象的音量和颜色）使用缓动函数，内置的延迟时间，回调函数，以及传递参数给这些回调函数，甚至根据数组进行缓动，统统只在一行代码中完成。如果你需要更多的特效，你可以装上TweenFilterLite 或者 TweenMax来用用。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我也从来没有发现比这个更快的引擎。不同引擎执行效率的比较，请访问 <a href="http://blog.greensock.com/tweeing-speed-test/." target="_blank" rel="external">http://blog.greensock.com/tweeing-speed-test/.</a><br/><br/>TweenLite参数说明:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1) $ target : Object - 作为目标的对象， MovieClip或者其它对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2) $ duration : Number - 动画的时间长度（单位：秒）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3) $ vars : Object – 对象，通过属性值，来存贮各种属性参数用于缓动。（如果你使用 TweenLite.from() 方法，这里的参数表示缓动的初始值）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该对象所具有的属性：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alpha: alpha&nbsp;&nbsp;目标对象应该完成 (或开始，当使用 TweenLite.from()时)的透明度级别.如果 target.alpha 是1，当缓动被执行的时候，你指定参数为 0.5，它将把透明度从 1 缓动到 0.5.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x: 改变 MovieClip的 x 位置,把这个值设置成你希望的 MovieClip 的结束位置(如果你使用的是 TweenLite.from()这个值表示开始位置). <br/>　　　　　　　　　　　( y scaleX scaleY rotation　等属性不再重复说明）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;特别的属性 (**可选的**):<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay : Number - 延迟缓动 (以秒为单位).<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ease : Function - 缓动函数. 例如，fl.motion.easing.Elastic.easeOut 函数。默认的是 Regular.easeOut函数。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easeParams : Array - 用来存贮缓动公式所需要的额外数据. 当使用 Elastic 公式并且希望控制一些额外的参数，比如放大系数和缓动时间。大多数的缓动公式是不需要参数的，因此，你不需要给其它的缓动公式传递参数。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoAlpha : Number - 用它来代替 alpha 属性，可以获得一些副加的效果，比如当 alpha 值缓动到 0时，自动将 visible 属性改为 false。当缓动开始前，autoAlpha 大于 0时，它将会把 visible 属性变成 true 。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visible : Boolean - 在缓动结束时，想要指定 DisplayObject 的 visible 属性，请使用这个参数。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; volume : Number - 对 soundTransform （MovieClip/SoundChannel/NetStream 等）对象中的volume属性（音量大小）进行缓动 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tint : Number - 改变 DisplayObject 的颜色，设置一个16进制颜色值之后，当缓动结束时，目标对象将被变成这个颜色，（如果使用的是TweenLite.from()，这个值将表示目标对象开始缓动时的颜色)。举个例子，颜色值可以设定为： 0xFF0000。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeTint : Boolean - 要移除 DisplayObject 颜色，将这个参数设成 true 。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame : Number - 将 MovieClip 缓动到指帧频。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onStart : Function - 在缓动开始时想要执行某个函数，就将函数的引用（通常是函数名）放到这里。如果缓动是带延迟的，那么在缓动开始前该函数不会被执行。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onStartParams : Array - 为缓动开始时要执行的函数传递参数。(可选的)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onUp&#100;ate : Function - 缓动过程中，每次更新时调用这里指定的函数(缓动开始后，每一帧被触发一次),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onUp&#100;ateParams : Array - 给 onUp&#100;ate 参数指定的函数传递参数 (可选的)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onComplete : Function - 缓动结束时执行的函数。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onCompleteParams : Array - 给 onComplete 参数指定的函数传递参数 (可选的)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;persist : Boolean - 值为 true 时，TweenLite 实例将不会自动被系统的垃圾收集器给收走。但是当新的缓动出现时，它还是会被重写（overwritten）默认值为 false.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;renderOnStart : Boolean - 如果你使用带有延迟缓动的 TweenFilterLite.from() ，并且阻止缓动的渲染（rendering ）效果，直到缓动真正开始，将这个值设为 true.默认情况下该值为 false ，这会让渲染效果立即被执行，甚至是在延迟的时间还没到之前。<br/>overwrite : int - 当前的缓动被创建以后，通过这个参数可以限制作用于同一个对象的其它缓动，可选的参数值有：<br/>- 0 (没有): 没有缓动被重写。这种模式下，运行速度是最快的，但是需要注意避免创建一些控制相同属性的缓动，否则这些缓动效果间将出现冲突。<br/>- 1 (全部): (这是默认值，除非 OverwriteManager.init() 被调用过)对于同一对象的所有缓动在创建时将会被完全的覆盖掉。<br/>TweenLite.to(mc, 1, {x:100, y:200});<br/>TweenLite.to(mc, 1, {x:300, delay:2}); //后创建的缓动将会覆盖掉先前创建的缓动，（可以起到这样的作用：缓动进行到一半时被中断，执行新的缓动 译者注）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 2 (自动): (当 OverwriteManager.init() 被执行后,会根据具体的属性值进行选择)只覆盖对同一属性的缓动。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(mc, 1, {x:100, y:200});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(mc, 1, {x:300}); //only&nbsp;&nbsp;&#34;x&#34; 属性的缓动将被覆盖<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 3 (同时发生): 缓动开始时，覆盖全部的缓动。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(mc, 1, {x:100, y:200});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(mc, 1, {x:300, delay:2}); //不会覆盖先前的缓动，因为每二个缓动开始时，第一个缓动已经结束了。<br/><br/>举例: <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将实例名为 &#34;clip_mc&#34; 的 MovieClip 透明度降到 50% (0.5) ，并将它 x 轴位置移动到 120 ，将音量将到 0，缓动总共用时 1.5 秒，代码如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import gs.TweenLite;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(clip_mc, 1.5, {alpha:0.5, x:120, volume:0});<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果希望使用更高级的缓动函数在 5 内，将 alpha 变到 0.5，将 x 移动 到 120 ，使用 &#34;easeOutBack&#34; 弹性函数，缓动整体延迟 2 秒发生，并且在缓动结束时，执行 &#34;onFinishTween&#34; 函数，并且为这个函数传递几个参数，(一个数值 5 以及对 clip_mc 的引用)，代码如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import gs.TweenLite;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import fl.motion.easing.Back;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(clip_mc, 5, {alpha:0.5, x:120, ease:Back.easeOut, delay:2, onComplete: onFinishTween, onCompleteParams:[5, clip_mc]});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function onFinishTween(argument1:Number, argument2:MovieClip):void {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&#34;The tween has finished! argument1 = &#34; + argument1 + &#34;, and argument2 = &#34; + argument2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你的舞台上的 MovieClip 已经停在了它的结束位置，你只想让它花上5秒种回到这个位置，(只需要改变 y 属性，比当前位置高 100 像素的位置，让它从那里下落), 代码如下（这次使用的是 TweenLite.from 译者注):<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import gs.TweenLite;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import fl.motion.easing.Elastic;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.from(clip_mc, 5, {y:&#34;-100&#34;, ease:Elastic.easeOut});<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/><br/><br/>说明:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- TweenLite类会让你的 Flash 文件增加 3kb大小。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 给参数值加上引号，表示对指定的属性进行相应操作。比如，使用 TweenLite.to(mc, 2, {x:&#34;-20&#34;}); 它将 mc.x 向左移动 20 像素，与此相同效果的代码是：TweenLite.to(mc, 2, {x:mc.x - 20});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 你可以用别的缓动函数替换 TweenLite 默认的缓动函数: Regular.easeOut.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 必须使用 Flash Player 9 或之后版本的播放器 (ActionScript 3.0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 可以对任何 MovieClip 使用 &#34;volume&#34; 缓动,就比如：TweenLite.to(myClip_mc, 1.5, {volume:0});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 可以将 MovieClip 设定成某种颜色，使用 &#34;tint&#34; 参数,比如: TweenLite.to(myClip_mc, 1.5, {tint:0xFF0000});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 想要对数组内容进行缓动，将数值放到一个叫 endArray 的数组中即可，例如:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var myArray:Array = [1,2,3,4];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(myArray, 1.5, {endArray:[10,20,30,40]});<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 可以在任何时候终止缓动，使用 TweenLite.killTweensOf(myClip_mc); 函数。如果想强制终止缓动，可以传递一个 true 做为第二个参数，比如 <br/>TweenLite.killTweensOf(myClip_mc, true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 取掉延迟回调函数，用 TweenLite.killDelayedCallsTo(myFunction_func);这项功能可以用来控制回调函数的优先级。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 使用 TweenLite.from() 方法，可以使用对象从别的位置回到当前的位置。例如，你可以将对象在舞台上摆放整齐（缓动结束时的位置），然后利用 <br/>缓动，让它们跑到那个位置上去，你可以将缓动的初始位置值 x 或 y 或 alpha (或者其它你需要的属性)当做参数传递给这个方法函数。<br/><br/>TweenLite 下载链接：<br/><a href="http://www.greensock.com/ActionS" target="_blank" rel="external"><a href="http://www.greensock.com/ActionS" target="_blank" rel="external">http://www.greensock.com/ActionS</a></a> ... S3/TweenLiteAS3.zip<br/>下载下来的类包中，有一个 TweenLiteAS3_Sample_1.swf ，初学者可以用它来观察各种缓动的效果，并且直接得到相关的执行代码。算是一个可视化设计的工具，不要错过。<br/>下载到类包以后，解压缩到一个目录比如：d:\AS3Class ，在flash9 的首选参数－&gt;ActionScript-&gt;ActionScript3.0设置中添加类目录，d:\AS3Class\TweenLiteAS3 即可正确引用到相关的类。<br/><br/><br/>应用举例：<br/>import gs.TweenLite;<br/>import gs.easing.*;<br/><br/>stage.addEventListener(MouseEvent.CLICK, onCK);<br/>function onCK(evt) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TweenLite.to(mc, 0.5, {x:mouseX, y:mouseY, rotation:360});<br/>}<br/>在舞台上点击，会让mc 元件旋转并跑动到鼠标位置。 <br/>left<br/>[/align][/align][/align] <br/>]]></description>
		</item>
		
</channel>
</rss>
