<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zrong&#039;s Blog &#187; TipsAndTricks</title>
	<atom:link href="http://zengrong.net/post/tag/tipsandtricks/feed" rel="self" type="application/rss+xml" />
	<link>http://zengrong.net</link>
	<description>Flash、Flex、RIA、web、Linux和我的生活</description>
	<lastBuildDate>Thu, 09 Feb 2012 15:09:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>[转]Flash高性能开发基础系列—内存篇</title>
		<link>http://zengrong.net/post/1226.htm</link>
		<comments>http://zengrong.net/post/1226.htm#comments</comments>
		<pubDate>Tue, 21 Dec 2010 05:59:56 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[听说]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1226</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1226.htm" title="[转]Flash高性能开发基础系列—内存篇"></a>转自：青竹的日志 内存优化在项目是一个重要的环节，如果不合理的利用和回收内存会合你的程序整体大大下降. 合理使用对象 创建不同对象一般所消耗的内存是不一样的。如:Number 消耗 8 个字节,int消耗 4个字节, uint消耗 4个字节.下面我举一些例子: 1.int 类可使用表示为 32 位带符号整数的数据类型。 int 类表示的值的范围是：-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)，所以如果你的取值范围在-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)请你用int而不是用Number(刚从2.0转过来的人可能喜欢用Number).uint 范围是0 到 4,294,967,295 (2^32-1) 之间,Actionscript3中类型很少，所以这些只要你平时稍加注意一下就行. 2.合理使用Shape与Sprite,MovieClip,你可能用MovieClip可以完成Sprite与Shape的功能，但是他们所需的内存是不一样的Shape需要 236 字节,Sprite 需要 412字节, MovieClip 需要440字节,如果你只想显示图形没有交互那你使用Shape,如果是有交互的图形你可以用Sprite,如果是动画你才用MovieClip. 以上只是2个常见的实例，其实在as3中还有很多值得注意的这类情况。我还看到有些大哥为了派发一个事件而去继承Sprite类,Sprite需要消耗400字节, EventDispatcher只需要40字节. 对象重用 简单的说就是重复使用对象，而不是释放再重新申请,你可能这么认为：释放一个对象回收100字节的空间，我重新在new一个又占用100字节，返正都得占用100字。在flashplayer中不是说你想释放就能释放的,垃圾回收是由flashplayer来执行的，程序是不能控制，更不知道他是什么时候来执行的.所以对于我们来说回来是完全不可控的.所以说你觉得可回收了对象，很可能没回收继续占用空间直到flashplayer觉得内存不够时才可能执行垃圾回收从而被释放.而执行垃圾回收是非常耗费资源的操作尤其在大型的项目中. &#8230;<p class="read-more"><a href="http://zengrong.net/post/1226.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1226.htm" title="[转]Flash高性能开发基础系列—内存篇"></a><p>转自：<a href="http://uh.9ria.com/space-109929-do-blog-id-7267.html" target="_blank">青竹的日志</a></p>
<hr />
内存优化在项目是一个重要的环节，如果不合理的利用和回收内存会合你的程序整体大大下降.</p>
<h3>合理使用对象</h3>
<p>创建不同对象一般所消耗的内存是不一样的。如:Number 消耗 8 个字节,int消耗 4个字节, uint消耗 4个字节.下面我举一些例子:</p>
<p>1.int 类可使用表示为 32 位带符号整数的数据类型。 int 类表示的值的范围是：-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)，所以如果你的取值范围在-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)请你用int而不是用Number(刚从2.0转过来的人可能喜欢用Number).uint 范围是0 到 4,294,967,295 (2^32-1) 之间,Actionscript3中类型很少，所以这些只要你平时稍加注意一下就行.<br />
2.合理使用Shape与Sprite,MovieClip,你可能用MovieClip可以完成Sprite与Shape的功能，但是他们所需的内存是不一样的Shape需要 236 字节,Sprite 需要 412字节, MovieClip  需要440字节,如果你只想显示图形没有交互那你使用Shape,如果是有交互的图形你可以用Sprite,如果是动画你才用MovieClip.</p>
<p>以上只是2个常见的实例，其实在as3中还有很多值得注意的这类情况。我还看到有些大哥为了派发一个事件而去继承Sprite类,Sprite需要消耗400字节, EventDispatcher只需要40字节.<span id="more-1226"></span></p>
<h3>对象重用</h3>
<p>简单的说就是重复使用对象，而不是释放再重新申请,你可能这么认为：释放一个对象回收100字节的空间，我重新在new一个又占用100字节，返正都得占用100字。在flashplayer中不是说你想释放就能释放的,垃圾回收是由flashplayer来执行的，程序是不能控制，更不知道他是什么时候来执行的.所以对于我们来说回来是完全不可控的.所以说你觉得可回收了对象，很可能没回收继续占用空间直到flashplayer觉得内存不够时才可能执行垃圾回收从而被释放.而执行垃圾回收是非常耗费资源的操作尤其在大型的项目中.</p>
<p>虽然我们不能控制垃圾回收，但是我们可以降低垃圾回收器执行的次数，这就是我们尽量做到不去new,而使用现有的对象。这些做还有个好处就是，节省了创建对象的性能开销.</p>
<p>这里是不断的创建对象</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1226code7'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12267"><td class="code" id="p1226code7"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">size</span>:Rectangle;
<span style="color: #000000; font-weight: bold;">var</span> bitmap:BitmapData=<span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span>:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">100</span>; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #0066CC;">size</span> = <span style="color: #000000; font-weight: bold;">new</span> Rectangle<span style="color: #66cc66;">&#40;</span>i,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>;
     myBitmapData.<span style="color: #006600;">fillRect</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>,<span style="color: #0066CC;">COLOR</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
重用对象
&nbsp;
<span style="color: #66cc66;">&lt;</span>pre lang=<span style="color: #ff0000;">&quot;actionscript&quot;</span><span style="color: #66cc66;">&gt;</span>
<span style="color: #000000; font-weight: bold;">var</span> bitmap:BitmapData=<span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">size</span>:Rectangle = <span style="color: #000000; font-weight: bold;">new</span> Rectangle<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span>:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">100</span>; i++<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">size</span>.<span style="color: #006600;">x</span> = i;
    myBitmapData.<span style="color: #006600;">fillRect</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>,<span style="color: #0066CC;">COLOR</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h3>对象池技术</h3>
<p>对象池技术的原理就是回收不使用的对象而不是遗弃等待FlashPlayer垃圾回器的执行,等到再需要时再拿来使用.这种技术使用非常广泛,看下面的简单的实现(这里只是一个抛砖引玉，具体怎么设计这个对象池，要看各位的具体项目了).</p>
<p>IRecyclable接口，可以被回收对象必须实现。再就是ObjectPool.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1226code8'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12268"><td class="code" id="p1226code8"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">interface</span> IRecyclable
    <span style="color: #66cc66;">&#123;</span>
       <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>;
     <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">//对象池的实现</span>
