<?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>FoxLing - 前端开发 &#187; AS3</title>
	<atom:link href="http://foxling.org/tag/as3/feed/" rel="self" type="application/rss+xml" />
	<link>http://foxling.org</link>
	<description>不积跬步 无以至千里</description>
	<lastBuildDate>Sat, 19 Nov 2011 16:29:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Flash通过FlashVars接收外部参数</title>
		<link>http://foxling.org/as-flex-air/flash-flashvars/</link>
		<comments>http://foxling.org/as-flex-air/flash-flashvars/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 15:32:42 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[FlashVars]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=416</guid>
		<description><![CDATA[... &#60;param name="FlashVars" value="tag=as3"/&#62; &#60;embed flashvars="tag=as3"/&#62; ... AS项目，或者Flash里： stage.loaderInfo.parameters.tag Flex3项目： Application.application.parameters.tag Flex4项目： FlexGlobals.topLevelApplication.parameters.tag 备忘.]]></description>
			<content:encoded><![CDATA[<pre>
...
&lt;param name="FlashVars" value="tag=as3"/&gt;
&lt;embed flashvars="tag=as3"/&gt;
...
</pre>
<p>AS项目，或者Flash里：</p>
<pre>
stage.loaderInfo.parameters.tag
</pre>
<p>Flex3项目：</p>
<pre>
Application.application.parameters.tag
</pre>
<p>Flex4项目：</p>
<pre>
FlexGlobals.topLevelApplication.parameters.tag
</pre>
<p>备忘.</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flash-flashvars/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>查看嘀咕照片的小玩意，暂且叫PictureLife吧。</title>
		<link>http://foxling.org/as-flex-air/picture-life/</link>
		<comments>http://foxling.org/as-flex-air/picture-life/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 12:45:21 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[嘀咕]]></category>
		<category><![CDATA[火兔]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=406</guid>
		<description><![CDATA[这两天突然好玩做了这么个玩意，输入嘀咕网的帐号即可浏览该用户的所有照片。 地址： http://app.foxling.cn/picturelife/ 功能： 鼠标拖动：左右滑动，向左滑动时，自动加载更多的照片（前提是还有更多照片&#8230;） 鼠标点击空白区域：缩放到合适大小 鼠标滚轮：放大，缩小显示区域 鼠标点击单张小图：加载该大图，并且放大到原始尺寸。 预览图： 后续： 仓促弄出来玩玩，有待继续改进。]]></description>
			<content:encoded><![CDATA[<p>这两天突然好玩做了这么个玩意，输入<a href="http://huotu.com" target="_blank">嘀咕网</a>的帐号即可浏览该用户的所有照片。</p>
<h3>地址：</h3>
<p><a href="http://app.foxling.cn/picturelife/" target="_blank">http://app.foxling.cn/picturelife/</a></p>
<h3>功能：</h3>
<ul>
<li>鼠标拖动：左右滑动，向左滑动时，自动加载更多的照片（前提是还有更多照片&#8230;）</li>
<li>鼠标点击空白区域：缩放到合适大小</li>
<li>鼠标滚轮：放大，缩小显示区域</li>
<li>鼠标点击单张小图：加载该大图，并且放大到原始尺寸。</li>
</ul>
<h3>预览图：</h3>
<div id="attachment_407" class="wp-caption aligncenter" style="width: 610px"><img src="http://foxling.org/wp-content/uploads/2009/09/picturelife-1.png" alt="预览图1" title="预览图1" width="600" height="288" class="size-full wp-image-407" /><p class="wp-caption-text">预览图1</p></div>
<div id="attachment_408" class="wp-caption aligncenter" style="width: 610px"><img src="http://foxling.org/wp-content/uploads/2009/09/picturelife-2.png" alt="预览图2" title="预览图2" width="600" height="293" class="size-full wp-image-408" /><p class="wp-caption-text">预览图2</p></div>
<h3>后续：</h3>
<p>仓促弄出来玩玩，有待继续改进。</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/picture-life/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>在Flex中继承ProgrammaticSkin类自定义皮肤</title>
		<link>http://foxling.org/as-flex-air/flex-custom-skins/</link>
		<comments>http://foxling.org/as-flex-air/flex-custom-skins/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 15:06:57 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[ClassReference]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ProgrammaticSkin]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=403</guid>
		<description><![CDATA[通过自定义类的方式创建皮肤，控制性更强，占用的内存更少。 ProgrammaticSkin类是外观元素的基类，它们通过编程方式来绘制自身。 关于ProgrammaticSkin类的更多信息，猛击这里： http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html 自定义类 package skins { import flash.display.GradientType; import flash.display.Graphics; import mx.skins.ProgrammaticSkin; public class CustomBG extends ProgrammaticSkin { public function CustomBG() { super(); } override protected function updateDisplayList(w:Number, h:Number):void { super.updateDisplayList(w, h); var g:Graphics = graphics; var fillColors:Array = [0x191919,0x262626,0x191919]; var fillAlphas:Array = [1.0,1.0,1.0]; var fillRatios:Array = [0,127,255] g.clear(); drawRoundRect(0, 0, w, h, [...]]]></description>
			<content:encoded><![CDATA[<p>通过自定义类的方式创建皮肤，控制性更强，占用的内存更少。<br />
ProgrammaticSkin类是外观元素的基类，它们通过编程方式来绘制自身。<br />
关于ProgrammaticSkin类的更多信息，猛击这里：<br />
<a href="http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html">http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html</a></p>
<h3>自定义类</h3>
<pre>
package skins
{
    import flash.display.GradientType;
    import flash.display.Graphics;

    import mx.skins.ProgrammaticSkin;

    public class CustomBG extends ProgrammaticSkin
    {

        public function CustomBG()
        {
            super();
        }

        override protected function updateDisplayList(w:Number, h:Number):void
        {
            super.updateDisplayList(w, h);

            var g:Graphics = graphics;
            var fillColors:Array = [0x191919,0x262626,0x191919];
            var fillAlphas:Array = [1.0,1.0,1.0];
            var fillRatios:Array = [0,127,255]

            g.clear();

            drawRoundRect(0, 0, w, h, 0, fillColors, fillAlphas,
                          horizontalGradientMatrix(0, 0, w, h), GradientType.LINEAR,fillRatios );
        }

        override public function get measuredWidth():Number
        {
            return 8;
        }

        override public function get measuredHeight():Number
        {
            return 8;
        }
    }

}
</pre>
<h3>在CSS中使用ClassReference调用自定义类</h3>
<p>.customBg<br />
{<br />
	backgroundSize: “100%”;<br />
	backgroundImage: ClassReference(“skins.CustomBG”);<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flex-custom-skins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flex 中可能导致内存泄露的地方</title>
		<link>http://foxling.org/as-flex-air/flex-memory-leak/</link>
		<comments>http://foxling.org/as-flex-air/flex-memory-leak/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 17:49:11 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Memory Leak]]></category>
		<category><![CDATA[内存泄露]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=392</guid>
		<description><![CDATA[收集了不少的会导致内存泄露的情况： 事件监听： 对父级对象加了监听函数，会造成内存泄露，例： override protected function mouseDownHandler(…):void { systemManager.addEventListener(“mouseUp”, mouseUpHandler); ...... } 解决： 在销毁对象的时候，remove掉这些监听，虽然弱引用也可以避免这些问题，但自己掌控感觉更好。 但以下几种情况不会造成内存泄露： 弱引用：someObject.addEventListener(MouseClick.CLICK, handlerFunction, false, 0, true); 对自己的引用：this.addEventListener(MouseClick.CLICK, handlerFunction); 子对象的引用： private var childObject:UIComponent = new UIComponent; addChild(childObject); childObject.addEventListener(MouseEvent.CLICK, clickHandler); 总之&#8230;有addEventListener，就removeEventListener一下吧，要为自己做的事负责~哈哈 清除引用 remove掉子对象后并不会删除该对象，他还保留在内存中，应该将引用设置为null removeChildren(obj); obj = null; 静态成员 Class （或MXML）中有： public static var _eventService : MyService=new MyService(); 解决：在dispose时，需要设置： _eventService =null; module (未解决) moduleLoader [...]]]></description>
			<content:encoded><![CDATA[<p>收集了不少的会导致内存泄露的情况：</p>
<h3>事件监听：</h3>
<p>对父级对象加了监听函数，会造成内存泄露，例：</p>
<pre>
override protected function mouseDownHandler(…):void {
systemManager.addEventListener(“mouseUp”, mouseUpHandler);
......
}
</pre>
<p>解决：<br />
在销毁对象的时候，remove掉这些监听，虽然弱引用也可以避免这些问题，但自己掌控感觉更好。</p>
<p>但以下几种情况不会造成内存泄露：</p>
<ul>
<li>弱引用：<code>someObject.addEventListener(MouseClick.CLICK, handlerFunction, false, 0, true);</code></li>
<li>对自己的引用：<code>this.addEventListener(MouseClick.CLICK, handlerFunction);</code></li>
<li>子对象的引用：
<pre>
private var childObject:UIComponent = new UIComponent;
addChild(childObject);
childObject.addEventListener(MouseEvent.CLICK, clickHandler);
</pre>
</li>
</ul>
<p>总之&#8230;有addEventListener，就removeEventListener一下吧，要为自己做的事负责~哈哈</p>
<h3>清除引用</h3>
<p>remove掉子对象后并不会删除该对象，他还保留在内存中，应该将引用设置为null</p>
<pre>
removeChildren(obj);
obj = null;
</pre>
<p><span id="more-392"></span></p>
<h3>静态成员</h3>
<p>Class （或MXML）中有：</p>
<pre>public static var _eventService : MyService=new MyService();</pre>
<p>解决：在dispose时，需要设置：</p>
<pre>_eventService =null;</pre>
<h3>module (未解决)</h3>
<p>moduleLoader unloadModule后<br />
ModuleInfo 并不会被GC.<br />
<a href="http://www.nutrixinteractive.com/blog/?p=132">Garbage Collection in a MultiCore Modular Pipes Application</a><br />
这篇文章介绍了一种GC策略，感觉对于ModuleInfo 的GC无效。<br />
(未尝试、未遇到)</p>
<h3>CSS样式</h3>
<p>module 中如果使用了shell的CSS定义或是&lt;mx:Style&gt; 这样的定义，那么这个module将不能GC.<br />
弹出的窗口应该是同样的结果.<br />
解决方法，使用动态CSS文件<br />
module init中</p>
<pre>StyleManager.loadStyleDeclarations("css/myStyle.swf");</pre>
<p>module dispose中</p>
<pre>StyleManager.unloadStyleDeclarations("css/myStyle.swf");</pre>
<h3>TextInput/Textarea(未解决)</h3>
<p>如果module中有window使用了TextInput/Textarea控件，不点击没有问题，只要点上去，那么很遗憾了，module和所在窗体将不能被GC.<br />
这个BUG非常严重，目前还没有解决方法。<br />
<a href="http://bugs.adobe.com/jira/browse/SDK-14781">memory leak when using TextInput and TextArea when click the keyboard</a> 这里面附加的解决方法无效。<br />
通过profiler分析，应该和Focusmanager有关，只有一点击就不会释放。</p>
<h3>CursorManager.setCursor</h3>
<p>使用了</p>
<pre>cursorID = CursorManager.setCursor(iconClosed);</pre>
<p>dispose时要</p>
<pre>CursorManager.removeCursor(cursorID); </pre>
<h3>Bitmap</h3>
<p>如果使用Bitmap，结束时需要调用其dispose方法，否则内存消耗巨大。<br />
另外，BitmapData是可以共享使用的，多个Bitmap可以使用同一BitmapData，节省不少内存。</p>
<pre>
var bmp:Bitmap  =new Bitmap();

........

if (bmp.bitmapData!=null) {
    bmp.bitmapData.dispose();
}
</pre>
<h3>Image</h3>
<p>包含了Image对象时，在removeChildren时会造成不能释放（测试多次，结果不一，建议还是做如下处理）。<br />
解决：</p>
<pre>
img.source = null;
this.removeChild(img);
img = null;
</pre>
<h3>Loader、SWFLoader、声音、视频、Effect等&#8230;</h3>
<ul>
<li>如果是加载SWF文件，先停止播放。</li>
<li>停止声音的播放</li>
<li>停止正在播放的影片剪辑(Movieclip)</li>
<li>关闭任何连接的网络对象，例如Loader正在加载，要先close。</li>
<li>取消对摄像头或者麦克风的引用</li>
<li>取消事件监听器</li>
<li>停止任何正在运行的定时器，clearInterval()</li>
<li>停止任何Timer对象，timer.stop()</li>
<li>停止正在播放的效果(Effect)</li>
</ul>
<h3>其他</h3>
<p>binding也疑似有memory leak 问题。</p>
<p>引用以及内存泄露相关博文和资料：<br />
<a href="http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html">http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html</a><br />
<a href="http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/">http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/</a><br />
<a href="http://www.cnblogs.com/janyou/archive/2008/11/25/1340753.html">http://www.cnblogs.com/janyou/archive/2008/11/25/1340753.html</a><br />
<a href="http://www.dreamingwell.com/articles/archives/2008/05/understanding_m.php">http://www.dreamingwell.com/articles/archives/2008/05/understanding_m.php</a></p>
<p>总结：由于之前Flash一直是在网页上使用，一般网页都是看完就关掉的，估计Adobe在内存回收这块也没有下太大的功夫，现在AIR的出现使得内存管理也相当重要了，并且，AIR本身对内存的消耗就相当大，一个没有任何内容的初始创建的AIR程序，就得占掉10-20M+的内存&#8230;AIR还需改善.</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/flex-memory-leak/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AIR日志记录方法</title>
		<link>http://foxling.org/as-flex-air/log-air/</link>
		<comments>http://foxling.org/as-flex-air/log-air/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 14:52:27 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=387</guid>
		<description><![CDATA[public static function log(txt:String):void { var date:Date = new Date(); var fileName:String; fileName = "errlog-" + date.getFullYear().toString() + (date.getMonth()+1).toString() + date.getDate() + ".txt"; var file:File = File.applicationStorageDirectory.resolvePath(fileName); var fs:FileStream = new FileStream(); txt = "\n\n--------" + date.toString() + "----------\n" + txt fs.open(file,FileMode.APPEND); fs.writeUTFBytes(txt); fs.close(); } 废话不多说，直接看代码，将需要记录的日志，比如出错信息记录到程序数据文件夹，以日期命名，便于追踪信息。]]></description>
			<content:encoded><![CDATA[<pre>
public static function log(txt:String):void
{
    var date:Date = new Date();
    var fileName:String;

    fileName = "errlog-" + date.getFullYear().toString() + (date.getMonth()+1).toString() + date.getDate() + ".txt";

    var file:File = File.applicationStorageDirectory.resolvePath(fileName);
    var fs:FileStream = new FileStream();

    txt = "\n\n--------" + date.toString() + "----------\n" + txt

    fs.open(file,FileMode.APPEND);
    fs.writeUTFBytes(txt);
    fs.close();
}
</pre>
<p>废话不多说，直接看代码，将需要记录的日志，比如出错信息记录到程序数据文件夹，以日期命名，便于追踪信息。</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/log-air/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用SWFObject插入Flash在IE下导致stageWidth为0的解决方法</title>
		<link>http://foxling.org/as-flex-air/swfobject-bug-at-ie/</link>
		<comments>http://foxling.org/as-flex-air/swfobject-bug-at-ie/#comments</comments>
		<pubDate>Sat, 23 May 2009 18:20:07 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SWFObject]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=378</guid>
		<description><![CDATA[SWFObject SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源（*.swf文件）的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外，它能够避免您的 HTML、XHTML中出现object、embed等非标准标签，从而符合更加标准。 SWFObject在IE下的BUG 如果Flash里绘制的对象的宽高是自适应Flash的宽高的，那么，使用SWFObject来插入Flash在IE会导致一个问题，当这个Flash被缓存后，也就是第二次访问该页面时，在该Swf文件被加载时，获取到的stage.stageWidth和stage.stageHeight为0，绘制的对象也就看不到了。 在Flash里监听resize事件，找出解决方法 如下(如果加载较慢就先等等吧~)： swfobject.embedSWF("/examples/autosizeexample/autosizeexample.swf", "autosizeExample", "300", "300", "9.0.0", "/wp-content/res/expressInstall.swf"); 用IE的话，会看到5行，有两次resize事件，这也就导致了Flash在加载的时候绘制对象错误(宽和高为0)： 数字是stage.stageWidth和stage.stageHeight info resize 0 x 0 resize 300 x 300 如果用Firefox等浏览器，只输出两行文字，没有resize事件： info 300 x 300 AS里的解决方案 通过监听resize事件，当stage.stageWidth和stage.stageHeight大于0时再进行初始化 package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import flash.display.StageAlign; import flash.display.StageScaleMode; public class AutoSizeExample extends Sprite { private var txt:TextField; public function [...]]]></description>
			<content:encoded><![CDATA[<h3>SWFObject</h3>
<p><a href="http://code.google.com/p/swfobject/">SWFObject</a>是一个用于在HTML中方面插入Adobe Flash媒体资源（*.swf文件）的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外，它能够避免您的 HTML、XHTML中出现object、embed等非标准标签，从而符合更加标准。 </p>
<h3>SWFObject在IE下的BUG</h3>
<p>如果Flash里绘制的对象的宽高是自适应Flash的宽高的，那么，使用SWFObject来插入Flash在IE会导致一个问题，<strong>当这个Flash被缓存后，也就是第二次访问该页面时</strong>，在该Swf文件被加载时，获取到的stage.stageWidth和stage.stageHeight为0，绘制的对象也就看不到了。</p>
<p><span id="more-378"></span></p>
<h3>在Flash里监听resize事件，找出解决方法</h3>
<p>如下(如果加载较慢就先等等吧~)：</p>
<div style="padding:10px;border:1px dashed #CCC;">
<div id="autosizeExample"><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></div>
<p><script type="text/javascript">swfobject.embedSWF("/examples/autosizeexample/autosizeexample.swf", "autosizeExample", "300", "300", "9.0.0", "/wp-content/res/expressInstall.swf");</script>
</div>
<p>用IE的话，会看到5行，有两次resize事件，这也就导致了Flash在加载的时候绘制对象错误(宽和高为0)：<br />
数字是stage.stageWidth和stage.stageHeight</p>
<blockquote><p>
info<br />
resize<br />
0 x 0<br />
resize<br />
300 x 300</p></blockquote>
<p>如果用Firefox等浏览器，只输出两行文字，没有resize事件：</p>
<blockquote><p>info<br />
300 x 300</p></blockquote>
<h3>AS里的解决方案</h3>
<p>通过监听resize事件，当stage.stageWidth和stage.stageHeight大于0时再进行初始化</p>
<pre>
package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;

    public class AutoSizeExample extends Sprite
    {
        private var txt:TextField;
        public function AutoSizeExample()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            txt = new TextField();
            txt.multiline = true;
            txt.wordWrap = true;
            txt.text = "info\n";
            addChild(txt);

            if (stage.stageWidth>0 &#038;&#038; stage.stageHeight>0){
                createChild();
            }else{
                stage.addEventListener(Event.RESIZE,onResize);
            }
        }

        private function onResize(e:Event):void
        {
            if (stage.stageWidth>0 &#038;&#038; stage.stageHeight>0){
                stage.removeEventListener(Event.RESIZE,onResize); //删除事件监听
                createChild();
            }
            //否则继续监听事件，直到stage.stageWidth和stage.stageHeight大于0时才初始化
        }

        private function createChild():void
        {
            //进行初始化操作，创建各对象
            //.......................
            var w:Number = stage.stageWidth;
            var h:Number = stage.stageHeight;

            txt.appendText(w + " x " + h + "\n");
        }

    }
}
</pre>
<h3>SWFObject.js里的解决方案</h3>
<p>在swfobject.js里找到函数function createSWF(attObj, parObj, id)<br />
里面针对winIE的处理方法是：<code>el.outerHTML = '&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '&gt;' + par + '&lt;/object&gt;';</code><br />
看了一下Adobe自己的AC_OETags.js，他是用document.write方法直接写入，没有这个问题；<br />
直接写静态html(object)没有这种问题；<br />
直接访问<a href="/examples/autosizeexample/autosizeexample.swf">这个flash的地址</a>，也没有这种问题。<br />
至于el.outerHTML的方式为什么会导致这种问题，还没有深究，暂时还不太清楚是什么原因导致的~</p>
<p>待续~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/swfobject-bug-at-ie/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>读书笔记：ActionScript3设计模式中的单件模式</title>
		<link>http://foxling.org/as-flex-air/actionscript-3-singletion/</link>
		<comments>http://foxling.org/as-flex-air/actionscript-3-singletion/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 16:43:14 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=371</guid>
		<description><![CDATA[单件模式用于限制类的实例化次数，使你在系统的任何位置都能访问到同一个实例；达到节省资源，管理方便的效果。 单件模式的应用 从一个XML文件加载程序的基本配置信息，只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可，并且，在程序的整个运行阶段都只需要一个实例，并不需要建多个实例或者读取多次XML。 例如：用一个xml文件保存AIR应用程序配置信息，里面包含窗口起始位置，窗口的宽高。 &#60;setting&#62; &#60;window x="100" y="100" width="300" height="400"&#62; &#60;/setting&#62; 单件模式的实现 package cn.foxling.test { public class Setting { private static var _instance:Setting; public function Setting(enforcer:SingletionEnforcer) { } public static function getInstance():Setting { if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer()); return Setting._instance; } } } class SingletionEnforcer {} 单件模式必须具体的3个元素 私有静态属性，用于存储唯一实例 private static var [...]]]></description>
			<content:encoded><![CDATA[<p>单件模式用于限制类的实例化次数，使你在系统的任何位置都能访问到同一个实例；达到节省资源，管理方便的效果。</p>
<h3>单件模式的应用</h3>
<p>从一个XML文件加载程序的基本配置信息，只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可，并且，在程序的整个运行阶段都只需要一个实例，并不需要建多个实例或者读取多次XML。<br />
例如：用一个xml文件保存AIR应用程序配置信息，里面包含窗口起始位置，窗口的宽高。</p>
<pre>
&lt;setting&gt;
	&lt;window x="100" y="100" width="300" height="400"&gt;
&lt;/setting&gt;
</pre>
<h3>单件模式的实现</h3>
<pre>
package cn.foxling.test
{
	public class Setting
	{
		private static var _instance:Setting;

		public function Setting(enforcer:SingletionEnforcer)
		{
		}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

	}
}

class SingletionEnforcer {}
</pre>
<p><span id="more-371"></span></p>
<h3>单件模式必须具体的3个元素</h3>
<ul>
<li>私有静态属性，用于存储唯一实例<br />
<code>private static var _instance:Setting;</code></li>
<li>公共静态方法，用于获取这个唯一实例，并且，在第一次执行时，创建这个唯一的实例<br />
<code>public static function getInstance():Setting</code></li>
<li>为了限制类的多次实例化，通常使用私有构造函数，由于在AS3里面不支持私有构造函数，于是通过在一个文件中添加多个类的办法创建一个“私有”类(SingletionEnforcer类只能被该文件中的主类所访问)。</li>
</ul>
<h3>继续实现这个Setting类的功能</h3>
<p>需要从XML文件加载程序的基本配置信息，给这个Setting类增加一些功能，比如读取配置，保存配置。<br />
具体代码没有一一实现，把结构写了出来~</p>
<pre>
package cn.foxling.test
{
	import flash.events.EventDispatcher;

	public class Setting extends EventDispatcher
	{
		private static var _instance:Setting;

		private var _x:Number;
		private var _y:Number;
		private var _width:Number;
		private var _height:Number;

		public function Setting(enforcer:SingletionEnforcer)
		{}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

		public function loadXML():void
		{
			//通过URLLoader读取xml信息
			//派发加载成功的事件
		}

		public function save():void
		{
			//将_x,_y,_width,_height格式化成xml
			//并写入本地文件
			//派发保存成功的事件
		}

		//================================
		//为_x,_y,_width,_height写setter、getter方法
		//避免对_x,_y,_width,_height设置非法值
		//================================

	}
}

class SingletionEnforcer {}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/actionscript-3-singletion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>魔嘀新版本(更新1.1版本)</title>
		<link>http://foxling.org/as-flex-air/modi-new/</link>
		<comments>http://foxling.org/as-flex-air/modi-new/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 05:03:26 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[Air应用]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[魔嘀]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=354</guid>
		<description><![CDATA[经过一段时间的辛苦奋战，魔嘀终于发布1.0了，所有的代码全部重写，增加了一些常用的功能，并请@ZK设计了全新的UI，现在的魔嘀帅多了。 魔嘀下载页面：http://app.foxling.cn/modi/ 但现在还有许多细节都需要优化，时间有限，只能一步一步地更新了~ 如果发现了什么BUG，或有什么好的建议，在这里留言吧，不一定一一回复，但我都会整理记录起来的，并且在后面的版本里陆续实现，欢迎在嘀咕网跟随我，一起交流。 AIR应用的通病，内存消耗较大，所以，建议平时不用时最小化吧，最小化后内存占用会比较少，8M-12M左右，我也在不断地优化代码，寻找BUG，使魔嘀的内存占用量能维持在一个比较稳定的水平。 版本更新 1.0 (2009-04-10)]]></description>
			<content:encoded><![CDATA[<p><a href="http://app.foxling.cn/modi/"><img src="http://foxling.cn/wp-content/uploads/2009/04/modilogo.png" alt="魔嘀Logo" title="魔嘀Logo" width="316" height="128" class="alignright size-full wp-image-355" /></a><br />
经过一段时间的辛苦奋战，魔嘀终于发布1.0了，所有的代码全部重写，增加了一些常用的功能，并请<a href="http://digu.com/tuotuo1020" target="_blank">@ZK</a>设计了全新的UI，现在的魔嘀帅多了。<br />
魔嘀下载页面：<a href="http://app.foxling.cn/modi/" target="_blank">http://app.foxling.cn/modi/</a><br />
但现在还有许多细节都需要优化，时间有限，只能一步一步地更新了~<br />
如果发现了什么BUG，或有什么好的建议，在这里留言吧，不一定一一回复，但我都会整理记录起来的，并且在后面的版本里陆续实现，欢迎在嘀咕网<a href="http://digu.com/foxling" target="_blank">跟随我</a>，一起交流。<br />
AIR应用的通病，内存消耗较大，所以，建议平时不用时最小化吧，最小化后内存占用会比较少，8M-12M左右，我也在不断地优化代码，寻找BUG，使魔嘀的内存占用量能维持在一个比较稳定的水平。</p>
<p><img src="http://foxling.cn/wp-content/uploads/2009/04/modi.png" alt="魔嘀新界面" title="魔嘀新界面" width="429" height="473" class="aligncenter size-full wp-image-357" /></p>
<h3>版本更新</h3>
<ul>
<li>1.0 (2009-04-10)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/modi-new/feed/</wfw:commentRss>
		<slash:comments>97</slash:comments>
		</item>
		<item>
		<title>用Flash按钮解决跨浏览器使用剪贴板的复制功能</title>
		<link>http://foxling.org/as-flex-air/as3-button-setclipboard/</link>
		<comments>http://foxling.org/as-flex-air/as3-button-setclipboard/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 14:19:34 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[剪贴板]]></category>
		<category><![CDATA[复制粘贴]]></category>

		<guid isPermaLink="false">http://wp.foxling.cn/as-flex-air/as3-button-setclipboard/</guid>
		<description><![CDATA[以前有一个比较完美解决网页上复制按钮的方法，是通过JS调用SWF文件，让SWF文件做为一个中介来完成复制的功能（请看跨浏览器使用剪贴板），但最Adobe 发布了 Flash Player 10，一切就变了~，这个版本的 Flash Player 引入了不少新的安全特性，其中包括了对于一些敏感操作需要用户介入的内容。 新的 Flash Player 10 中，需要上载或下载数据、操作系统剪贴板的操作等都需要用户参与，也就是说要实现类似的&#8220;复制&#8221;功能，必须要让用户点击指定的按钮或设置快捷键才可以解决。这也就意味着之前可以自动操作剪贴板的 Flash 脚本都已失效了。于是乎，开心网啊，校内啊，他们的复制按钮都失效啦，提示复制成功，粘贴后却还是之前的内容。 像Google相册、YouTube的链接都是点击选中，需要用户Ctrl+C自行复制的，这也是一种解决方案，好过开心网那种提示成功却没成功~~ 既然操作剪贴板的功能需要用户参与，那还是有解决方案的，做一个Flash的按钮让用户点击复制~~~ 演示如下： 代码： &#60;embed width=&#34;62&#34; height=&#34;24&#34; align=&#34;middle&#34; flashvars=&#34;txt=http://www.foxling.cn&#34; src=&#34;/examples/as3/Copy/Copy.swf&#34; quality=&#34;high&#34; wmode=&#34;transparent&#34; allowscriptaccess=&#34;sameDomain&#34; pluginspage=&#34;http://www.adobe.com/go/getflashplayer&#34; type=&#34;application/x-shockwave-flash&#34;&#62; 把需要复制的内容，通过FlashVars传给Flash，然后通过System类的setClipboard方法可以将需要的内容复制到剪贴板，flash.system.System是一个静态类，包含与发生在用户计算机上的某些操作相关的属性，如具有共享对象的操作、摄像头和麦克风的本地设置和剪贴板的使用。访问剪贴板的数据是被禁止的，所以，没有getClipboard的方法： private function copy(e:MouseEvent):void { var txt:String = LoaderInfo(root.loaderInfo).parameters.txt; System.setClipboard(txt); cr&#101;ateText(&#34;已复制&#34;); } 在AS3中，取得FlashVars参数的方法与以前不一样了，AS3用parameters 属性替换了ActionScript 1.0 和 2.0 提供 SWF 文件参数作为主时间轴的技术。 parameters是LoaderInfo对象的一个属性，对于加载的SWF等元素可以通过其Loader对像的contentLoaderInfo属性访问，由于SWF文件的主类的实例没有Loader对象，因此loaderInfo属性是访问SWF文件主类实例的LoaderInfo的唯一方法。 如果是Flex项目，可以通过Application.application.parameters.varname来访问FlashVars里的varname参数。 全部代码如下： package { [...]]]></description>
			<content:encoded><![CDATA[<p>以前有一个比较完美解决网页上复制按钮的方法，是通过JS调用SWF文件，让SWF文件做为一个中介来完成复制的功能（请看<a target="_blank" href="http://realazy.org/blog/2008/09/01/using-clipboard-crossbrowsers/">跨浏览器使用剪贴板</a>），但最Adobe 发布了 Flash Player 10，一切就变了~，这个版本的 Flash Player 引入了不少新的安全特性，其中包括了对于一些敏感操作需要用户介入的内容。</p>
<p>新的 Flash Player 10 中，需要上载或下载数据、操作系统剪贴板的操作等都需要用户参与，也就是说要实现类似的&ldquo;复制&rdquo;功能，必须要让用户点击指定的按钮或设置快捷键才可以解决。这也就意味着之前可以自动操作剪贴板的 Flash 脚本都已失效了。于是乎，开心网啊，校内啊，他们的复制按钮都失效啦，提示复制成功，粘贴后却还是之前的内容。</p>
<p>像Google相册、YouTube的链接都是点击选中，需要用户Ctrl+C自行复制的，这也是一种解决方案，好过开心网那种提示成功却没成功~~</p>
<p>既然操作剪贴板的功能需要用户参与，那还是有解决方案的，做一个Flash的按钮让用户点击复制~~~</p>
<p><span id="more-83"></span></p>
<p>演示如下：</p>
<p style="text-align: center;"><embed width="62" height="24" align="middle" flashvars="txt=http://www.foxling.cn" src="/examples/as3/Copy/Copy.swf" quality="high" wmode="transparent" allowscriptaccess="sameDomain" pluginspage="http://www.adobe.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></p>
<p>代码：</p>
<pre>
&lt;embed width=&quot;62&quot; height=&quot;24&quot; align=&quot;middle&quot;
flashvars=&quot;txt=http://www.foxling.cn&quot;
src=&quot;/examples/as3/Copy/Copy.swf&quot;
quality=&quot;high&quot; wmode=&quot;transparent&quot;
allowscriptaccess=&quot;sameDomain&quot;
pluginspage=&quot;http://www.adobe.com/go/getflashplayer&quot;
type=&quot;application/x-shockwave-flash&quot;&gt;
</pre>
<p>把需要复制的内容，通过FlashVars传给Flash，然后通过System类的setClipboard方法可以将需要的内容复制到剪贴板，<a target="_blank" href="http://livedocs.adobe.com/flex/3_cn/langref/flash/system/System.html">flash.system.System</a>是一个静态类，包含与发生在用户计算机上的某些操作相关的属性，如具有共享对象的操作、摄像头和麦克风的本地设置和剪贴板的使用。访问剪贴板的数据是被禁止的，所以，没有getClipboard的方法：</p>
<pre>
private function copy(e:MouseEvent):void
{
    var txt:String = LoaderInfo(root.loaderInfo).parameters.txt;
    System.setClipboard(txt);
    cr&#101;ateText(&quot;已复制&quot;);
}
</pre>
<p>在AS3中，取得FlashVars参数的方法与以前不一样了，AS3用parameters 属性替换了ActionScript 1.0 和 2.0 提供 SWF 文件参数作为主时间轴的技术。</p>
<p><code>parameters</code>是<code>LoaderInfo</code>对象的一个属性，对于加载的SWF等元素可以通过其<code>Loader</code>对像的<code>contentLoaderInfo</code>属性访问，由于SWF文件的主类的实例没有<code>Loader</code>对象，因此<code>loaderInfo</code>属性是访问SWF文件主类实例的<code>LoaderInfo</code>的唯一方法。</p>
<p>如果是Flex项目，可以通过<code>Application.application.parameters.varname</code>来访问FlashVars里的varname参数。</p>
<p>全部代码如下：</p>
<pre>
package {
	import flash.display.GradientType;
	import flash.display.LineScaleMode;
	import flash.display.LoaderInfo;
	import flash.display.Shape;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.system.System;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;

	[SWF(width=&quot;62&quot;, height=&quot;24&quot;)]
	public class Copy extends Sprite
	{
		private var copyBtn:Sprite = new Sprite();
		private var btnText:TextField = new TextField();
		private const BTNWIDTH:Number = 60;
		private const BTNHEIGHT:Number = 22;

		public function Copy()
		{
			addChild(cr&#101;ateButton());
		}

		private function cr&#101;ateText(txt:String):void
		{
			var txtFormat:TextFormat = new TextFormat();
			txtFormat.align = TextFormatAlign.CENTER;
			btnText.text = txt;
			btnText.setTextFormat(txtFormat);
			btnText.width = BTNWIDTH;
			btnText.mouseEnabled = false;
			btnText.y = 2;
		}

		private function cr&#101;ateButton():Sprite
		{
			cr&#101;ateText(&quot;复制&quot;);

			var b:SimpleButton = new SimpleButton();
			b.upState = up();
			b.overState = over();
			b.downState = down();
			b.hitTestState = b.upState;
			b.addEventListener(MouseEvent.CLICK,copy);

			copyBtn.addChild(b);
			copyBtn.addChild(btnText);

			return copyBtn;
		}

		private function copy(e:MouseEvent):void
		{
			var txt:String = LoaderInfo(root.loaderInfo).parameters.txt;
			System.setClipboard(txt);
			cr&#101;ateText(&quot;已复制&quot;);
		}

		private function up():Shape
		{
			return cr&#101;ateShape([0xFFFFFF,0xCCCCCC]);
		}

		private function over():Shape
		{
			return cr&#101;ateShape([0xFFFFFF,0xFFFFCC]);
		}

		private function down():Shape
		{
			return cr&#101;ateShape([0xFFFFCC,0xFFFFFF]);
		}

		private function cr&#101;ateShape(color:Array):Shape
		{
			var s:Shape = new Shape();
			var m:Matrix = new Matrix();
			m.cr&#101;ateGradientBox(BTNWIDTH,BTNHEIGHT,-30,0,0);
			with(s.graphics){
				lineStyle(1,0xCCCCCC,1,false,LineScaleMode.NONE);
				beginGradientFill(GradientType.LINEAR,color,[1,1],[0,255],m);
				drawRoundRect(0,0,BTNWIDTH,BTNHEIGHT,5);
				endFill();
			}
			return s;
		}
	}
}
</pre>
<p>嗯~这个版本的缺点就是，要是用户禁用了Flash~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/as3-button-setclipboard/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Flash里的9切片缩放，以及图片缩放类</title>
		<link>http://foxling.org/as-flex-air/scale9-flash-as3-and-scalebitmap-class/</link>
		<comments>http://foxling.org/as-flex-air/scale9-flash-as3-and-scalebitmap-class/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 16:26:47 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[9切片]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ScaleBitmap]]></category>

		<guid isPermaLink="false">http://wp.foxling.cn/as-flex-air/scale9-flash-as3-and-scalebitmap-class/</guid>
		<description><![CDATA[CSS里有滑动门技术，使标签宽度自适应。 Flash里也有9切片缩放的选项，让圆角矩形在缩放时不会变形。普通的没有应用9切片的元件在进行了拉伸后会变形，见下图： Flash里的9切片 通过设置9切片缩放，可以解决这个问题，在库里面，右击元件，选择属性，勾选启用9切片缩放比例辅助线(只有影片剪辑才可以应用9切片属性)： 双击库面板里的元件打开编辑，在舞台上可以看到出现了9切片的辅助线，鼠标拖动辅助线调整好位置： 再看看舞台上原来那个进行拉伸的元件，现在不管如何拉伸变形，圆角都能保持原样不变形： AS3里的9切片 同样，在AS3中通过设置scale9Grid也可以应用9切片缩放 scale9Grid 属性 scale9Grid:Rectangle [读写] 语言版本:ActionScript 3.0 运行时版本:AIR 1.0 Flash Player 9 当前有效的缩放网格。如果设置为 null，则在应用任何缩放转换时，将正常缩放整个显示对象。 当定义 scale9Grid 属性时，该显示对象被分割到以 scale9Grid 矩形为基础的具有九个区域的网格中，该矩形定义网格的中心区域。网格的其它八个区域如下： 矩形外的左上角 矩形上方的区域 矩形外的右上角 矩形左侧的区域 矩形右侧的区域 矩形外的左下角 矩形下方的区域 矩形外的右下角 可以认为中心区域（由矩形定义）之外的八个区域类似于在缩放时已应用特殊规则的图片帧。 在设置 scale9Grid 属性并缩放显示对象后，会正常缩放所有文本和渐变；但是，对于对象的其它类型，将应用以下规则： 正常缩放中心区域中的内容。 不缩放转角中的内容。 仅水平缩放顶部和底部区域中的内容。仅垂直缩放左侧和右侧区域中的内容。 拉伸所有填充（包括位图、视频和渐变）以适应其形状。 如果旋转显示对象，则所有后续缩放都是正常的（并会忽略 scale9Grid 属性）。 Flash演示如下： 源代码： package { import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; [...]]]></description>
			<content:encoded><![CDATA[<p>CSS里有滑动门技术，使标签宽度自适应。</p>
<p>Flash里也有9切片缩放的选项，让圆角矩形在缩放时不会变形。普通的没有应用9切片的元件在进行了拉伸后会变形，见下图：</p>
<p style="text-align: center;"><img alt="" src="http://www.foxling.cn/attachments/month_0903/0200939232353.png" /></p>
<h3>Flash里的9切片</h3>
<p>通过设置9切片缩放，可以解决这个问题，在库里面，右击元件，选择属性，勾选启用9切片缩放比例辅助线(只有影片剪辑才可以应用9切片属性)：</p>
<p style="text-align: center;"><img alt="" src="http://www.foxling.cn/attachments/month_0903/n20093923264.png" /></p>
<p>双击库面板里的元件打开编辑，在舞台上可以看到出现了9切片的辅助线，鼠标拖动辅助线调整好位置：</p>
<p style="text-align: center;"><img src="http://www.foxling.cn/attachments/month_0903/y200939232911.png" alt="" /></p>
<p>再看看舞台上原来那个进行拉伸的元件，现在不管如何拉伸变形，圆角都能保持原样不变形：</p>
<p style="text-align: center;"><img src="http://www.foxling.cn/attachments/month_0903/a200939233126.png" alt="" /></p>
<p><span id="more-82"></span></p>
<h3>AS3里的9切片</h3>
<p>同样，在AS3中通过设置scale9Grid也可以应用9切片缩放</p>
<blockquote>
<p><strong>scale9Grid 属性</strong></p>
<p><code>scale9Grid:Rectangle</code> [读写]</p>
<p>语言版本:ActionScript 3.0</p>
<p>运行时版本:AIR 1.0 Flash Player 9</p>
<p>当前有效的缩放网格。如果设置为 <code>null</code>，则在应用任何缩放转换时，将正常缩放整个显示对象。</p>
<p>当定义 <code>scale9Grid</code> 属性时，该显示对象被分割到以 <code>scale9Grid</code> 矩形为基础的具有九个区域的网格中，该矩形定义网格的中心区域。网格的其它八个区域如下：</p>
<ul>
<li>矩形外的左上角</li>
<li>矩形上方的区域</li>
<li>矩形外的右上角</li>
<li>矩形左侧的区域</li>
<li>矩形右侧的区域</li>
<li>矩形外的左下角</li>
<li>矩形下方的区域</li>
<li>矩形外的右下角</li>
</ul>
<p>可以认为中心区域（由矩形定义）之外的八个区域类似于在缩放时已应用特殊规则的图片帧。</p>
<p>在设置 <code>scale9Grid</code> 属性并缩放显示对象后，会正常缩放所有文本和渐变；但是，对于对象的其它类型，将应用以下规则：</p>
<ul>
<li>正常缩放中心区域中的内容。</li>
<li>不缩放转角中的内容。</li>
<li>仅水平缩放顶部和底部区域中的内容。仅垂直缩放左侧和右侧区域中的内容。</li>
<li>拉伸所有填充（包括位图、视频和渐变）以适应其形状。</li>
</ul>
<p>如果旋转显示对象，则所有后续缩放都是正常的（并会忽略 <code>scale9Grid</code> 属性）。</p>
</blockquote>
<p><strong>Flash演示如下：</strong></p>
<p style="text-align: center;"><embed height="400" width="550" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="/examples/as3/Slice9Example/Slice9Example.swf" play="true" loop="true" menu="true"></embed></p>
<p>源代码：</p>
<pre>
package {
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;

    public class Slice9Example extends Sprite
    {
        private var rect:Shape = new Shape();
        public function Slice9Example()
        {
            draw();
            rect.x = 0;
            rect.y = 0;
            addChild(rect);
            stage.addEventListener(MouseEvent.MOUSE_MOVE,onReSize);
        }

        private function onReSize(e:MouseEvent):void
        {
            rect.width = e.stageX;
            rect.height = e.stageY;
        }

        private function draw():void
        {
            var grid:Rectangle = new Rectangle(20,20,40,40);

            with(rect.graphics)
            {
                beginFill(0x990065,1);
                drawRoundRect(0,0,80,80,10);
                endFill();
            }
            rect.scale9Grid = grid;
        }
}
</pre>
<p>除了应用于圆角外，还可以举一反三地应用于其它不规则形状的情况。</p>
<h3>图片缩放类</h3>
<p>9切片只能应用于Flash里的元素，搞不定导入的PNG，JPG图片的，但有强人写好了类，针对图片的9切片缩放，通过转换图片为bitmap，然后进行处理；效果：</p>
<p style="text-align: center;"><img alt="" src="http://www.foxling.cn/attachments/month_0903/g200931002249.png" /></p>
<p>原博客地址：<a href="http://www.bytearray.org/?p=118" target="_blank">http://www.bytearray.org/?p=118</a></p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/scale9-flash-as3-and-scalebitmap-class/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