package<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ObjectPool<span style="color: #66cc66;">&#123;</span>
&nbsp;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> pool:Vector.<span style="color: #66cc66;">&lt;</span>IRecyclable<span style="color: #66cc66;">&gt;</span>;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">type</span>:<span style="color: #000000; font-weight: bold;">Class</span>;<span style="color: #808080; font-style: italic;">//回收对象的类型</span>
&nbsp;
       <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ObjectPool<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span>:<span style="color: #000000; font-weight: bold;">Class</span><span style="color: #66cc66;">&#41;</span> 
       <span style="color: #66cc66;">&#123;</span>
          <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">type</span>=<span style="color: #0066CC;">type</span>;
            pool=<span style="color: #000000; font-weight: bold;">new</span> Vector.<span style="color: #66cc66;">&lt;</span>IRecyclable<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addObject<span style="color: #66cc66;">&#40;</span>o:IRecyclable<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
            o.<span style="color: #006600;">dispose</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
            pool.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>o<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
         <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getObject<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>pool.<span style="color: #006600;">length</span><span style="color: #66cc66;">&lt;</span>=<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">type</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
             <span style="color: #b1b100;">return</span> pool.<span style="color: #0066CC;">pop</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
          <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h3>对象的另类存储</h3>
<p>在存储大量对象时，我们可以以另一种方式存储或者叫序列化，即存储对象的数据而不存储具体的对象，当需要时再根椐需要数据返序列化出一个对象。这样做法的好处在于不会有大量的对象产生，在as中对即使是空对象也会占用40个字节.</p>
<p>很多时候你可能这样写代码:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1226code9'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12269"><td class="code" id="p1226code9"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> p:<span style="color: #0066CC;">Array</span>=<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span><span style="color: #cc66cc;">1000000</span>;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
     p.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Point<span style="color: #66cc66;">&#40;</span>i,i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>这里我来实现另一种对象存储:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1226code10'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p122610"><td class="code" id="p1226code10"><pre class="actionscript" style="font-family:monospace;">package<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">geom</span>.<span style="color: #006600;">Point</span>;
&nbsp;
     <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PointContainer<span style="color: #66cc66;">&#123;</span>
&nbsp;
      <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> container:<span style="color: #0066CC;">Array</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> PointContainer<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            container=<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
         <span style="color: #66cc66;">&#125;</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">add</span><span style="color: #66cc66;">&#40;</span>v:Point<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
            container.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>v.<span style="color: #006600;">x</span><span style="color: #66cc66;">&#41;</span>;
            container.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>v.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getPointAt<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">index</span>:<span style="color: #0066CC;">int</span><span style="color: #66cc66;">&#41;</span>:Point<span style="color: #66cc66;">&#123;</span>
           <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> Point<span style="color: #66cc66;">&#40;</span>container<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">index</span><span style="color: #66cc66;">&#93;</span>,container<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">index</span>+<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">//使用</span>
<span style="color: #000000; font-weight: bold;">var</span> p:PointContainer=<span style="color: #000000; font-weight: bold;">new</span> PointContainer
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span><span style="color: #cc66cc;">1000000</span>;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
   p.<span style="color: #0066CC;">add</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Point<span style="color: #66cc66;">&#40;</span>i,i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span><span style="color: #cc66cc;">1000000</span>;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
   p.<span style="color: #006600;">getPointAt</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>这种对象存储方式适合大量小型对象存储，比如粒子系统.如果是庞大的对象，这种方式没有任何优式.</p>
<h3>事件优化</h3>
<p>使用事件模型通信与使用传统的回调函数相比，速度更慢且占用的内存更多  </p>
<p>AS3中事件的派发传递参数是采用Event,所以在高频率派发事件的地方你可以采用传统的回调函数这样可以大大提高你的效率和内存消耗.</p>
<h3>位图优化</h3>
<p>一般最占用内存的部分就是位图,在我开发的MMO游戏中90%以上的的内存是由位图占据的,所以在位图的使用过程序要特别注意，不使用的位图一定要释放掉。在这里我提一些小的建议，以尽量控制位图的内存占用。</p>
<p>1．能共享位图的尽量共享，具体做法就是用一个BitampData创建多个Bitamp对象。尽量不要去复制BitmapData对象.<br />
2．将滤镜应用于显示对象时，Flash Player 将在内存中创建两个位图,所以这需要大量内存。所以尽量不要去使用滤镜，一般可以用ps做好滤镜后生成位图给flash来使用.<br />
3．合理的使用位图缓存.对矢量图形做位图缓存，其实在把矢量图形变成位图，并使用该</p>
<p>位图进行呈现,此会显著提高呈现的性能，但需要占用大量内存。针对复杂的矢量内容使用位图缓存功能。</p>
<h3>释放对象</h3>
<p>释放对象其实只有一句话,就是不支有对象的引用,包括声音/视频流，socket,件事等等.我最多的一种情况是事件忘记移除导致对象无法回收，这并不是我不知道这一点，而是在写代码时的疏忽。如果你是一个人开发，你可能经常去profile你的代码，可能很容易找出哪个地方没被移除，但是如果你主程或者架构师你手下有很多少人在Coding，你怎么让他不遗忘移除事件呢，下面我来简单介绍一种方法一次性移除所有事件，避免一个一个移除带来的遗漏问题.</p>
<p>一般大家都用EventDispatcher来派发事件.现在我们就对addEventListener进行一个小小的改造即可.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1226code11'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p122611"><td class="code" id="p1226code11"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">EventDispatcher</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">IEventDispatcher</span>;
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MyEventDispatcher <span style="color: #0066CC;">extends</span> EventDispatcher<span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> events:<span style="color: #0066CC;">Array</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> MyEventDispatcher<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">target</span>:IEventDispatcher=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
            events=<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
         <span style="color: #66cc66;">&#125;</span>
        override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addEventListener<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">String</span>, listener:<span style="color: #000000; font-weight: bold;">Function</span>, useCapture:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">false</span>, priority:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>, useWeakReference:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
&nbsp;
            events.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">type</span>,fun:listener<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #0066CC;">super</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span>, listener, useCapture, priority, useWeakReference<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
        override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> removeEventListener <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">String</span>, listener:<span style="color: #000000; font-weight: bold;">Function</span>, useCapture:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
               <span style="color: #0066CC;">super</span>. <span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span>,listener, useCapture<span style="color: #66cc66;">&#41;</span>;
              <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span>=<span style="color: #cc66cc;">0</span>;i<span style="color: #66cc66;">&lt;</span> ;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
                  <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span> events<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">type</span>==<span style="color: #0066CC;">type</span> <span style="color: #66cc66;">&amp;&amp;</span> events<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">fun</span>==listenner<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
                   events.<span style="color: #0066CC;">splice</span><span style="color: #66cc66;">&#40;</span>i,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#125;</span>
            <span style="color: #66cc66;">&#125;</span>
      <span style="color: #66cc66;">&#125;</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
          <span style="color: #000000; font-weight: bold;">var</span> ev:<span style="color: #0066CC;">Object</span>;
            <span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span>events.<span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
               ev=events.<span style="color: #0066CC;">pop</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; 
                <span style="color: #0066CC;">super</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ev.<span style="color: #0066CC;">type</span>,ev.<span style="color: #006600;">fun</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #66cc66;">&#125;</span>
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>所以你在使用EventDispatcher的地方全部使用MyEventDispatcher即可，在回收之前端调用一下dispose方法，就会内部移除所有事件.</p>
<p>还有很多方法可以做到这一点，以上方法只是一个抛砖引玉.</p>
<h3>滥用强制垃圾回收</h3>
<p>在Flashplayer debug版本提供了System.gc()接口，可以让虚拟机执行垃圾回收,但是flashplayer 普通用户版是没有这个接口的,于是有人想出使用异常还出发垃圾回收如:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1226code12'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p122612"><td class="code" id="p1226code12"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> gc<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
         <span style="color: #0066CC;">try</span><span style="color: #66cc66;">&#123;</span>
                <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LocalConnection</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">connect</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;foo&quot;</span><span style="color: #66cc66;">&#41;</span>;
                 <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LocalConnection</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">connect</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;foo&quot;</span><span style="color: #66cc66;">&#41;</span>;
           <span style="color: #66cc66;">&#125;</span><span style="color: #0066CC;">catch</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
                    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">System</span>.<span style="color: #006600;">totalMemory</span><span style="color: #66cc66;">&#41;</span>;
                <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>当然还有其他方法在这里我就不多举了.</p>
<p>Adobe为什么在普通用户版的flashplayer中取消对System.gc()接口的支持,adobe肯定不希望用户直接去触发垃圾回器,肯定是有理由的,下面我将对这个理由进行的浅薄分析.</p>
<p>垃圾回收器通过查找系统中的相互引用，从而检测出处于非活动状态的对象。将删除通过这种方式检测到的处于非活动状态的对象。也就说他要扫描可能持有对象的的所有变量，这一点所需的代价很大，尤其是在大型项目中.如果你经常去做这样的事，这会大大浪费你的CPU资源.</p>
<p>我做Flash开发已快5年了,我没有什么地方非要用到强制垃圾回收的地方.所以我要在这里提醒广大Flash开发者,在没有特术需求的时候不要使用强制垃圾回收，不要会了腾出一点内存空间而去强制垃圾回收，可能很多时候你是检芝麻丢西瓜,回收器的执行不是普通程序员管的事，Flashplayer会选择最合适的时候去调用.(原本这一节不是我要写的内容，原因是我看到在天地会主页很醒目的位置有一篇《AS3强制内存回收方法之二》,而且受到大家的广泛关注,所以我不想让这篇文章误导了一些新手,以上只是个人见解我希望大家一起讨论这个问题)</p>
<p><b>以下为评论的转载</b></p>
<hr />
guissy 2010-12-11 12:32<br />
1.优先级 int uint Number<br />
   优先级 EventDispatcher Shape Sprite MovieClip<br />
2.for 或EnterFrame或TIMER里边少用new<br />
3.闲置对象=null 不如 ObjectPool.add(闲置对象)<br />
4.[new Point(0,0),new Point(1,1)]不如 [0,0,1,1]</p>
<p>guissy 2010-12-13 20:32<br />
关于对象池，考虑使用new Dictionary(true),具备弱引用。<br />
思路见贴：<a href="http://bbs.9ria.com/redirect.php?goto=findpost&#038;pid=561614&#038;ptid=63490" target="_blank">http://bbs.9ria.com/redirect.php?goto=findpost&#038;pid=561614&#038;ptid=63490</a></p>
<p>lcj0526 2010-12-14 09:50<br />
另外关于对象池的看法，我提点个人意见，其实我觉得只要你不是在同时进行大量new的话，我并不赞成采用对象池的方法，加了对象池，会额外增加swf文件的大小，尽管不一定很多，另外，因为不是大量的生成，所以你new一个的对象所需的时间，可能比你去取对象池的速度还快。所以一般对象池技术是用于服务器的，除非客户端像你所说要做粒子效果的话，采用这个倒是不错，呵呵。以上纯属个人看法，不当之处还请高人指点</p>
<p>青竹 2010-12-14 10:25<br />
谢谢这位兄弟的评点,对象池技术不只用在服务器，在设计中高密度创建的对象地方，对象池技术可以减小创建与销毁的代价.</p>
<p>guissy 2010-12-13 17:36<br />
1.位图优化。如果是mmo之类需要严格控制内存的，这是非常值得关注的技术。如果是网页特效或一些全屏的小应用，还是矢量为佳.<br />
2.override addEventListener 与 某人说的“事件总线”，都存在性能上和编码习惯的不友好。必要时使用弱引用，这是比较好的习惯。另外, 框架式的代码必须用profile去检测.每个类都用dispose()做销毁工作也是相当好的习惯。赞同。<br />
3.gc是自动管理内存。但不觉得gc能占用多少cpu.除非你的是循环着用.如果真有有那么费cpu，请截图.</p>
<p>lcj0526 2010-12-14 09:44<br />
呵呵，你这个占CPU的我测试过，在我的项目里如果每桢都调用gc方法的话，CPU会一直在13以上，如果不调用的一般就是在0-5之间。我指的是在同种情况下，具体就是玩家不动，当前视野里没其他对象操作的情况下测试的。另外CPU占用的多少与计算机的配置也是有很大的关系的</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1226.htm/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>ActionScript3移除匿名函数的侦听</title>
		<link>http://zengrong.net/post/1030.htm</link>
		<comments>http://zengrong.net/post/1030.htm#comments</comments>
		<pubDate>Wed, 09 Jun 2010 01:43:56 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1030</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1030.htm" title="ActionScript3移除匿名函数的侦听"></a>出处：http://blog.yoz.sk/2010/06/quick-tip-timer-listeners-doesnt-require-remove/ ?View Code ACTIONSCRIPTEventDispatcher&#40;event.currentTarget&#41;.removeEventListener&#40;event.type, arguments.callee&#41;;]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1030.htm" title="ActionScript3移除匿名函数的侦听"></a><p>出处：http://blog.yoz.sk/2010/06/quick-tip-timer-listeners-doesnt-require-remove/</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1030code14'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p103014"><td class="code" id="p1030code14"><pre class="actionscript" style="font-family:monospace;">EventDispatcher<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">currentTarget</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">type</span>, <span style="color: #0066CC;">arguments</span>.<span style="color: #0066CC;">callee</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1030.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用URLLoader载入文本和XML-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/418.htm</link>
		<comments>http://zengrong.net/post/418.htm#comments</comments>
		<pubDate>Sun, 30 Dec 2007 07:44:11 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=418</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/418.htm" title="使用URLLoader载入文本和XML-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一Loading Text and XML with URLLoader，查看所有的笔记。 在AS3以前的版本中，要载入外部文本，可以使用LoadVars类和XML类。但是在AS3中，这些功能被移到了一个类中，这就是URLLoader(flash.net.URLLoader)类，这个类与LoadVars很相似。而AS3的XML类中，已经没有了载入外部XML文件的功能。我们可以使用URLLoader类获取外部的文本，并将其解析成普通文本或者XML对象。 就像LoadVars类一样，URLLoader类也有一个load()方法载入外部源的数据。这个方法允许一个URLRequest类的实例（而不是一个字符串）作为它的为一个参数。你可以使用URLLoader的事件决定载入完成之后该做什么。载入成功之后，URLLoader中的data属性将包含载入的文本值。 ?View Code ACTIONSCRIPTvar loader:URLLoader; // ... loader = new URLLoader&#40;&#41;; loader.addEventListener&#40;Event.COMPLETE, xmlLoaded&#41;; &#160; var request:URLRequest = new URLRequest&#40;&#34;file.xml&#34;&#41;; loader.load&#40;request&#41;; //... function xmlLoaded&#40;event:Event&#41;:void &#123; var myXML:XML = new XML&#40;loader.data&#41;; //... &#8230;<p class="read-more"><a href="http://zengrong.net/post/418.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/418.htm" title="使用URLLoader载入文本和XML-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798">ActionScript3 Tips and Tricks</a>系列阅读笔记之一<a href="http://www.kirupa.com/forum/showthread.php?p=1910480#post1910480" title="Loading Text and XML with URLLoader" target="_blank">Loading Text and XML with URLLoader</a>，查看<a href="http://www.zengrong.net/?tag=tipsandtricks">所有的笔记</a>。</p>
<p>在AS3以前的版本中，要载入外部文本，可以使用LoadVars类和XML类。但是在AS3中，这些功能被移到了一个类中，这就是URLLoader(<a href="http://livedocs.macromedia.com/flex/2/langref/flash/net/URLLoader.html">flash.net.URLLoader</a>)类，这个类与LoadVars很相似。而AS3的XML类中，已经没有了载入外部XML文件的功能。我们可以使用URLLoader类获取外部的文本，并将其解析成普通文本或者XML对象。</p>
<p>就像LoadVars类一样，URLLoader类也有一个load()方法载入外部源的数据。这个方法允许一个URLRequest类的实例（而不是一个字符串）作为它的为一个参数。你可以使用URLLoader的事件决定载入完成之后该做什么。载入成功之后，URLLoader中的data属性将包含载入的文本值。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p418code16'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p41816"><td class="code" id="p418code16"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> loader:URLLoader;
<span style="color: #808080; font-style: italic;">// ...</span>
loader = <span style="color: #000000; font-weight: bold;">new</span> URLLoader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
loader.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, xmlLoaded<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> request:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;file.xml&quot;</span><span style="color: #66cc66;">&#41;</span>;
loader.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span>request<span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">//...</span>
<span style="color: #000000; font-weight: bold;">function</span> xmlLoaded<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">var</span> myXML:<span style="color: #0066CC;">XML</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span>loader.<span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #808080; font-style: italic;">//...</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/418.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>trace的多参数支持-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/417.htm</link>
		<comments>http://zengrong.net/post/417.htm#comments</comments>
		<pubDate>Sun, 30 Dec 2007 07:23:26 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=417</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/417.htm" title="trace的多参数支持-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一Multiple Arguments in trace()，查看所有的笔记。 trace函数可以在Flash的输出面板（Flex Builder的Console面板）中显示信息。在ActionScript1和ActionScript2中，trace函数只能接收一个参数，而在ActionScript3中，trace函数可以接收多个参数： ?View Code ACTIONSCRIPTtrace&#40;value1, value2, value3&#41;; 实际上，在ActionScript1/2中也可以做到。只需要使用数组： ?View Code ACTIONSCRIPTtrace&#40;&#91;value1, value2, value3&#93;&#41;; ZRong注：实际上，以上的两段代码的显示结果是不同的，ActionScript3 的trace，会将每隔参数的值以空格分开，而ActionScript1/2使用数组作为参数，显示的结果是以逗号分隔的。]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/417.htm" title="trace的多参数支持-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798">ActionScript3 Tips and Tricks</a>系列阅读笔记之一<a href="http://www.kirupa.com/forum/showthread.php?p=1907433#post1907433" title="Multiple Arguments in trace()" target="_blank">Multiple Arguments in trace()</a>，查看<a href="http://www.zengrong.net/?tag=tipsandtricks" title="ActionScript 3 tips-and-tricks" target="_blank">所有的笔记</a>。</p>
<p>trace函数可以在Flash的输出面板（Flex Builder的Console面板）中显示信息。在ActionScript1和ActionScript2中，trace函数只能接收一个参数，而在ActionScript3中，trace函数可以接收多个参数：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p417code19'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p41719"><td class="code" id="p417code19"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>value1, value2, value3<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>实际上，在ActionScript1/2中也可以做到。只需要使用数组：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p417code20'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p41720"><td class="code" id="p417code20"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>value1, value2, value3<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p><strong><font color="#ff0000">ZRong注：实际上，以上的两段代码的显示结果是不同的，ActionScript3 的trace，会将每隔参数的值以空格分开，而ActionScript1/2使用数组作为参数，显示的结果是以逗号分隔的。</font></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/417.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>获取实例的类或超类名-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/364.htm</link>
		<comments>http://zengrong.net/post/364.htm#comments</comments>
		<pubDate>Sat, 15 Sep 2007 02:30:39 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=364</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/364.htm" title="获取实例的类或超类名-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一Determine Instance Class or Superclass，这里是原文地址。 在ActionScript3中，可以使用getQualifiedClassName函数 (flash.utils.getQualifiedClassName)获取实例的类名： ?View Code ACTIONSCRIPTvar sprite:Sprite = new Sprite&#40;&#41;; trace&#40;getQualifiedClassName&#40;sprite&#41;&#41;; // 输出&#34;flash.display::Sprite&#34; 还可以使用getQualifiedSuperclassName函数 (flash.utils.getQualifiedSuperclassName)获取超类的名称： ?View Code ACTIONSCRIPTtrace&#40;getQualifiedSuperclassName&#40;sprite&#41;&#41;; // 输出&#34;flash.display::DisplayObjectContainer&#34; 如果想把字符串转换成类引用，可以使用getDefinitionByName函数 (flash.utils.getDefinitionByName)： ?View Code ACTIONSCRIPTtrace&#40;getDefinitionByName&#40;&#34;flash.display::Sprite&#34;&#41;&#41;; // 输出[class Sprite] 而使用describeType函数 (flash.utils.describeType) 则可以获取非常详细的类的信息： ?View Code &#8230;<p class="read-more"><a href="http://zengrong.net/post/364.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/364.htm" title="获取实例的类或超类名-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798" target="_blank">ActionScript3 Tips and Tricks</a>系列阅读笔记之一<a href="http://www.kirupa.com/forum/showthread.php?p=1902564#post1902564" target="_blank">Determine Instance Class or Superclass</a>，这里是<a href="http://www.kirupa.com/forum/showthread.php?p=1902564#post1902564" target="_blank">原文地址</a>。</p>
<p>在ActionScript3中，可以使用getQualifiedClassName函数 (<a href="http://livedocs.macromedia.com/flex/2/langref/flash/utils/package.html#getQualifiedClassName()" target="_blank">flash.utils.getQualifiedClassName</a>)获取实例的类名：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p364code26'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36426"><td class="code" id="p364code26"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> sprite:Sprite = <span style="color: #000000; font-weight: bold;">new</span> Sprite<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>getQualifiedClassName<span style="color: #66cc66;">&#40;</span>sprite<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// 输出&quot;flash.display::Sprite&quot;</span></pre></td></tr></table></div>

<p>还可以使用getQualifiedSuperclassName函数 (<a href="http://livedocs.macromedia.com/flex/2/langref/flash/utils/package.html#getQualifiedSuperclassName()" target="_blank">flash.utils.getQualifiedSuperclassName</a>)获取超类的名称：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p364code27'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36427"><td class="code" id="p364code27"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>getQualifiedSuperclassName<span style="color: #66cc66;">&#40;</span>sprite<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// 输出&quot;flash.display::DisplayObjectContainer&quot;</span></pre></td></tr></table></div>

<p><span id="more-364"></span></p>
<p>如果想把字符串转换成类引用，可以使用getDefinitionByName函数 (<a href="http://livedocs.macromedia.com/flex/2/langref/flash/utils/package.html#getDefinitionByName()" target="_blank">flash.utils.getDefinitionByName</a>)：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p364code28'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36428"><td class="code" id="p364code28"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>getDefinitionByName<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;flash.display::Sprite&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// 输出[class Sprite]</span></pre></td></tr></table></div>

<p>而使用describeType函数 (<a href="http://livedocs.macromedia.com/flex/2/langref/flash/utils/package.html#describeType()" target="_blank">flash.utils.describeType</a>) 则可以获取非常详细的类的信息：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p364code29'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36429"><td class="code" id="p364code29"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> s:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;hello&quot;</span>;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>describeType<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>输出:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p364code30'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36430"><td class="code" id="p364code30"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;type</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;String&quot;</span> <span style="color: #000066;">base</span>=<span style="color: #ff0000;">&quot;Object&quot;</span> <span style="color: #000066;">isDynamic</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">isFinal</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">isStatic</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;extendsClass</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;Object&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;constructor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;parameter</span> <span style="color: #000066;">index</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;*&quot;</span> <span style="color: #000066;">optional</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/constructor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;accessor</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;length&quot;</span> <span style="color: #000066;">access</span>=<span style="color: #ff0000;">&quot;readonly&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;int&quot;</span> <span style="color: #000066;">declaredBy</span>=<span style="color: #ff0000;">&quot;String&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/type<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>下载源文件：<br />
<a href='/wp-content/uploads/2007/09/determine-instance-class-or-superclass.zip' title='determine-instance-class-or-superclass.zip'>determine-instance-class-or-superclass.zip(5KB)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/364.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>使用ByteArray进行对象深度拷贝-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/363.htm</link>
		<comments>http://zengrong.net/post/363.htm#comments</comments>
		<pubDate>Thu, 13 Sep 2007 15:59:58 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=363</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/363.htm" title="使用ByteArray进行对象深度拷贝-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一“Deep Object Copies with ByteArray”，这里是原文地址。 使用ActionScript3中新提供的 ByteArray类 (flash.utils.ByteArray) 可以创建一个对象的深度拷贝。“深度”的意思是可以拷贝一个对象（object）的所有引用， 这意味着如果你拷贝一个包含对象的数组，那么数组中的对象也被拷贝（而不是引用）。下面是一个clone方法： ActionScript 代码: ?View Code ACTIONSCRIPTfunction clone&#40;source:Object&#41;:* &#123; var copier:ByteArray = new ByteArray&#40;&#41;; copier.writeObject&#40;source&#41;; copier.position = 0; return&#40;copier.readObject&#40;&#41;&#41;; &#125; 注意：你需要先导入 flash.utils.ByteArray； 要使用这个方法，可以使用下面的代码： ActionScript 代码: ?View Code ACTIONSCRIPTnewObjectCopy = &#8230;<p class="read-more"><a href="http://zengrong.net/post/363.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/363.htm" title="使用ByteArray进行对象深度拷贝-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798" target="_blank">ActionScript3 Tips and Tricks</a>系列阅读笔记之一“Deep Object Copies with ByteArray”，这里是<a href="http://www.kirupa.com/forum/showthread.php?p=1897368#post1897368" target="_blank">原文地址</a>。</p>
<p>使用ActionScript3中新提供的 ByteArray类 (<a href="http://livedocs.macromedia.com/flex/2/langref/flash/utils/ByteArray.html" target="_blank">flash.utils.ByteArray</a>) 可以创建一个对象的深度拷贝。“深度”的意思是可以拷贝一个对象（object）的所有引用， 这意味着如果你拷贝一个包含对象的数组，那么数组中的对象也被拷贝（而不是引用）。下面是一个clone方法：</p>
<p><strong>ActionScript 代码:</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p363code37'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36337"><td class="code" id="p363code37"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> clone<span style="color: #66cc66;">&#40;</span>source:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> copier:ByteArray = <span style="color: #000000; font-weight: bold;">new</span> ByteArray<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
copier.<span style="color: #006600;">writeObject</span><span style="color: #66cc66;">&#40;</span>source<span style="color: #66cc66;">&#41;</span>;
copier.<span style="color: #0066CC;">position</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span>copier.<span style="color: #006600;">readObject</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>注意：你需要先导入 flash.utils.ByteArray；</p>
<p>要使用这个方法，可以使用下面的代码：</p>
<p><strong>ActionScript 代码:</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p363code38'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36338"><td class="code" id="p363code38"><pre class="actionscript" style="font-family:monospace;">newObjectCopy = clone<span style="color: #66cc66;">&#40;</span>originalObject<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>虽然这个方法可以深度拷贝你的对象，但是它不会一同拷贝类的类型定义。所以，如果查需要拷贝一个 MyClass 实例，拷贝出的对象将不在是MyClass类型。这个方法最好在普通对象上使用。<span id="more-363"></span></p>
<p><strong>下面是我的一些测试代码：</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p363code39'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36339"><td class="code" id="p363code39"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">ByteArray</span>;
flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">getQualifiedClassName</span>;
<span style="color: #000000; font-weight: bold;">var</span> a1:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#93;</span>;
<span style="color: #000000; font-weight: bold;">var</span> a2:<span style="color: #0066CC;">Array</span> = clone<span style="color: #66cc66;">&#40;</span>a1<span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//克隆a1，a2中保存的是a1的复制品，与a1不存在任何关系了</span>
<span style="color: #000000; font-weight: bold;">var</span> a3:<span style="color: #0066CC;">Array</span> = a1;	<span style="color: #808080; font-style: italic;">//由于a1是数组，所以a3是引用a1</span>
a1.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span>;		<span style="color: #808080; font-style: italic;">//改变a1的值</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>a1<span style="color: #66cc66;">&#41;</span>;		<span style="color: #808080; font-style: italic;">//输出 1,2,3,4</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>a2<span style="color: #66cc66;">&#41;</span>;		<span style="color: #808080; font-style: italic;">//输出 1,2,3</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>a3<span style="color: #66cc66;">&#41;</span>;		<span style="color: #808080; font-style: italic;">//输出 1,2,3,4</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;===============&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> aa1:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#93;</span>;
<span style="color: #000000; font-weight: bold;">var</span> aa2:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">11</span>,<span style="color: #cc66cc;">22</span>,aa1<span style="color: #66cc66;">&#93;</span>	<span style="color: #808080; font-style: italic;">//aa2中的一个元素是aa1</span>
<span style="color: #000000; font-weight: bold;">var</span> aa3:<span style="color: #0066CC;">Array</span> = clone<span style="color: #66cc66;">&#40;</span>aa2<span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//克隆aa2，aa3中保存的是aa2的复制品，aa2中的aa1也是复制品</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>aa1<span style="color: #66cc66;">&#41;</span>;			<span style="color: #808080; font-style: italic;">//输出 1,2,3</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>aa2<span style="color: #66cc66;">&#41;</span>;			<span style="color: #808080; font-style: italic;">//输出 11,22,1,2,3</span>
aa1.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span>;			<span style="color: #808080; font-style: italic;">//修改aa1的值</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>aa2<span style="color: #66cc66;">&#41;</span>;			<span style="color: #808080; font-style: italic;">//输出 11,22,1,2,3,4</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>aa3<span style="color: #66cc66;">&#41;</span>;			<span style="color: #808080; font-style: italic;">//输出 11,22,1,2,3</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>getQualifiedClassName<span style="color: #66cc66;">&#40;</span>aa2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//输出 Array</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>getQualifiedClassName<span style="color: #66cc66;">&#40;</span>aa3<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//输出 Array，这说明对Array的克隆可以保持克隆结果的Array类型不变</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;===============&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> aaa1:MyClass = <span style="color: #000000; font-weight: bold;">new</span> MyClass<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//建立一个自定义类型</span>
<span style="color: #000000; font-weight: bold;">var</span> aaa2 = clone<span style="color: #66cc66;">&#40;</span>aaa1<span style="color: #66cc66;">&#41;</span>;		<span style="color: #808080; font-style: italic;">//克隆自定义类型</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>aaa2.<span style="color: #006600;">a</span><span style="color: #66cc66;">&#41;</span>;			<span style="color: #808080; font-style: italic;">//输出 1</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>getQualifiedClassName<span style="color: #66cc66;">&#40;</span>aaa2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//输出 Object，这说明aaa2的MyClass类型丢失了</span>
<span style="color: #000000; font-weight: bold;">function</span> clone<span style="color: #66cc66;">&#40;</span>$source:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #66cc66;">*</span>
<span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> _copier:ByteArray = <span style="color: #000000; font-weight: bold;">new</span> ByteArray<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
_copier.<span style="color: #006600;">writeObject</span><span style="color: #66cc66;">&#40;</span>$source<span style="color: #66cc66;">&#41;</span>;
_copier.<span style="color: #0066CC;">position</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">return</span> _copier.<span style="color: #006600;">readObject</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p><strong>MyClass.as的内容</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p363code40'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36340"><td class="code" id="p363code40"><pre class="actionscript" style="font-family:monospace;">package<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MyClass<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> a:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">1</span>;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> b:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">2</span>;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> MyClass<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p><strong>注意：</strong><br />
不能为aaa2强制转换类型，如果使用下面的语句：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p363code41'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36341"><td class="code" id="p363code41"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> aaa2 = MyClass<span style="color: #66cc66;">&#40;</span>clone<span style="color: #66cc66;">&#40;</span>aaa1<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>则会报错：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p363code42'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36342"><td class="code" id="p363code42"><pre class="actionscript" style="font-family:monospace;">TypeError: <span style="color: #0066CC;">Error</span> <span style="color: #808080; font-style: italic;">#1034: 强制转换类型失败:无法将 Object@138c0341 转换为 MyClass。</span>
at DeepObjectCopieswithByteArray_fla::MainTimeline<span style="color: #66cc66;">/</span>DeepObjectCopieswithByteArray_fla::frame1<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>如果使用as语句转换，则得到的aaa2值是null。</p>
<p>下载源文件：<br />
<a href='/wp-content/uploads/2007/09/deep-object-copies-with-bytearray.zip' title='deep-object-copies-with-bytearray.zip'>deep-object-copies-with-bytearray.zip(5KB)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/363.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>抽象类-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/362.htm</link>
		<comments>http://zengrong.net/post/362.htm#comments</comments>
		<pubDate>Thu, 13 Sep 2007 15:54:57 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=362</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/362.htm" title="抽象类-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一，这里是原文地址。 很不幸，ActionScript3不支持抽象类（abstract classes），抽象类不能被实例化，并且只能扩展一次。所以，你不能在Flash中创建自己的抽象类。让我们先来了解一下Flash Player中内置的抽象类： DisplayObject InteractiveObject DisplayObjectContainer Graphics 对于抽象类来说，你不能使用new关键字来建立它们的实例。 ActionScript 代码: ?View Code ACTIONSCRIPTvar myObj:InteractiveObject = new InteractiveObject&#40;&#41;; // 错误 当然，你也不可以继承它们并试图建立子类的代码。 ActionScript 代码:]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/362.htm" title="抽象类-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798" target="_blank">ActionScript3 Tips and Tricks</a>系列阅读笔记之一，这里是<a href="http://www.kirupa.com/forum/showthread.php?p=1892533#post1892533" target="_blank">原文地址</a>。</p>
<p>很不幸，ActionScript3不支持抽象类（abstract classes），抽象类不能被实例化，并且只能扩展一次。所以，你不能在Flash中创建自己的抽象类。让我们先来了解一下Flash Player中内置的抽象类：</p>
<ul>
<li><a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/DisplayObject.html" target="_blank">DisplayObject </a></li>
<li><a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/InteractiveObject.html" target="_blank">InteractiveObject </a></li>
<li><a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/DisplayObjectContainer.html" target="_blank">DisplayObjectContainer </a></li>
<li><a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/Graphics.html">Graphics</a></li>
</ul>
<p>对于抽象类来说，你不能使用new关键字来建立它们的实例。</p>
<p>ActionScript 代码:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p362code44'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p36244"><td class="code" id="p362code44"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> myObj:InteractiveObject = <span style="color: #000000; font-weight: bold;">new</span> InteractiveObject<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// 错误</span></pre></td></tr></table></div>

<p>当然，你也不可以继承它们并试图建立子类的代码。</p>
<p>ActionScript 代码:</p>
<pre lang="ActionScript"
package {
import flash.display.DisplayObject;
public class MyDisplay extends DisplayObject{
public function MyDisplay (){
// 错误
}
}
}
</pre>
<p>不过，你可以继承内部抽象类的子类。例如，如果需要继承DisplayObject，你可以继承Shape类。Shape就是DisplayObject的子类。</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/362.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新的变量类型-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/313.htm</link>
		<comments>http://zengrong.net/post/313.htm#comments</comments>
		<pubDate>Thu, 11 Jan 2007 15:56:02 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Language Elements-Behavior and Syntax]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=313</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/313.htm" title="新的变量类型-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一New Variable Types，这里是原文地址。 新的变量类型 ActionScript3支持更多的变量类型，基本的类型包括： 简单类型: * Boolean * int * null * Number * String * uint * undefined 合成类型: * Object * Array * Date * Error * Function * RegExp * XML * XMLList &#8230;<p class="read-more"><a href="http://zengrong.net/post/313.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/313.htm" title="新的变量类型-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798" target="_blank">ActionScript3 Tips and Tricks</a>系列阅读笔记之一<a href="http://www.kirupa.com/forum/showthread.php?p=1879470#post1879470" target="_blank">New Variable Types</a>，这里是<a href="http://www.kirupa.com/forum/showthread.php?p=1879470#post1879470" target="_blank">原文地址</a>。</p>
<p><strong>新的变量类型</strong></p>
<p>ActionScript3支持更多的变量类型，基本的类型包括：</p>
<p>简单类型:</p>
<p>* Boolean<br />
* int<br />
* null<br />
* Number<br />
* String<br />
* uint<br />
* undefined</p>
<p>合成类型:</p>
<p>* Object<br />
* Array<br />
* Date<br />
* Error<br />
* Function<br />
* RegExp<br />
* XML<br />
* XMLList</p>
<p>其他的类型涉及它们的类，例如：Matrix (flash.geom.Matrix), Shape (flash.display.Shape), URLRequest (flash.net.URLRequest)等等。</p>
<p>一些提示：<span id="more-313"></span></p>
<ul>
<li>Void类型在AS3中改为小写（是void，不再是Void）</li>
<li>用*来表示任意类型。例如：var anything:*;</li>
<li>XML类型与ActionScript1、2中的定义不同了，旧的XML类型现在定义为XMLObject。XML目前基于E4X对象。</li>
<li>int和uint是两个新的简单数字类型，分别针对整数和非负整数（正整数和0）。它们多被用在需要十进制数值的地方（例如循环步进值）。int类型可以用在大多数需要数字的地方，而uint类型只能用在诸如颜色值这类必要的地方。</li>
</ul>
<p>==================================================</p>
<p><strong>New Variable Types</strong></p>
<p>ActionScript 3 supports a wide range of variable types including some which were not present in previous versions of ActionScript. Basic types for AS3 include:</p>
<p>Primitive:</p>
<p>* Boolean<br />
* int<br />
* null<br />
* Number<br />
* String<br />
* uint<br />
* undefined</p>
<p>Complex:</p>
<p>* Object<br />
* Array<br />
* Date<br />
* Error<br />
* Function<br />
* RegExp<br />
* XML<br />
* XMLList</p>
<p>Additional types also exist that relate to their classes; ex: Matrix (flash.geom.Matrix), Shape (flash.display.Shape), URLRequest (flash.net.URLRequest), etc.</p>
<p>Things to note:</p>
<p>* The special Void type has changed in AS3 to be lowercase (void not Void)<br />
* There&#8217;s a new * type that is used to represent any data type. This should be used instead of ommitting typing information for your variables.<br />
ActionScript Code:<br />
var anything:*;<br />
* The XML type is not the same as the XML type in ActionScript 1 and 2. The old XML type (object) is now defined as XMLObject. XML now references the new E4X-based XML object.<br />
* int and uint are new primitive number data types for integer (numbers without decimal values) and unsigned integer (numbers without decimal values that also cannot be negative). These can be useful for values which are not supposed to have decimal values such as loop iterators. The int data type will provide a small perfomance boost when used over Number in most cases, but uint should only be used when necessary such as with color values.</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/313.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>图形对象和绘图API-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/312.htm</link>
		<comments>http://zengrong.net/post/312.htm#comments</comments>
		<pubDate>Wed, 10 Jan 2007 15:30:09 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Display Objects]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=312</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/312.htm" title="图形对象和绘图API-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一Graphics Object and the Drawing API，这里是原文地址。 图形对象和绘图API 就像ActionScript1和2一样，ActionScript3也有绘图API，你可以使用它们在影片剪辑和sprite对象中绘制矢量线条或图形。使用ActionScript3，绘图API总是在显示对象（例如影片剪辑、sprite等等）的graphics属性（flash.display.Graphics）中使用。graphics属性表现为绘图API绘制出的一个动态层。就像以前一样，这个动态层位于绘图目标对象的所有的子对象之下。在ActionScript3中，提供了一些新的方法让你绘制矩形、圆形以及圆角矩形变得更加容易。它们包括： drawCircle(x:Number, y:Number, radius:Number):void drawEllipse(x:Number, y:Number, width:Number, height:Number):void drawRect(x:Number, y:Number, width:Number, height:Number):void drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number):void 范例： ?View Code ACTIONSCRIPT// draw a blue rounded rectangle: var square:Sprite = &#8230;<p class="read-more"><a href="http://zengrong.net/post/312.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/312.htm" title="图形对象和绘图API-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798" target="_blank">ActionScript3 Tips and Tricks</a>系列阅读笔记之一<a href="http://www.kirupa.com/forum/showthread.php?p=1878656#post1878656" target="_blank">Graphics Object and the Drawing API</a>，这里是<a href="http://www.kirupa.com/forum/showthread.php?p=1878656#post1878656" target="_blank">原文地址</a>。</p>
<p><strong>图形对象和绘图API</strong></p>
<p>就像ActionScript1和2一样，ActionScript3也有绘图API，你可以使用它们在影片剪辑和sprite对象中绘制矢量线条或图形。使用ActionScript3，绘图API总是在显示对象（例如影片剪辑、sprite等等）的graphics属性（<a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/Graphics.html" target="_blank">flash.display.Graphics</a>）中使用。graphics属性表现为绘图API绘制出的一个动态层。就像以前一样，这个动态层位于绘图目标对象的所有的子对象之下。在ActionScript3中，提供了一些新的方法让你绘制矩形、圆形以及圆角矩形变得更加容易。它们包括：<span id="more-312"></span></p>
<ul>
<li>drawCircle(x:Number, y:Number, radius:Number):void</li>
<li>drawEllipse(x:Number, y:Number, width:Number, height:Number):void</li>
<li>drawRect(x:Number, y:Number, width:Number, height:Number):void</li>
<li>drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number):void</li>
</ul>
<p>范例：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p312code46'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p31246"><td class="code" id="p312code46"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// draw a blue rounded rectangle:</span>
<span style="color: #000000; font-weight: bold;">var</span> square:Sprite = <span style="color: #000000; font-weight: bold;">new</span> Sprite<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
square.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">beginFill</span><span style="color: #66cc66;">&#40;</span>0xFF<span style="color: #66cc66;">&#41;</span>;
square.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">drawRoundRect</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">100</span>, <span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">10</span>, <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>;
square.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">endFill</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
addChild<span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>===========================================================</p>
<p>原文如下：</p>
<p><strong> Graphics Object and the Drawing API</strong></p>
<p>Like ActionScript 1 and 2, ActionScript 3 also has a drawing API that allows you to draw vector lines and shapes dynamically in movie clips and sprites. With ActionScript 3, however, the drawing API is now used off of an object within display objects (movie clips, sprites, etc.) defined as graphics (<a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/Graphics.html" target="_blank">flash.display.Graphics</a>). This graphics property represents the dynamic drawing layer where drawing API drawings exist. Like before, it is placed below all children of the target object. Also, in ActionScript 3, you have new methods that help you more easily create rectangles, circles, and even rounded rectangles. These include:</p>
<p>* drawCircle(x:Number, y:Number, radius:Number):void<br />
* drawEllipse(x:Number, y:Number, width:Number, height:Number):void<br />
* drawRect(x:Number, y:Number, width:Number, height:Number):void<br />
* drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number):void</p>
<p>Example:<br />
ActionScript Code:（同上）</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/312.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>类的活动范围已经绑定到类方法-ActionScript3 Tips and Tricks</title>
		<link>http://zengrong.net/post/311.htm</link>
		<comments>http://zengrong.net/post/311.htm#comments</comments>
		<pubDate>Tue, 09 Jan 2007 15:20:07 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Language Elements-Behavior and Syntax]]></category>
		<category><![CDATA[TipsAndTricks]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=311</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/311.htm" title="类的活动范围已经绑定到类方法-ActionScript3 Tips and Tricks"></a>本文是ActionScript3 Tips and Tricks系列阅读笔记之一Class scope is now bound to class methods，这里是原文地址。 类的活动范围已经绑定到类方法(Class scope is now bound to class methods) （也不知标题这么翻译是否正确，应该大致是这个意思把，简单的说，这个技巧就是讲解this的引用的问题。ActionScript2中，如果位于某个对象的事件处理函数中，this就指向发出这个事件的对象，而在ActionScript3中，this始终都指向类） ActionScript3是完全基于类的。当你创建类时，你创建的变量和函数（方法）对这个类以及实例起作用。与ActionScript2不同，方法在被调用的时候保留它所属的类的活动范围，即使这个方法被指派给另一个对象并从另一个对象调用，或者使用Function.call和Function.apply也是如此。范例如下： （上面一段翻译很可能不准，还是看代码和原文更好） ?View Code ACTIONSCRIPTpackage &#123; import flash.display.Sprite; &#160; public class ClassScope extends Sprite &#123; public function ClassScope&#40;&#41; &#123; traceThis&#40;&#41;; &#8230;<p class="read-more"><a href="http://zengrong.net/post/311.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/311.htm" title="类的活动范围已经绑定到类方法-ActionScript3 Tips and Tricks"></a><p>本文是<a href="http://www.kirupa.com/forum/showthread.php?t=223798" target="_blank">ActionScript3 Tips and Tricks</a>系列阅读笔记之一<a href="http://www.kirupa.com/forum/showthread.php?p=1877318#post1877318" target="_blank">Class scope is now bound to class methods</a>，这里是<a href="http://www.kirupa.com/forum/showthread.php?p=1877318#post1877318" target="_blank">原文地址</a>。</p>
<p><strong>类的活动范围已经绑定到类方法(Class scope is now bound to class methods)</strong><br />
（也不知标题这么翻译是否正确，应该大致是这个意思把，简单的说，这个技巧就是讲解this的引用的问题。ActionScript2中，如果位于某个对象的事件处理函数中，this就指向发出这个事件的对象，而在ActionScript3中，this始终都指向类）</p>
<p>ActionScript3是完全基于类的。当你创建类时，你创建的变量和函数（方法）对这个类以及实例起作用。与ActionScript2不同，方法在被调用的时候保留它所属的类的活动范围，即使这个方法被指派给另一个对象并从另一个对象调用，或者使用Function.call和Function.apply也是如此。范例如下：<span id="more-311"></span><br />
（上面一段翻译很可能不准，还是看代码和原文更好）</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p311code48'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p31148"><td class="code" id="p311code48"><pre class="actionscript" style="font-family:monospace;">package <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ClassScope <span style="color: #0066CC;">extends</span> Sprite <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ClassScope<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
traceThis<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// &quot;Class Instance&quot;</span>
<span style="color: #000000; font-weight: bold;">var</span> obj:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
obj.<span style="color: #006600;">traceThis</span> = traceThis;
obj.<span style="color: #006600;">traceThis</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// &quot;Class Instance&quot;</span>
traceThis.<span style="color: #0066CC;">call</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Sprite<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// &quot;Class Instance&quot;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> override <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&quot;Class Instance&quot;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> traceThis<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>==================================================</p>
<p>原文如下：<br />
<strong>Class scope is now bound to class methods</strong></p>
<p>ActionScript 3 is entirely class-based. When you create classes, you create variables and functions (methods) which relate to and work with that class and instances of that class. Unlike ActionScript 2, methods in ActionScript 3 now retain their class scope when called, even if assigned to another object and called from that object, or if used with Function.call and Function.apply. Example:</p>
<p>ActionScript Code:(同上)</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/311.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

