<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Yuki's Blog]]></title>
<link>http://www.yukidesign.cn/blog/</link>
<description><![CDATA[优客设计--创造机会的人是勇者；等待机会的人是愚者]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[jareboy@163.com(何世-J)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>Yuki&#39;s Blog</title>
	<url>http://www.yukidesign.cn/blog/images/logos.gif</url>
	<link>http://www.yukidesign.cn/blog/</link>
	<description>Yuki&#39;s Blog</description>
</image>

			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=161</link>
			<title><![CDATA[Adobe AIR右键菜单和系统托盘（Tray)功能以及实现方法]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[AS3]]></category>
			<pubDate>Thu,03 Nov 2011 22:58:50 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=161</guid>
		<description><![CDATA[AIR教程 <br/><br/>Adobe AIR右键菜单和系统托盘（Tray)功能以及实现方法 <br/><br/>右键菜单： <br/><br/>var mainMenu:NativeMenu = new NativeMenu(); <br/>var minimizeMenu:NativeMenuItem = new NativeMenuItem(&#34;Minimize&#34;); <br/>var maximizeMenu:NativeMenuItem = new NativeMenuItem(&#34;Maximize&#34;); <br/>var sepMenu:NativeMenuItem = new NativeMenuItem(&#34;&#34;,true); <br/>var restoreMenu:NativeMenuItem = new NativeMenuItem(&#34;Restore&#34;); <br/>var closeMenu:NativeMenuItem = new NativeMenuItem(&#34;Close&#34;); <br/>minimizeMenu.addEventListener(Event.Sel&#101;ct, handleMenuClick); <br/>maximizeMenu.addEventListener(Event.Sel&#101;ct, handleMenuClick); <br/>restoreMenu.addEventListener(Event.Sel&#101;ct, handleMenuClick); <br/>closeMenu.addEventListener(Event.Sel&#101;ct, handleMenuClick); <br/>mainMenu.addItem(minimizeMenu); <br/>mainMenu.addItem(maximizeMenu); <br/>mainMenu.addItem(sepMenu); <br/>mainMenu.addItem(restoreMenu); <br/>mainMenu.addItem(closeMenu); <br/>this.contextMenu=mainMenu; <br/>系统托盘: <br/><br/>var sysTray:SystemTrayIcon = <br/>&nbsp;&nbsp;NativeApplication.nativeApplication.icon as SystemTrayIcon; <br/>&nbsp;&nbsp;sysTray.tooltip = &#34;测试tray&#34;; <br/>&nbsp;&nbsp;// <br/>&nbsp;&nbsp;sysTray.menu = this.contextMenu; <br/>&nbsp;&nbsp;sysTray.addEventListener(MouseEvent.CLICK,trayClick); <br/><br/>如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来激活应用程序窗体. <br/>整个流程: <br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 初始化应用时改变系统默认情况下以系统X事件的处理. <br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义新处理逻辑(本文是弹出对话框) <br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 生成托盘图标并置于状态栏 <br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给托盘图标加上右键菜单(本文是exit,和open两项) <br/>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给菜单加上相应的事件 <br/>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大功告成 <br/><br/>主要方法: <br/><br/>1. private var dockImage:BitmapData;&nbsp;&nbsp;<br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //初始化Application里调用此方法,完成上面的第一步:&nbsp;&nbsp;<br/>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function initApplication():void{&nbsp;&nbsp;<br/>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var loader:Loader=new Loader();&nbsp;&nbsp;<br/>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);// 这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制&nbsp;&nbsp;<br/>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loader.load(new URLRequest(&#34;assets/images/32.png&#34;));//这里先要加载托盘图标的小图片&nbsp;&nbsp;<br/>8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件&nbsp;&nbsp;<br/>9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>10.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>11.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关闭窗体的事件&nbsp;&nbsp;<br/>12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function closingApplication(event:Event):void{&nbsp;&nbsp;<br/>13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.preventDefault();//阻止默认的事件&nbsp;&nbsp;<br/>14.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.yesLabel=&#34;Close&#34;;&nbsp;&nbsp;<br/>15.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.noLabel=&#34;Mini&#34;;&nbsp;&nbsp;<br/>16.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.show(&#34;Close o&#114; Minimize?&#34;, &#34;Close?&#34;, 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.&nbsp;&nbsp;<br/>17.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>18.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘.&nbsp;&nbsp;<br/>19.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private function alertCloseHandler(event:CloseEvent):void{&nbsp;&nbsp;<br/>20.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(event.detail==Alert.YES){&nbsp;&nbsp;<br/>21.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closeApp(event);&nbsp;&nbsp;<br/>22.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{&nbsp;&nbsp;<br/>23.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dock();//最小化到托盘&nbsp;&nbsp;<br/>24.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>25.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>26.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>27.&nbsp;&nbsp;&nbsp;&nbsp; //生成托盘&nbsp;&nbsp;<br/>28.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function prepareForSystray(event:Event):void{&nbsp;&nbsp;<br/>29.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dockImage=event.target.content.bitmapData;&nbsp;&nbsp;<br/>30.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(NativeApplication.supportsSystemTrayIcon){&nbsp;&nbsp;<br/>31.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setSystemTrayProperties();//设置托盘菜单的事件&nbsp;&nbsp;<br/>32.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=cr&#101;ateSystrayRootMenu();//生成托盘菜单&nbsp;&nbsp;<br/>33.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>34.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>35.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>36.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function cr&#101;ateSystrayRootMenu():NativeMenu{&nbsp;&nbsp;<br/>37.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var menu:NativeMenu = new NativeMenu();&nbsp;&nbsp;<br/>38.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var openNativeMenuItem:NativeMenuItem = new NativeMenuItem(&#34;Open&#34;);//生成OPEN菜单项&nbsp;&nbsp;<br/>39.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem(&#34;Exit&#34;);//同理&nbsp;&nbsp;<br/>40.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; openNativeMenuItem.addEventListener(Event.Sel&#101;ct, undock);&nbsp;&nbsp;<br/>41.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exitNativeMenuItem.addEventListener(Event.Sel&#101;ct, closeApp);//添加EXIT菜单项事件&nbsp;&nbsp;<br/>42.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; menu.addItem(openNativeMenuItem);&nbsp;&nbsp;<br/>43.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; menu.addItem(new NativeMenuItem(&#34;&#34;,true));//separator&nbsp;&nbsp;&nbsp;&nbsp;<br/>44.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; menu.addItem(exitNativeMenuItem);//将菜单项加入菜单&nbsp;&nbsp;<br/>45.&nbsp;&nbsp;<br/>46.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return menu;&nbsp;&nbsp;<br/>47.&nbsp;&nbsp;<br/>48.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>49.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置托盘图标的事件&nbsp;&nbsp;<br/>50.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private function setSystemTrayProperties():void{&nbsp;&nbsp;<br/>51.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = &#34;TurboSquid squidword&#34;;&nbsp;&nbsp;<br/>52.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK, undock);&nbsp;&nbsp;<br/>53.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, nwMinimized);&nbsp;&nbsp;&nbsp;&nbsp;<br/>54.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>55.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>56. //最小化窗体&nbsp;&nbsp;<br/>57.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {&nbsp;&nbsp;<br/>58.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {&nbsp;&nbsp;<br/>59.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件&nbsp;&nbsp;<br/>60.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dock();//将程序放入托盘&nbsp;&nbsp;<br/>61.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>62.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>63.&nbsp;&nbsp;<br/>64.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将本地应用程序放到托盘&nbsp;&nbsp;<br/>65.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function dock():void {&nbsp;&nbsp;<br/>66.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stage.nativeWindow.visible = false; //设置本地程序窗体不可见&nbsp;&nbsp;<br/>67.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标&nbsp;&nbsp;<br/>68.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>69.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>70.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //激活程序窗体&nbsp;&nbsp;<br/>71.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function undock(evt:Event):void {&nbsp;&nbsp;<br/>72.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stage.nativeWindow.visible = true;//设置本地程序窗体可见&nbsp;&nbsp;<br/>73.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端&nbsp;&nbsp;<br/>74.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NativeApplication.nativeApplication .icon.bitmaps = [];将托盘图标清空&nbsp;&nbsp;<br/>75.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>76.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>77.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关闭程序窗体&nbsp;&nbsp;<br/>78.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private function closeApp(evt:Event):void {&nbsp;&nbsp;<br/>79.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stage.nativeWindow.close();&nbsp;&nbsp;<br/>80.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br/>81.&nbsp;&nbsp;<br/><br/><br/><br/>用Flex建立一个100%窗口透明的AIR程序，以及打包成.AIR文件 <br/>Flex建立一AIR程序 <br/>窗口透明的AIR程序 <br/>打包成.AIR文件 <br/>第一步：打开FLEX3&nbsp;&nbsp;创建一个 FLEX project <br/><br/><br/>接着是命名，并选中 Desktop application 在AIR中运行 <br/><br/>自动生产XML配置文件 <br/>创建好以后FLEX3会自动生产一些文件，再Src文件夹里会有两个XML描述语言： <br/>.MXML文件为前台描述文件 <br/>.XML里面可以更改一些系统配置 <br/>本例：去除AIR窗口，并让AIR程序边界透明。 <br/>我们打开airia_ex_login-app.xml这个文件 <br/>找到： &lt;systemChrime&gt;&lt;/systemChrime&gt; 和 &lt;transparent&gt;&lt;/transparent&gt; <br/><br/>修改为下图蓝色区域。 <br/>&lt;systemChrime&gt;none&lt;/systemChrime&gt;&nbsp;&nbsp;表示没有系统窗口 <br/>&lt;transparent&gt;true&lt;/transparent&gt;&nbsp;&nbsp;&nbsp;&nbsp;表示开启背景透明 <br/><br/>注意：要去掉&lt;!-- --&gt; 也就是说，本身默认文件是把这两项给注释掉了，我们现在把他启用。 <br/>注意2：本教程省略了案例中“AIR界面UI设计”的过程，UI界面源文件在附件内里有。 <br/><br/>这样我们就完成了第一步。运行一下看看结果？ <br/><br/>我们发现FLEX有个默认的STYLE显示了出来。我们现在要想办法把他去掉 <br/>第二步：配置MXML文件中的“mx:WindowedApplication” <br/>在 mx:WindowedApplication 内添加一下定制便可去掉FLEX默认的风格界面。 <br/>showFlexChrome=&#34;false&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>alwaysInFront=&#34;true&#34; <br/>layout=&#34;absolute&#34; <br/>这里我们再把界面大小设定好。 <br/>width=&#34;314&#34; <br/>height=&#34;460&#34; <br/>如图： <br/><br/>再次运行看看： <br/><br/>GOOD！一个完美100%透明的AIR RUN起来了。 <br/><br/>也许你还会碰到一下问题 <br/>窗口没办法在桌面拖动？ <br/>没办法关闭和最小化？ <br/>请关注AIRIA.cn原创教程的下一集 <br/><br/><br/>最后把此例的源文件、工程文件、安装.AIR文件全部提供给大家下载参考，忘各位网友支持AIRIA的发展。 <br/><br/><br/>附件： <br/><br/><br/>扩展参考：flex制作一个用户登录框(含验证码) <br/>&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt; <br/>&lt;mx:Application xmlns:mx=&#34;<a href="http://www.adobe.com/2006/mxml" target="_blank" rel="external">http://www.adobe.com/2006/mxml</a>&#34; layout=&#34;absolute&#34; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fontSize=&#34;12&#34; horizontalAlign=&#34;center&#34; creationComplete=&#34;init()&#34;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;mx:Script&gt; <br/>&lt;![CDATA[ import mx.controls.Alert; private function init():void{ generate.text=generateCheckCode(); } //login identifying private function loginHandler():void{ if(user.text==&#34;&#34;||pass.text==&#34;&#34;){ Alert.show(&#34;user o&#114; pass is empty&#34;,&#34;tips&#34;); }else{ if(user.text==&#34;shane&#34;&amp;&amp;pass.text==&#34;shane&#34; &amp;&amp;identify.text.toLowerCase()==generate.text.toLowerCase()){ Alert.show(&#34;login is OK&#34;,&#34;tips&#34;); currentState=&#34;hollow&#34;; }else{ if(identify.text.toLowerCase()!=generate.text.toLowerCase()){ Alert.show(&#34;indentifyCode is error&#34;,&#34;tips&#34;); generate.text=generateCheckCode(); }else{ Alert.show(&#34;user o&#114; pass error&#34;,&#34;tips&#34;); } } } } //clear private function clearHandler():void{ user.text=pass.text=&#34;&#34;; } //generate identifying coder private function generateCheckCode():String{ //init var num:Number; var code:String; var checkCode:String=&#34;&#34;; for(var i:int=0;i&lt;5;i++){ num=Math.round(Math.random()*100000); if(num%2==0){ code=String.fromCharCode(48+(num%10)); }else{ code=String.fromCharCode(65+(num%26)); } checkCode +=code; } return checkCode; } ]]&gt; <br/>&lt;/mx:Script&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&lt;mx:Panel id=&#34;panel&#34; x=&#34;143&#34; y=&#34;115&#34; width=&#34;350&#34; height=&#34;229&#34; layout=&#34;absolute&#34; title=&#34;login&#34;&gt; <br/><br/>&lt;mx:Button id=&#34;btnLogin&#34; x=&#34;73&#34; y=&#34;141&#34; label=&#34;login&#34; click=&#34;loginHandler()&#34;/&gt; <br/>&lt;mx:Button id=&#34;btnClear&#34; x=&#34;167&#34; y=&#34;141&#34; label=&#34;clear&#34; click=&#34;clearHandler()&#34;/&gt; <br/><br/>&lt;mx:Label x=&#34;44&#34; y=&#34;31&#34; text=&#34;user&#34;/&gt; <br/>&lt;mx:Label x=&#34;44&#34; y=&#34;64&#34; text=&#34;pass&#34;/&gt; <br/><br/>&lt;mx:TextInput id=&#34;user&#34; x=&#34;81&#34; y=&#34;31&#34;/&gt; <br/>&lt;mx:TextInput id=&#34;pass&#34; x=&#34;81&#34; y=&#34;62&#34; displayAsPassword=&#34;true&#34;/&gt; <br/>&lt;mx:Text x=&#34;28&#34; y=&#34;100&#34; text=&#34;identify&#34;/&gt; <br/>&lt;mx:TextInput x=&#34;81&#34; y=&#34;98&#34; width=&#34;50&#34; id=&#34;identify&#34;/&gt; <br/>&lt;mx:Label x=&#34;139&#34; y=&#34;100&#34; width=&#34;48&#34; id=&#34;generate&#34;/&gt; <br/>&lt;mx:Label x=&#34;195&#34; y=&#34;100&#34; text=&#34;看不清楚 换个~~&#34; click=&#34;generateCheckCode()&#34;/&gt; <br/><br/>&lt;/mx:Panel&gt; <br/><br/>&nbsp;&nbsp;&lt;mx:states&gt; <br/>&nbsp;&nbsp; &lt;mx:State name=&#34;hollow&#34;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:RemoveChild target=&#34;{panel}&#34;/&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:AddChild position=&#34;lastChild&#34;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Label text=&#34;hollow marshane&#34; x=&#34;0&#34; y=&#34;200&#34; fontSize=&#34;200&#34; color=&#34;red&#34;/&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/mx:AddChild&gt; <br/>&nbsp;&nbsp; &lt;/mx:State&gt; <br/>&nbsp;&nbsp;&lt;/mx:states&gt; <br/><br/>&lt;/mx:Application&gt; <br/><br/><br/><br/><br/>自动配置和在线安装Adobe AIR运行环境(AIR Express Install Badge ) <br/><br/>接触Adobe AIR的朋友一定会有这样一个疑惑： <br/>如果客户的电脑上没装Adobe AIR运行环境怎么办？ <br/>事实上，我们明白，在Adobe AIR普及率还不算高的今天（尤其在中国）总是告诉客户“请先下载Adobe AIR1.1”会显得太不“友好”。因为可能网友们一时半会还没明白“AIR”是什么，我为什么要安装这个东西？ <br/>现在给大家介绍来自Adobe的解决方案：AIR Express Install Badge <br/>如果你需要发布一个Adobe AIR应用,没有安装Adobe AIR运行环境的客户机它会为你自动地先安装Adobe AIR运行环境，然后再安装Adobe AIR应用。当然已经安装了AIR运行环境的就会直接安装AIR应用了. 这种在线安装AIR的方法很方便。 <br/>AIR Express Install Badge 事实上是一种Adobe AIR推出的“在线安装”AIR应用的方式。 <br/>怎样创建一个Adobe AIR应用在线安装?（步骤和下载）： <br/>• 首先需要下载和配置AIR SDK&nbsp;&nbsp;&nbsp;&nbsp; [ 下载1（AIR at WIN）下载2 （AIR at mac）更多SDK AIR Flash开发中心 ] <br/>• 然后需要创建一个在线安装时用的图片 <br/>• 接着可以使用Flash来创建一个安装动画 <br/>简而言之，这个方法就是使用一个Flash动画作为在线安装的前端（因为FLASH的普及率是相当高的），这个时候通过FLASH来判断客户端是否有 Adobe AIR运行环境，如果没有则自动先安装Adobe AIR运行环境(当然时间也会变的长一些，需要下载、安装)，接着再自动安装这个AIR应用。这个过程客户几乎察觉不到他安装了AIR。 <br/>Adobe AIR应用在线安装(配置方法) ： <br/>1.创建安装FLASH动画的背景图像 <br/>创建一个215px x 100px 图像，被用来作为背景。 默认的在线安装区域为 217px x 180px 。 <br/><br/>2.配置SWF <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数： <br/>• 应用程序名称(appname)：也就是你的AIR应用的名称。 <br/>• 应用程序路径 (appurl)：你的AIR应用程序的下载路径。 (比如：<a href="http://www.AIRia.cn/myAirApp.air" target="_blank" rel="external">http://www.AIRia.cn/myAirApp.air</a>) <br/>• AIR版本（airversion）： AIR应用的版本。比如AIR1.1 <br/>• 安装按钮的颜色(buttoncolor) ：如果需要,可以试用十六进制定义一个按钮颜色。(默认是灰色） <br/>• 安装文字信息的颜色(messgagecolor) ：如果需要,可以试用十六进制定义一个按钮颜色。(默认是黑色） <br/>• 背景图像地址(imageurl)：背景图像地址。 <br/><br/>像这样： <br/><br/>AIRia编者：如果你想让你的AIR应用为更多人接受，那么你不得不选择这个方法。但国外也有很多人反对这种做法，因为这没有征求客户的同意就安装了另外一个插件,部分人也质疑这种在线安装的安全性，本文不就这些问题进行讨论。本文为本站原创（参考了一些英文信息），转载请注明来自AIRia，谢谢! <br/>相关：关于Flash player 10将集成AIR的某些特性的问题，本站将后续探讨。 ]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=160</link>
			<title><![CDATA[MG1.8T油记]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[News]]></category>
			<pubDate>Wed,02 Mar 2011 16:08:57 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=160</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;日&nbsp;&nbsp;期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 油&nbsp;&nbsp;量(升)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 金 额(元)<br/><br/>2010.12.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52.59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;365<br/><br/>2010.12.26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 57.52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;390<br/><br/>2011.01.05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52.78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;380<br/><br/>2011.01.23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51.39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;370<br/><br/>2011.02.08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52.08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;375<br/><br/>2011.02.21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;300<br/><br/>2011.03.05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 56.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420<br/><br/>2011.03.17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;300<br/><br/>2011.03.27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;300<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=159</link>
			<title><![CDATA[滚鸡蛋3 第19关 第20关 过关画面]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[News]]></category>
			<pubDate>Mon,07 Feb 2011 22:03:40 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=159</guid>
		<description><![CDATA[<p>滚鸡蛋3第19关过关画面</p>
<p><img alt="" src="http://www.yukidesign.cn/blog/attachments/month_1102/520112722839.jpg" /></p>
<p>&nbsp;</p>
<p>滚鸡蛋3第20关过关画面</p>
<p><img alt="" src="http://www.yukidesign.cn/blog/attachments/month_1102/z20112723035.jpg" /></p>
<p>第20关特别玩法</p>
<p><embed height="300" width="400" src="http://www.tudou.com/v/KVvn4BkPOuY/&amp;rpid=82412766/v.swf" type="application/x-shockwave-flash" play="true" loop="true" menu="true"></embed></p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=156</link>
			<title><![CDATA[AS3写的小软件]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[AS3]]></category>
			<pubDate>Sat,19 Jun 2010 10:01:04 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=156</guid>
		<description><![CDATA[<p>&nbsp;</p>
<p>一、AS3 写的在线拍照和切图的软件</p>
<p>为一个人才网做的在线上传照片用的小工具:FLASH CS4 写的&nbsp;,放了很久了,也没用过,放出来做个记录.</p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="950">
    <tbody>
        <tr>
            <td width="550"><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" height="424" width="550" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
            <param value="14552" name="_cx" />
            <param value="11218" name="_cy" />
            <param value="" name="FlashVars" />
            <param value="http://www.yukidesign.cn/mypic/photo_camera.swf" name="Movie" />
            <param value="http://www.yukidesign.cn/mypic/photo_camera.swf" name="Src" />
            <param value="Window" name="WMode" />
            <param value="0" name="Play" />
            <param value="-1" name="Loop" />
            <param value="High" name="Quality" />
            <param value="" name="SAlign" />
            <param value="-1" name="Menu" />
            <param value="" name="Base" />
            <param value="" name="AllowScriptAccess" />
            <param value="ShowAll" name="Scale" />
            <param value="0" name="DeviceFont" />
            <param value="0" name="EmbedMovie" />
            <param value="" name="BGColor" />
            <param value="" name="SWRemote" />
            <param value="" name="MovieData" />
            <param value="1" name="SeamlessTabbing" />
            <param value="0" name="Profile" />
            <param value="" name="ProfileAddress" />
            <param value="0" name="ProfilePort" />
            <param value="all" name="AllowNetworking" />
            <param value="false" name="AllowFullScreen" /></object></td>
            <td width="40">
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><a target="_blank" href="http://www.yukidesign.cn/php/upfiles/qq.jpg"><span style="font-size: 26px">查看上传的＊＊</span></a><span style="font-size: 26px">&gt;&gt;&gt;&gt;&gt;</span></p>
<p>&nbsp;源码:[AS3.0] + PHP 5.0</p>
<p>&nbsp;</p>
<p>二、FLASH AS3写的一个在线集成吊顶拼花软件</p>
<p>这个案例在一年多前写的,当时是学习AS3时的练习稿,个人觉得边写边学这样收获很大.</p>
<p>&nbsp;</p>
<p>测试地址: <a href="http://www.yukidesign.cn/yukidesign/jcdds/">http://www.yukidesign.cn/yukidesign/jcdds/</a></p>
<p>&nbsp;</p>
<p>三、QQ＊＊找茬助手</p>
<p>一个能帮你很快找到茬的小软件，FLASXHCS3+VB6 写的小软件。</p>
<p><a href="http://www.taobaovod.com/fdj/">http://www.taobaovod.com/fdj/</a></p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=155</link>
			<title><![CDATA[GUI设计禁忌]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[Favorite]]></category>
			<pubDate>Tue,20 Oct 2009 09:31:43 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=155</guid>
		<description><![CDATA[<p minmax_bound="true">本文列举Jeff Johnson:《GUI设计禁忌》一书中提及的明确针对Web设计和笔者认为对Web设计有参考意义的设计原则和禁忌。设计Web项目时尽量参考一下基本原则，避免设计禁忌，应该能使Web项目的GUI上一个层次。</p>
<p minmax_bound="true"><strong minmax_bound="true">基本原则：</strong></p>
<p minmax_bound="true">1、关注用户及其任务，而不是技术</p>
<p minmax_bound="true">2、首先考虑功能，然后才是表示</p>
<p minmax_bound="true">3、从用户的视角看问题，使用用户的词汇进行描述</p>
<p minmax_bound="true">4、不要向用户暴露实现细节</p>
<p minmax_bound="true">5、使常用的用户任务简单化，不要让用户解决额外的问题</p>
<p minmax_bound="true">6、保持一致性，引导用户的使用习惯</p>
<p minmax_bound="true">7、保持显示惯性，传递信息，而不仅仅是数据</p>
<p minmax_bound="true">8、设计应满足响应需求</p>
<p minmax_bound="true"><strong minmax_bound="true"><font color="#ff0000" minmax_bound="true">禁忌：</font></strong></p>
<p minmax_bound="true">1、同一页面包含重复功能的链接或按钮</p>
<p minmax_bound="true">2、将复选框用作单选按钮</p>
<p minmax_bound="true">3、无初始值的多选一设置</p>
<p minmax_bound="true">4、在非开/关设置中使用复选框</p>
<p minmax_bound="true">5、用文本框显示只读数据</p>
<p minmax_bound="true">6、单选按钮之间间隔太大</p>
<p minmax_bound="true">7、属性标记对齐方式不一致</p>
<p minmax_bound="true">8、当前无效的控件不充分置灰</p>
<p minmax_bound="true">9、显示对用户无意义的错误提示</p>
<p minmax_bound="true">10、不同的类型页面窗口显示相同的标题</p>
<p minmax_bound="true">11、窗口的标题和调用的命令不一致</p>
<p minmax_bound="true">12、要求用户输入随机数</p>
<p minmax_bound="true">13、相似的功能却有不一致的用户操作界面</p>
<p minmax_bound="true">14、取消按钮无法真正取消操作</p>
<p minmax_bound="true">15、网站结构反映公司的结构或网站升级的历史</p>
<p minmax_bound="true">16、返回按钮不能达到预期的目的</p>
<p minmax_bound="true">17、搜索选项过多，过度复杂</p>
<p minmax_bound="true">18、使用容易被忽略的隐藏的图片链接</p>
<p minmax_bound="true">19、需要向下滚动才能看到当前页的重要信息</p>
<p minmax_bound="true">20、图片按钮对鼠标按下操作没有视觉变化</p>
<p minmax_bound="true">21、无意义的虚假进度条</p>
<p minmax_bound="true">22、执行长时间的任务时鼠标指针不显示成忙状态</p>
<p minmax_bound="true">23、不考虑用户可能的人为的错误输入</p>
<p minmax_bound="true">24、认为好的UI就是漂亮的UI</p>
<p minmax_bound="true">25、盲目错误的使用页面模块化设计</p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=154</link>
			<title><![CDATA[(转载)SFS 破解方法]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[AS3]]></category>
			<pubDate>Mon,19 Oct 2009 11:06:55 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=154</guid>
		<description><![CDATA[<p>说到破解都会有版权问题，因此，在这里不指明相关文章的连接地址！请相关的作者谅解。本方法只提供操作步骤，只供学习之用，本站不承担任何法律责任！<br />
一开始，师傅给我们他已破解好的无限连接数的key时，我是感到无比的神奇。盯着他的blog看了好几遍《一不小心把smartfoxserver破解了》这篇文章。他说破解会涉及版权问题，所以就没有追问具体的破解方法了。</p>
<p>后来无意中看到一篇《SFS无极限》，真是兴奋，把它里面的方式试了一遍，然后将人数限制为3人测试和限制为100人做测试，的确是可行的！</p>
<p>最近看到有人说&ldquo;有偿提供licence.sfl授权文件&hellip;&rdquo;和&ldquo;破解之后还是一样&rdquo;，所以在这里我将详细的操作步骤写出来（就算你不会编程也没有关系）。</p>
<p>好，闲话少说，我们开始吧&hellip;<br />
1. 去下载一个myEclipse 然后安装 （我的是 MyEclipse_5.5.1GA_E3.2.2_FullStackInstaller.exe 注册码，破解 自己百度一下 ）<br />
2.下载破解文件,解压出来；<br />
3. 运行myEclipse， 点击左上角 File &ndash;&gt; Import &ndash;&gt;General目录下Existing Projects into Workspace 选next &ndash;&gt; Select root directory 点击Browse 找到你刚才第2步中解压的 文件夹SFS 点确定&ndash;&gt;finish<br />
4.确保你SFS的安装路径，默认安装的是C:\Program Files\SmartFoxServerPRO_1.6.2\Server\, 如果你的不是装在这么目录，那么请在ParseLicence.java里78行修改为自己的路径，记得 是用\\，最后指向Server目录；<br />
5.点击小虫子按钮或者旁边的箭头debug或run(也可以按下键盘的F11)，在弹出的框中 点击Java Application ,再选右下角的Debug<br />
6.在C:\Program Files\SmartFoxServerPRO_1.6.2\Server\中找到decode.xml编辑里面的MaxClients人数<br />
7.修改ParseLicence.java的第86和88行，根据代码注析做，重复第5步；（编译器输出的还是20，不用管它！）<br />
8. 此时在C:\Program Files\SmartFoxServerPRO_1.6.2\Server\已经生成破解的licence.sfl.new,将原来的 licence.sfl删掉，再将licence.sfl.new重命名为licence.sfl，重启SFS就可以看到效果</p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=153</link>
			<title><![CDATA[Flash多人在线游戏引擎SmartFoxServer(SFS)]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[AS3]]></category>
			<pubDate>Mon,19 Oct 2009 10:24:06 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=153</guid>
		<description><![CDATA[<p>SmartFoxServer 1.42<br />
官网:<a href="http://www.smartfoxserver.com/" target="_blank"><font color="#000000">http://www.smartfoxserver.com/</font></a><br />
<br />
完全免费且功能强大的第三方FLASH加强软件，利用附带的模版能轻松能制作FLASH休闲网络游戏，FLASH＊＊＊等，高手甚至能做FLASH的MMO游戏来。。。(现在还没有)<br />
与其说是服务器不如说是FLASH在线游戏引擎。。。配合其他工具能做出一个华丽的多人FLASH游戏来！<br />
<br />
支持Flash MX(7.0)和MX 2004(8.0) (插件不同。。)<br />
<br />
内含说明文档，服务器端，对应的FLASH插件，许多范例和源文件等。。<br />
<br />
安装完后请修改config.xml配置服务器参数 填好自己的IP地址<br />
(用路游器的填分配的IP地址，一般是192.168.*.*)<br />
其他的就不多说了。。自己看英文把= =<br />
<br />
SmartFoxServer 1.40 通常版(适合新手) 下载页面<br />
<a href="http://www.smartfoxserver.com/products/basic.php" target="_blank"><font color="#000000">http://www.smartfoxserver.com/products/basic.php</font></a><br />
<br />
SmartFoxServer 1.40 专业版 下载页面<br />
<a href="http://www.smartfoxserver.com/products/pro.php" target="_blank"><font color="#000000">http://www.smartfoxserver.com/products/pro.php</font></a><br />
<br />
1.42补丁<br />
<a href="http://www.smartfoxserver.com/download/beta/patch_1.4.2.zip" target="_blank"><font color="#000000">http://www.smartfoxserver.com/download/beta/patch_1.4.2.zip</font></a><br />
<br />
<span style="color: orangered">下载注意<br />
先安装1.40再下1.42补丁覆盖<br />
1。&lt;安装目录&gt;\Server\下的smartfoxserver.jar<br />
2。&lt;安装目录&gt;\Server\lib\mainLib.as</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=152</link>
			<title><![CDATA[SFS官方教程]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[AS3]]></category>
			<pubDate>Mon,19 Oct 2009 10:10:43 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=152</guid>
		<description><![CDATA[<p>SFS官方教程 AS3.0版 共四篇 (smartFoxServer) 服务端 服务器<br />
第一篇<br />
<a href="http://bbs.actionscript3.cn/thread-17170-1-1.html" target="_blank">http://bbs.actionscript3.cn/thread-17170-1-1.html</a><br />
<br />
第二篇<br />
<a href="http://bbs.actionscript3.cn/thread-17171-1-1.html" target="_blank">http://bbs.actionscript3.cn/thread-17171-1-1.html</a><br />
<br />
第三篇<br />
<a href="http://bbs.actionscript3.cn/thread-17174-1-1.html" target="_blank">http://bbs.actionscript3.cn/thread-17174-1-1.html</a><br />
<br />
第四篇 FLASH虚拟社区<br />
<a href="http://bbs.actionscript3.cn/thread-17176-1-1.html" target="_blank">http://bbs.actionscript3.cn/thread-17176-1-1.html</a></p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=151</link>
			<title><![CDATA[内网端口映射详解（花生壳）]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[Favorite]]></category>
			<pubDate>Sat,17 Oct 2009 16:15:28 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=151</guid>
		<description><![CDATA[<p style="text-indent: 2em">关于如何建立服务器的解答。</p>
<p style="text-indent: 2em">一．花生壳的作用<img src="http://st.blog.163.com/style/common/htmlEditor/portrait/face/preview/face7.gif" alt="" /></p>
<p style="text-indent: 2em">首先，我们先来了解一下花生壳的到底有什么作用。因为ADSL每次拨号上网所获得的IP地址每次都是不同的，花生壳起到的作用就是方便用户访问我们的服务器（只需要输入域名便可），而不用每次都输入IP地址那么麻烦（因为我们也不可能每次重新拨号上网后，又去告诉用户现在的服务器的IP地址什么）。</p>
<p style="text-indent: 2em">例如，我们的花生壳护照下有一个域名www.oray.net ，那么只要在电脑上用该护照登陆了花生壳客户端。当别人输入www.oray.net的时候，会自动解析到那台电脑所在的网络的公网IP地址。</p>
<p style="text-indent: 2em">也就是说，具体的服务器，是要我们自己去设置完成的。而不同的上网方式，建立服务器的方式是不同的，下面介绍两种常见上网方法的服务器的建立。（这两个上网方法主要区别在于用来做服务器的计算机，能否得到公网的IP地址）。</p>
<p style="text-indent: 2em">二．ADSL直接拨号上网（不经过路由器等路由设备）</p>
<p style="text-indent: 2em">如果是通过ADSL Modem直接ADSL拨号上网，那么您的计算机获得的是公网的IP地址。</p>
<p style="text-indent: 2em">可以参考这里面的文章来直接建立服务器：<a href="http://www.oray.net/Help/Samples/Help_Samples.htm"><font color="#e179de">http://www.oray.net/Help/Samples/Help_Samples.htm</font></a> 。</p>
<p style="text-indent: 2em">三．通过路由器共享上网（也就是处于局域网内部）</p>
<p style="text-indent: 2em">如果您是通过路由器上网，那么则需要在路由器上做端口映射，外网的计算机才能访问你的服务器。</p>
<p style="text-indent: 2em">背景知识：</p>
<p style="text-indent: 2em">1．什么是私有IP地址（内网IP地址）？</p>
<p style="text-indent: 2em">私有地址，这些地址被大量用于企业内部网络中。一些宽带路由器，也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连，因而可能使用随意的IP地址。保留组的地址供其使用是为了避免以后接入公网时引起地址混乱。使用私有网络在接入Internet事，要使用实质翻译（NAT），将私有地址翻译成公用合法地址。在Internet上，这类地址是不能出现的。</p>
<p style="text-indent: 2em">2．私有IP地址的范围（形式）：</p>
<p style="text-indent: 2em">192.168.x.x （如上图里面的192.168.1.10到192.168.1.12）</p>
<p style="text-indent: 2em">10.x.x.x</p>
<p style="text-indent: 2em">172.16.x.x ～172.31.x.x</p>
<p style="text-indent: 2em">为什么局域网内做服务器要在路由器上做端口映射？</p>
<p style="text-indent: 2em">首先，我们必须清楚：</p>
<p style="text-indent: 2em">（1）Internet网络中，只有公网IP是能够互相通讯的。</p>
<p style="text-indent: 2em">（2）局域网内，通一网段的私有IP地址能够互相通讯。（但公网IP不能和私有IP直接互相通讯。）</p>
<p style="text-indent: 2em">（3）路由器一般有两个IP：一个是公网IP地址（用于和公网的计算机通讯）。一个是内网（私有）IP（用于和内网的计算机通讯）。</p>
<p style="text-indent: 2em">（4）与路由器连接的计算机，获取的只是内网（私有）IP地址。只能通过路由器和公网的其它计算机进行通讯。</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （它自己是不能直接和外网的计算机通讯的）</p>
<p style="text-indent: 2em">注意第（2）点，这就是为什么许多朋友都问：&ldquo;为什么我的网站在局域网的电脑上可以浏览，但外网的电脑却打不开？&rdquo;的主要原因。</p>
<p style="text-indent: 2em">常见的服务器端口号：</p>
<p style="text-indent: 2em">WEB服务器（网站服务器）：80端口</p>
<p style="text-indent: 2em">FTP服务器（文件服务器）：21端口</p>
<p style="text-indent: 2em">终端服务器：3389端口</p>
<p style="text-indent: 2em">邮件服务器：25端口（SMTP）和110端口（POP）</p>
<p style="text-indent: 2em">VPN服务器：1723端口</p>
<p style="text-indent: 2em">实例说明</p>
<p style="text-indent: 2em">假设现在外网有一台ADSL直接拨号上网的电脑，所获得的是公网IP（61.168.45.23）。然后它想访问局域网内的电脑</p>
<p style="text-indent: 2em">（192.168.1.10）上面的网站。</p>
<p style="text-indent: 2em">（路由器上已经做好了端口映射。具体规则是：将所有发向自己80端口的数据，都转发到内网的计算机192.168.1.10上。）</p>
<p style="text-indent: 2em">访问过程如下：</p>
<p style="text-indent: 2em">①公网电脑（61.168.45.23）向路由器（218.6.146.31）发送请求，要求访问它的80端口。（相同道理，如果是要访问FTP服务器，</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; 则发送访问路由器21端口的请求。）</p>
<p style="text-indent: 2em">②路由器收到请求后，按照端口映射的规则，通过内网IP地址192.168.1.1把请求的数据发送到局域网内的计算机192.168.1.10上。</p>
<p style="text-indent: 2em">③计算机192.168.1.10收到请求后，把自己电脑中网站的数据发送到路由器。</p>
<p style="text-indent: 2em">④路由器收到计算机192.168.1.10发来的数据后，通过公网IP 218.6.146.31把它们发送到公网的计算机61.168.45.23上去。</p>
<p style="text-indent: 2em">下面我们就结合花生壳，再来说明上面的例子：</p>
<p style="text-indent: 2em">例如</p>
<p style="text-indent: 2em">我们的花生壳护照abc下有一个域名www.oray.net，那么我们在192.168.1.10上，用护照abc登陆花生壳客户端。这时候，www.oray.net 对应的IP地址就是路由器的公网IP地址218.6.146.31了。具体访问过程如下：</p>
<p style="text-indent: 2em">①公网电脑（61.168.45.23）的用户输入www.oray.net，想要访问192.168.1.10上的网站。</p>
<p style="text-indent: 2em">②花生壳的域名服务器告诉计算机61.168.45.23，www.oray.net这个域名对应的IP地址是218.6.146.31。</p>
<p style="text-indent: 2em">③于是，计算机61.168.45.23向路由器（218.6.146.31）发送请求，要求访问它的80端口。</p>
<p style="text-indent: 2em">④路由器收到请求后，按照端口映射的规则，通过内网IP地址192.168.1.1把请求的数据发送到局域网内的计算机192.168.1.10上。</p>
<p style="text-indent: 2em">⑤计算机192.168.1.10收到请求后，把自己电脑中网站的数据发送到路由器。</p>
<p style="text-indent: 2em">⑥路由器收到计算机192.168.1.10发来的数据后，通过公网IP 218.6.146.31把它们发送到公网的计算机61.168.45.23上去。</p>
<p style="text-indent: 2em">可以看到，其实正个过程和原来差不多是一样的，只是前面部分稍微有点不同，多了个域名解析过程而已。</p>
<p style="text-indent: 2em">四．到底什么是端口</p>
<p style="text-indent: 2em">　　在网络技术中，端口的英文是Port，它有有两种解释：</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一是物理意义上的端口，比如，ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口，如RJ-45端口、SC端口等等。</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二是逻辑意义上的端口，一般是指TCP/IP协议中的端口，端口号的范围从0到65535，比如用于浏览网页服务的80端口，用于FTP服务的21端口等等。我们这里将要介绍的就是逻辑意义上的端口。</p>
<p style="text-indent: 2em">　　端口的分类</p>
<p style="text-indent: 2em">　　逻辑意义上的端口有多种分类标准，下面将介绍两种常见的分类：</p>
<p style="text-indent: 2em">　　1. 按端口号分布划分</p>
<p style="text-indent: 2em">　　（1）知名端口（Well-Known Ports）</p>
<p style="text-indent: 2em">　　知名端口即众所周知的端口号，范围从0到1023，这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务，25端口分配给SMTP（简单邮件传输协议）服务，80端口分配给HTTP服务，135端口分配给RPC（远程过程调用）服务等等。</p>
<p style="text-indent: 2em">　　（2）动态端口（Dynamic Ports）</p>
<p style="text-indent: 2em">　　动态端口的范围从1024到65535，这些端口号一般不固定分配给某个服务，也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请，那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后，就会释放所占用的端口号。</p>
<p style="text-indent: 2em">　　不过，动态端口也常常被病毒木马程序所利用，如冰河默认连接端口是7626、WAY 2.4是8011、Netspy 3.0是7306、YAI病毒是1024等等。</p>
<p style="text-indent: 2em">　　2. 按协议类型划分</p>
<p style="text-indent: 2em">　　按协议类型划分，可以分为TCP、UDP、IP和ICMP（Internet控制消息协议）等端口。下面主要介绍TCP和UDP端口：</p>
<p style="text-indent: 2em">　　（1）TCP端口</p>
<p style="text-indent: 2em">　　TCP端口，即传输控制协议端口，需要在客户端和服务器之间建立连接，这样可以提供可靠的数据传输。常见的包括FTP服务的21端口，Telnet服务的23端口，SMTP服务的25端口，以及HTTP服务的80端口等等。</p>
<p style="text-indent: 2em">　　（2）UDP端口</p>
<p style="text-indent: 2em">　　UDP端口，即用户数据包协议端口，无需在客户端和服务器之间建立连接，安全性得不到保障。常见的有DNS服务的53端口，SNMP（简单网络管理协议）服务的161端口，QQ使用的8000和4000端口等等</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 怎样去查看（找）端口呢？</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提示：本人对Windows系统熟悉点，所以不阐述其它系统了！见谅！</p>
<p style="text-indent: 2em">　　在Windows 2000/XP/Server 2003中要查看端口，可以使用Netstat命令：</p>
<p style="text-indent: 2em">　　依次点击&ldquo;开始&rarr;运行&rdquo;，键入&ldquo;cmd&rdquo;并回车，打开命令提示符窗口。在命令提示符状态下键入&ldquo;netstat -a -n&rdquo;，按下回车键后就可以看到以数字形式显示的TCP和UDP连接的端口号及状态（如图）。</p>
<p style="text-indent: 2em">QUOTE:</p>
<p style="text-indent: 2em">Microsoft Windows [版本 5.2.3790]</p>
<p style="text-indent: 2em">(C) 版权所有 1985-2003 Microsoft Corp.</p>
<p style="text-indent: 2em">C:\Documents and Settings\Administrator&gt;netstat -a -n</p>
<p style="text-indent: 2em">Active Connections</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; Proto&nbsp;&nbsp;&nbsp;&nbsp; Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:366&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1863&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:4449&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:9189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:23883&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 59.49.233.34:31456&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61.141.167.189:1177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 218.56.136.208:5285&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 221.237.165.17:1213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222.168.11.186:4422&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:1038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222.47.205.27:5050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:4079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 219.136.252.79:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:4604&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83.149.119.17:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLOSE_WAIT</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:4605&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83.149.119.17:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLOSE_WAIT</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:4691&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 165.21.32.111:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIN_WAIT_1</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:4694&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 165.21.32.104:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIN_WAIT_1</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:1044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3348&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3581&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3956&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:3958&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:4500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:4714&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:27099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:29367&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:29368&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3363&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3551&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:3600&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:4321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:17985&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; UDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.1.100:17987&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *:*</p>
<p style="text-indent: 2em">C:\Documents and Settings\Administrator&gt;</p>
<p style="text-indent: 2em">这些，就是你的机器开放和正在使用的端口了！</p>
<p style="text-indent: 2em">（上面的具体参数是什么意思，我们后面再讲，这里不讲那么多，免得新手一下接受不了）</p>
<p style="text-indent: 2em">不过这个操作命令我还是要解释一下，因为我自己也经常忘记</p>
<p style="text-indent: 2em">Netstat命令</p>
<p style="text-indent: 2em">命令格式：Netstat -a -e -n -o -s</p>
<p style="text-indent: 2em">　　－a 表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。</p>
<p style="text-indent: 2em">　　－e 表示显示以太网发送和接收的字节数、数据包数等。</p>
<p style="text-indent: 2em">　　－n 表示只以数字形式显示所有活动的TCP连接的地址和端口号。</p>
<p style="text-indent: 2em">　　－o 表示显示活动的TCP连接并包括每个连接的进程ID（PID）。</p>
<p style="text-indent: 2em">　　－s 表示按协议显示各种连接的统计信息，包括端口号</p>
<p style="text-indent: 2em">netstat命令详解</p>
<p style="text-indent: 2em">Displays protocol statistics and current TCP/IP network connections.</p>
<p style="text-indent: 2em">NETSTAT [-a] [-e] [-n] [-o] [-s] [-p proto] [-r] [interval]</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; nbsp;-a nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays all connections and listening ports.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; -e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays Ethernet statistics. This may be combined with the -s</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; -n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays addresses and port numbers in numerical form.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; -o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays the owning process ID associated with each connection.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; -p proto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shows connections for the protocol specified by proto; proto</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; may be any of: TCP, UDP, TCPv6, or UDPv6.&nbsp;&nbsp;&nbsp;&nbsp; If used with the -s</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; option to display per-protocol statistics, proto may be any of:</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, or UDPv6.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; -r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays the routing table.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; -s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays per-protocol statistics.&nbsp;&nbsp;&nbsp;&nbsp; By default, statistics are</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shown for IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, and UDPv6;</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the -p option may be used to specify a subset of the default.</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; interval&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Redisplays selected statistics, pausing interval seconds</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; between each display.&nbsp;&nbsp;&nbsp;&nbsp; Press CTRL+C to stop redisplaying</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; statistics.&nbsp;&nbsp;&nbsp;&nbsp; If omitted, netstat will print the current</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configuration information once.</p>
<p style="text-indent: 2em">基本是这样了。</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了，基本上，你应该有些端口的概念了！接下来，让我们再来了解，什么叫《端口映射》</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1-为什么要映射：如果你是ADSL、CABLE MODEM或光纤等宽带接入用户，想在网吧或公司内部建一个游戏服务器或WEB服务器，并且能够让互联网上的用户访问你的服务器，那么你就会遇到端口映射问题。 （举个简单例子：你爸上学校找你，来到学校大门却不知道你在哪个教室，这时候值班老师就带你爸爸来到你的教室----&gt;这个过程就如同&ldquo;端口映射&rdquo;）</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2-怎样去映射：通常情况下，路由器都有防火墙功能，互联网用户只能访问到你的路由器WAN口(接ADSL线口)，而访问不到内部服务器。要想让外面用户访问到服务器，那么你就要在路由器上做一个转发设置，也就是端口映射设置，让用户的请求到了路由器后，并能够到达游戏服务器或WEB服务器。这就是端口映射。</p>
<p style="text-indent: 2em">目前，所有的宽带路由器都有端口映射功能，只是各个路由器厂商所取功能名称不一样，有的叫虚拟服务器，有的叫NAT设置。。。</p>
<p style="text-indent: 2em">端口映射设置很简单，例如要映射一台IP地址为192.168.1.254的WEB服务器，只需把服务器的IP地址192.168.1.254和TCP端口80填入到路由器的端口映射表中就OK了，当然不同的服务有不同的端口，新手切勿乱改端口，避免造成冲突，这样的冲突故障一般情况下你是找不到原因的！</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3-射完后，如何检测：举个例子：WEB服务器应该是80端口映射，这时候，先放一个名为index.htm的静态页面，然后用你的ip或者域名输入到地址栏，回车，看看是否能正常访问！</p>
<p style="text-indent: 2em">5．为什么我输入我的域名后，要输入账号和密码？</p>
<p style="text-indent: 2em">（1）路由器（或Modem）中开启了远程管理功能，占用了路由器的80端口，所以每次输入域名（或路由器的公网IP），都会弹出登陆</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 窗口。</p>
<p style="text-indent: 2em">（2）你的Web配置不正确，Web服务器的默认账号没有访问站点目录的权限</p>]]></description>
		</item>
		
			<item>
			<link>http://www.yukidesign.cn/blog/article.asp?id=150</link>
			<title><![CDATA[Flex及AS3的百条常用知识[转载]]]></title>
			<author>jareboy@163.com(jareking)</author>
			<category><![CDATA[AS3]]></category>
			<pubDate>Sat,17 Oct 2009 11:23:25 +0800</pubDate>
			<guid>http://www.yukidesign.cn/blog/default.asp?id=150</guid>
		<description><![CDATA[<p>【改变输出swf的尺度,背景颜色或帧频】<br />
在&quot;Navigator&quot;窗框里右键你的项目&gt;选中&quot;Properties&quot;&gt;选中&quot;ActionScript Compiler&quot;&gt;在&quot;Additional compiler arguments&quot;里输入你所需要的命令<br />
如想改变背景颜色,请输入: -default-background-color 0xffffff<br />
<br />
<br />
<br />
【鼠标坐标】<br />
mouseX mouseY<br />
<br />
【检查变量类型并返回布尔值】<br />
is<br />
<br />
【检查变量类型并返回类型】<br />
typeof<br />
<br />
【检查对象类型并返回该对象】<br />
as<br />
<br />
【是数字但不是有效数字问题】<br />
var quantity:Number = 15 - &quot;rabbits&quot;;<br />
trace(typeof quantity); //显示: &quot;number&quot; , 但它是NaN (not a number)<br />
trace(quantity is Number); //true<br />
trace(quantity != NaN); //false<br />
//使用isNaN()函数检测:<br />
isNaN(quantity); //true<br />
//检测变量是否内含有效数字:<br />
!isNaN(quantity); //false<br />
<br />
【取消默认的严格编译模式】<br />
在&quot;Navigator&quot;窗框里右键你的项目&gt;选中&quot;Properties&quot;&gt;选中&quot;ActionScript Compiler&quot;&gt;取消&quot;Enabel compile-time type checking&quot;选项<br />
<br />
【基元数据类型和复杂数据类型好比&quot;值类型&quot;和&quot;引用类型&quot;】<br />
基元数据类型类似按值传递:<br />
var intOne:int = 1;<br />
var intTwo:int = 1;<br />
trace(intOne == intTwo); //true<br />
<br />
【复杂数据类型类似按引用传递】<br />
var arrayOne:Array = new Array(&quot;a&quot;, &quot;b&quot;);<br />
var arrayTwo:Array = arrayOne;<br />
trace(arrayOne == arrayTwo); //true<br />
//-----------------------------------<br />
var arrayOne:Array = new Array(&quot;a&quot;, &quot;b&quot;);<br />
var arrayTwo:Array = new Array(&quot;a&quot;, &quot;b&quot;);<br />
trace(arrayOne == arrayTwo); //false<br />
<br />
【优化逻辑AND(&amp;&amp;)和OR(||)的小知识】<br />
对于逻辑And(&amp;&amp;):<br />
&nbsp;&nbsp;&nbsp;&nbsp;除非条件表达式的前半部分为真,否则,ActionScript不会再去求算逻辑AND运算符的后半部.如果前半部为假,整个条件表达式一定为假,所以再去求算后半部就没效率了.<br />
对于逻辑OR(||):<br />
&nbsp;&nbsp;&nbsp;&nbsp;除非条件表达式前半部为假,否则,ActionScript不会再去求算逻辑OR运算符的后半部,如果前半部为真,整个条件表达式一定为真.<br />
总结:使用逻辑AND(&amp;&amp;)时,把结果最可能为false的表达式放到前面;使用逻辑OR(||)时,把结果最可能为true的表达式放到前面.<br />
<br />
【Timer类注意事项】<br />
不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.<br />
<br />
【private,protected,internal,public访问权限】<br />
private:只能在类本身内部访问,按惯例,命名私有成员时以下划线&quot;_&quot;开头;<br />
protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线&quot;_&quot;开头;<br />
internal:可以由类本身或者相同包内的任何类访问;<br />
public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.<br />
<br />
【一个函数具有未知个数的参数,用arguments对象或&quot;...(rest)&quot;符号访问它的参数】<br />
注意:使用&quot;...(rest)&quot;参数会使 arguments 对象不可用;<br />
private funciton average():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(arguments.length); //输出参数的个数<br />
&nbsp;&nbsp;&nbsp;&nbsp;// arguments的类型是:object,但可以像访问数组一样去访问它<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(arguments[1]); //输出第二个参数<br />
}<br />
private function average(...argu):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(argu[1]); //输出第二个参数,argu参数名是自定义的.<br />
}<br />
<br />
【错误处理try,catch,finally】<br />
private function tryError():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;测试开始-try&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throwError();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}catch(errObject:Error) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;错误信息:&quot; + errObject.message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;测试结束-catch&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}finally{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;虽然catch里已经有return方法,但位于return方法后面的finally里的代码依然会被执行.其实无论return方法是在try里,还是catch里,finally里的代码始终会被执行&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;前面已经有return了,此处是不会再执行的.除非没有抛出错误,以使catch里的代码没有被执行&quot;);<br />
}<br />
private function throwError():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw new Error(&quot;抛出错误&quot;);<br />
}<br />
<br />
【for...in与for each...in的区别】<br />
与for...in循环不同的是,for each...in循环中的迭代变量包含属性所保存的值,而不包含属性的名称(或主键,索引).<br />
<br />
【命名包路径的小技巧】<br />
&nbsp;&nbsp;&nbsp;&nbsp;使用相应于拥有者和相关项目的包名称会比较好.按惯例来讲,包名称的开头应该是逆向的网址名称.例如,如果Example Corp(examplecorp.com)写了一些ActionScript3.0类,就会把所有类放在com.examplecorp包内(或者 com.examplecorp的子包内).如此一来,如果英国有另一家Example Corp(examplecorp.co.uk)也写了一些ActionScript3.0类,只要使用包uk.co.examplecorp,就可确保唯一性.<br />
&nbsp;&nbsp;&nbsp;&nbsp;当类属于特定应用程序的一部分时,就应该放在该应用程序特定的子包内.例如,Example Corp可能有个应用程序名叫WidgetStore.如果WidgetStore应用程序使用一个名为ApplicationManager的类,则此类就应该放在com.examplecorp.widgetstore包内,或者位于该包的子包内.<br />
&nbsp;&nbsp;&nbsp;&nbsp;按惯例来说,包名称的开头是小写字母.<br />
<br />
【隐式的取出方法(getter)和设定方法(setter)】<br />
public function get count():uint {<br />
&nbsp;&nbsp;&nbsp;&nbsp;return _count;<br />
}<br />
public function set count(value:uint):uint {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(value &lt; 100){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_count = value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw Error();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
【确保类是绝不会有子类,使用final】<br />
final public class Example{}<br />
<br />
【super关键字的使用】<br />
super(); //父类的构造函数,只能在类实例构造函数内部使用<br />
super.propertyName; //调用父类的属性,属性需要声明为public或protected<br />
super.methodName(); //调用父类的方法,方法需要声明为public或protected<br />
<br />
【建立常数,使用关键字const而不是var】<br />
static public const EXAMPLE:String = &quot;example&quot;;<br />
<br />
【检测播放器版本】<br />
flash.system.Capabilities.version<br />
对于8.5版以前的任何Flash Player版本,这种方法都不适用.<br />
<br />
【判断客户端系统】<br />
flash.system.Capabilities.os<br />
<br />
【检测播放器类型】<br />
flash.system.Capabilities.playerType<br />
可能的值有:<br />
&quot;StandAlone&quot;，用于独立的 Flash Player<br />
&quot;External&quot;，用于外部的 Flash Player 或处于测试模式下<br />
&quot;PlugIn&quot;，用于 Flash Player 浏览器插件<br />
&quot;ActiveX&quot;，用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件<br />
<br />
【检测系统语言】<br />
flash.system.Capabilities.language<br />
<br />
【判断用户是否启用了IME(输入法编辑器)】<br />
flash.system.IME.enabled<br />
<br />
【检测屏幕的分辨率】<br />
flash.system.Capabilities.screenResolutionX<br />
flash.system.Capabilities.screenResolutionY<br />
<br />
【把弹出窗口居中的算法】<br />
X = (舞台宽/2)-(窗口宽/2)<br />
Y = (舞台高/2)-(窗口高/2)<br />
<br />
【控制影片配合Player的方式,包括缩放问题】<br />
stage.scaleMode<br />
可供选择值:flash.display.StageScaleMode<br />
<br />
【舞台的对齐方式】<br />
stage.align<br />
可供选择值:flash.display.StageAlign<br />
<br />
【隐藏Flash Player的右键菜单】<br />
stage.showDefaultContextMenu = false;<br />
<br />
【检测系统是否具有音频功能】<br />
flash.system.Capabilities.hasAudio<br />
<br />
【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】<br />
flash.system.Capabilities.hasMP3<br />
<br />
【检测播放器能 (true) 还是不能 (false) 播放流式视频】<br />
flash.system.Capabilities.hasStreamingVideo<br />
<br />
【检测播放器是在支持 (true) 嵌入视频的系统上运行，还是在不支持 (false) 嵌入视频的系统上运行】<br />
flash.system.Capabilities.hasEmbeddedVideo<br />
<br />
【检测播放器能 (true) 还是不能 (false) 对视频流（如来自 Web 摄像头的视频流）进行编码】<br />
flash.system.Capabilities.hasVideoEncoder<br />
<br />
【显示 Flash Player 中的&quot;安全设置&quot;面板】<br />
flash.system.Security.showSettings();<br />
可供选择项:flash.system.SecurityPanel<br />
<br />
【让其它域的.swf访问本域的.swf】<br />
在本域的.swf文件里加上:flash.system.Security.allowDomain()<br />
或者使用安全策略文件&quot;crossdomain.xml&quot;.在Flash 8以前,这个文件必须放在.swf所在域的根目录,现在,你可以使用flash.system.Security.loadPolicyFile(),指定安全策略文件所在的位置.拒绝任何域的做法是在&lt;cross-domain-policy&gt;标签内什么也不填,安全策略文件也支持通用字符 &quot;*&quot;:<br />
&lt;?xml version=&quot;1.0&quot;?&gt;<br />
&lt;!--&nbsp;<a href="http://uh.actionscript3.cn/link.php?url=http://www.mydomain.com%2Fcrossdomain.xml" target="_blank">http://www.mydomain.com/crossdomain.xml</a>&nbsp;--&gt;<br />
&lt;cross-domain-policy&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;allow-access-from domain=&quot;www.riahome.cn&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;allow-access-from domain=&quot;*.Y-boy.cn&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;allow-access-from domain=&quot;210.38.196.48&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;allow-access-from domain=&quot;*&quot; /&gt;<br />
&lt;/cross-domain-policy&gt;<br />
<br />
【数字的不同进制之间的转换】<br />
parseInt(str:String, radix:uint = 0):Number 返回十进制的数,参数radix表示要分析的数字的基数.如果省略radix,就默认为10,除非字符串的开头是&quot;0x&quot;,&quot;0X&quot;或&quot;0&quot;:<br />
trace(parseInt(&quot;0x12&quot;)); //设定radix为16,输出:18<br />
trace(parseInt(&quot;017&quot;)); //设定radix为8,输出:15<br />
或者使用Number,uint和int对象的toString(radix)方法.<br />
<br />
【使用Math.round()对一个数取整,四舍五入】<br />
Math.round()<br />
trace(Math.round(204.499)); //输出:204<br />
trace(Math.round(401.5)); //输出:402<br />
<br />
【使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分】<br />
trace(Math.floor(204.99)); //输出:204<br />
<br />
【使用Math.ceil()对一个数向上取整,只要小数部分不为零,整数部分就加1】<br />
trace(Math.ceil(401.01)); //输出:402<br />
<br />
【产生一个随机数】<br />
使用Math.random()产生一个伪随机数n,其中 0 &lt;= n &lt; 1<br />
<br />
【把数字取至最近的小数点位,即指定精确度】<br />
1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;<br />
2. 让输入值除以步骤1所选的数字(此例为0.01);<br />
3. 使用Math.round()把步骤2所计得的值取成最近的整数;<br />
4. 把步骤3所得的结果乘以步骤2用于除法的那个值.<br />
例如,要把90.337取成两个小数点位数,可以使用:<br />
trace(Math.round(90.337/0.01)*0.01); //输出:90.34<br />
<br />
【把数字取成一个整数的最接近倍数值】<br />
例1,这样会把92.5取成5的最近倍数值:<br />
trace(Math.round(92.5/5)*5); //输出:95<br />
例2,这样会把92.5取成10的最近倍数值:<br />
trace(Math.round(92.5/10)*10); //输出:90<br />
<br />
【在指定数值范围内获得随机数】<br />
//可取范围:[min, max]<br />
private function randRange(min:Number, max:Number):Number {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return randomNum;<br />
}<br />
应用例子:<br />
模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);<br />
模拟投骰子,即希望得到随机六个值: randRange(1, 6);<br />
为避免被缓存而需要产生一个独一无二的数字追加在URL尾端,通常最佳方法是取得当前毫秒数.<br />
<br />
【弧度(radian)与度数(degree)之间的转换】<br />
从弧度转为度数: degrees = radians * 180 / Math.PI<br />
从度数转为弧度: radians = degrees * Math.PI / 180<br />
<br />
【计算两点之间的距离】<br />
勾股定理: c2 = a2 + b2<br />
假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:<br />
var c:Number = Math.sqrt(Math.pow(mc1.x - mc2.x, 2) + Math.pow(mc1.y - mc2.y, 2));<br />
<br />
【模拟圆周运动】<br />
已知圆心o(x0, y0),半径r和弧度angle,求圆上任意一点P(x, y)的坐标:<br />
x = x0 + (Math.cos(angle) * r);<br />
y = y0 + (Math.sin(angle) * r);<br />
注意:舞台的x轴正方向水平向右,y轴正方向垂直向下.<br />
<br />
【模拟椭圆运动】<br />
已知圆心o(x0, y0),长轴a,短轴b以及弧度angle,求圆上任意一点P(x, y)的坐标:<br />
x = x0 + (Math.cos(angle) * a);<br />
y = y0 + (Math.sin(angle) * b);<br />
<br />
<br />
【华氏温度和摄氏温度之间的转换】<br />
华氏温度 = 摄氏度数 * 9 / 5 + 32<br />
摄氏温度 = (华氏度数 - 32) * 5 /9<br />
<br />
【公斤与磅之间的转换】<br />
公斤 = 磅 * 2.2<br />
磅 = 公斤 / 2.2<br />
<br />
【向数组尾端添加元素】<br />
var array:Array = new Array();<br />
array.push(&quot;a&quot;, &quot;b&quot;);<br />
//向数组尾端添加单一元素也可以这样:<br />
array[array.length] = &quot;c&quot;;<br />
//如果以索引设定的元素不存在,数组本身会自动扩展以包含足够的元素数目.介于中间的元素会被设为undefined:<br />
array[5] = &quot;e&quot;;<br />
trace(array[4]); //输出: undefined<br />
<br />
【向数组开端添加元素】<br />
var array:Array = [&quot;a&quot;, &quot;b&quot;];<br />
array.unshift(&quot;c&quot;, &quot;d&quot;);<br />
trace(array); //输出: c,d,a,b<br />
<br />
【删除数组中第一个元素并返回该元素,使用shift()方法】<br />
var letters:Array = new Array(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;);<br />
var firstLetter:String = letters.shift();<br />
trace(letters); //输出: b,c<br />
trace(firstLetter); //输出: a<br />
<br />
【删除数组中最后一个元素并返回该元素的值,使用pop()方法】<br />
var letters:Array = new Array(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;);<br />
trace(letters); //输出: a,b,c<br />
var letter:String = letters.pop();<br />
trace(letters); //输出: a,b<br />
trace(letter); //输出: c<br />
<br />
【删除数组中的元素,给数组添加新元素并返回删除的元素,使用splice()方法】<br />
splice(startIndex:int, deleteCount:uint, ... values):Array<br />
startIndex: 一个整数，它指定数组中开始进行插入或删除的位置处的元素的索引;<br />
deleteCount: 一个整数，它指定要删除的元素数量;<br />
... values: 用逗号分隔的一个或多个值的可选列表或数组，此列表或数组将插入到此数组中由 startIndex 参数指定的位置.<br />
<br />
【查找数组中第一个相匹配的元素】<br />
var array:Array = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;, &quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;];<br />
var match:String = &quot;b&quot;;<br />
for(var i:int = 0; i &lt; array.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(array[i] == match) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;Element with index &quot; + i + &quot; found to match &quot; + match);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出: Element with index 1 found to match b<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
【查找数组中最后一个相匹配的元素】<br />
var array:Array = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;, &quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;];<br />
var match:String = &quot;b&quot;;<br />
for(var i:int = array.length - 1; i &gt;= 0; i--) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(array[i] == match) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;Element with index &quot; + i + &quot; found to match &quot; + match);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出: Element with index 5 found to match b<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
【把字符串转成数组】<br />
使用String.split()方法:<br />
var list:String = &quot;I am YoungBoy.&quot;;<br />
var words:Array = list.split(&quot; &quot;); //以空格作为分隔符将字符串切割<br />
trace(words); //输出: I,am,YoungBoy.<br />
<br />
【把数组转成字符串】<br />
使用String.join()方法:<br />
var myArr:Array = new Array(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;);<br />
var myStr:String = myArr.join(&quot; and &quot;);<br />
trace(myArr); //输出: one,two,three<br />
trace(myStr); //输出: one and two and three<br />
<br />
【使用对象数组处理相关数据】<br />
var cars:Array = new Array();<br />
cars.push({make:&quot;Mike&quot;, year:1997, color:&quot;blue&quot;});<br />
cars.push({make:&quot;Kelly&quot;, year:1986, color:&quot;red&quot;});<br />
for(var i:int = 0; i &lt; cars.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(cars[i].make + &quot; - &quot; + cars[i].year + &quot; - &quot; + cars[i].color);<br />
}<br />
//输出:<br />
//&nbsp;&nbsp;&nbsp;&nbsp; Mike - 1997 - blue<br />
//&nbsp;&nbsp;&nbsp;&nbsp; Kelly - 1986 - red<br />
<br />
【在数组中获取最小或最大值】<br />
var scores:Array = [10, 4, 15, 8];<br />
scores.sort(Array.NUMERIC);<br />
trace(&quot;Minimum: &quot; + scores[0]);<br />
trace(&quot;Maximum: &quot; + scores[scores.length - 1]);<br />
<br />
【使用for ... in语句读取关联数组元素】<br />
var myObject:Object = new Object();<br />
myObject.name = &quot;YoungBoy&quot;;<br />
myObject.age = 20;<br />
for(var i:String in myObject) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(i + &quot;: &quot; + myObject[i]);<br />
}<br />
//输出: name: YoungBoy<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age: 20<br />
注意: for ... in循环不会显示对象所有的内建属性.例如,循环会显示执行期间新增的特殊属性,但是,不会列出内建对象的方法,即使都是储存在对象属性内.<br />
<br />
【AVM(ActionScript Virtual Machine,虚拟机)和渲染引擎(Rendering Engine)】<br />
AVM负责执行ActionScript程序,而渲染引擎则是把对象绘制在显示器上.<br />
<br />
【指出容器的显示清单中有多少显示对象】<br />
每个容器都有numChildren属性.<br />
<br />
【把项目新增至显示清单】<br />
addChild(child:DisplayObject)<br />
addChildAt(child:DisplayObject, index:int)<br />
index: 添加该子项的索引位置.如果指定当前占用的索引位置,则该位置以及所有更高位置上的子对象会在子级列表中上移一个位置.<br />
<br />
【从显示清单中移除项目】<br />
removeChild(child:DisplayObject)<br />
removeChildAt(index:int)<br />
index: 要删除的 DisplayObject 的子索引,该子项之上的任何显示对象的索引位置都减去1.<br />
如果想移除窗口所有子元件,可以结合removeChildAt(),numChildren属性以及for循环.因为每次一个子元件被移除时,索引位置都会变化,所以,有两种方法可以处理所有子元件的移除:<br />
1. 总是移除位置0的子元件;<br />
2. 倒过来移除子元件,也就是从尾端开始.<br />
<br />
【更改现有子项在显示对象容器中的位置】<br />
setChildIndex(child:DisplayObject, index:int):void<br />
可能用到的方法:<br />
返回 DisplayObject 的 child 实例的索引位置: getChildIndex(child:DisplayObject):int<br />
返回位于指定索引处的子显示对象实例: getChildAt(index:int):DisplayObject<br />
注意: 当子元件移到低于它现在所在位置的索引时,那么,从标的索引起,直到子元件索引前面的那个索引的所有子元件都会令其索引增加1,而该子元件就会指定至标的索引.当子元件移到较高索引时,从该子元件索引之上的那个索引起,直到标的索引的所有子元件都会令其索引往下减1,而该子元件就会指定至标的索引值.<br />
<br />
【关于TextField以垂直方式把文字摆在按钮表面中心点的小技巧】<br />
textField.y = (_height - textField.textHeight) / 2;<br />
textField.y -= 2; //减2个像素以调整偏移量<br />
<br />
【外部.swf影片载入和互动】<br />
1. 监听init事件;<br />
2. 透过content属性存取所载入的影片.<br />
当所载入的影片做好足够的初始化工作,使其方法和属性可以接受互动时,init事件就会被发起.只有在载入器发起init事件后,才能控制影片.所载入的影片还没初始化就试着与它互动,是会产生执行期间错误的.<br />
_loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit); //当载入的.swf的属性和方法可用时<br />
_loader.load(new URLRequest(&quot;ExternalMovie.swf&quot;));<br />
private function handleInit(event:Event):void {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var movie:* = _loader.content;<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(movie.getColor());<br />
&nbsp;&nbsp;&nbsp;&nbsp;movie.setColor(0xFF0000);<br />
}<br />
<br />
【TextField有两种类型:动态(dynamic)和输入(input),默认值为动态.改变TextField类型方法】<br />
field.type = TextFieldType.INPUT; //selectable属性默认值为true<br />
flash.text.TextFieldType.INPUT和flash.text.TextFieldType.DYNAMIC<br />
<br />
【过滤文字输入】<br />
TextField.restrict = &quot;此处为可输入的内容&quot;;<br />
field.restrict = &quot;^此处为禁止输入的内容&quot;;<br />
restrict属性支持一些类似正则表达式的样式:<br />
field.restrict = &quot;a-zA-z&quot;; //只允许大小字母<br />
field.restrict = &quot;a-zA-z &quot;; //只允许字母和空格<br />
field.restrict = &quot;0-9&quot;; //只允许数字<br />
field.restrict = &quot;^abcdefg&quot;; //除了小写字母abcdefg不允许外,其它都允许<br />
field.restrict = &quot;^a-z&quot;; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母<br />
field.restrict = &quot;0-9^5&quot;; //只允许数字,但5例外<br />
让restrict字符包含具有特殊意义的字母(例如-和^):<br />
field.restrict = &quot;0-9\\-&quot;; //允许数字和破折号<br />
field.restrict = &quot;0-9\\^&quot;; //允许数字和^<br />
field.restrict = &quot;0-9\\\\&quot;; //允许数字和反斜杠<br />
你也可以使用Unicode转义序列,指定允许的内容.例如:<br />
field.restrict = &quot;^\u001A&quot;;<br />
注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.<br />
<br />
【设定输入框的最大长度】<br />
TextField.maxChars:int<br />
<br />
【向TextField追加内容】<br />
TextField.appendText(text:String):void<br />
与通过对 text 属性使用加法赋值来连接两个字符串(例如 field.text += moreText)相比,此方法的效率更高.<br />
<br />
【显示HTML格式的文字】<br />
TextField.htmlText = &quot;&lt;b&gt;Html text&lt;/b&gt;&quot;;<br />
支持的HTML标签集有: &lt;b&gt;,&lt;i&gt;,&lt;u&gt;,&lt;font&gt;(有face,size以及color属性),&lt; p&gt;,<br />
,&lt;a&gt;,&lt;li&gt;,&lt;img&gt;以及&lt;textformat&gt;(有 leftmargin,rightmargin,blockindent,indent,leading以及tabstops属性,相应于 TextFormat类的同名属性)<br />
<br />
【缩减空白】<br />
TextField.condenseWhite = true;<br />
删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.<br />
注意: 在设置 htmlText 属性之前设置 condenseWhite 属性<br />
<br />
【自动大小调整和对齐】<br />
TextField.autoSize = TextFieldAutoSize.LEFT;<br />
可选之值:<br />
flash.text.TextFieldAutoSize.CENTER<br />
flash.text.TextFieldAutoSize.LEFT<br />
flash.text.TextFieldAutoSize.NONE<br />
flash.text.TextFieldAutoSize.RIGHT<br />
<br />
【指示文本字段是否自动换行】<br />
TextField.wordWrap = true; //自动换行<br />
<br />
【用程序手段滚动文字】<br />
水平方向以像素为单位,而垂直方向以行做单位:<br />
scrollV: 指出文字框可见区域的最顶行,可读写;<br />
bottomScrollV: 指出文字框内最底端可见行,只读;<br />
maxScrollV: scrollV的最大值,只读;<br />
numLines: 定义多行文本字段中的文本行数,只读;<br />
TextField.scrollV = field.maxScrollV; //滚动到最后一页<br />
<br />
【响应滚动事件】<br />
field.addEventListener(Event.SCROLL, onTextScroll);<br />
<br />
【样式化文字的方法】<br />
1. 使用HTML标签进行样式化;<br />
2. 使用TextFormat对象;<br />
3. 使用CSS.<br />
例如: HTML是用&lt;font&gt;标签,TextFormat对象是设定font属性,而CSS是使用font-family属性的.<br />
受支持的层叠样式表(CSS)属性和值,及其相应的ActionScript属性名称(小括号内):<br />
color(color),display(display),font-family(fontFamily),font-size(fontSize),font-style(fontStyle),font-weight(fontWeight),kerning(kerning),leading(leading),letter-spacing(letterSpacing),margin-left(marginLeft),margin-right(marginRight),text-align(textAlign),text-decoration(textDecoration),text-indent(textIndent)<br />
受支持的HTML实体: &lt;(小于号: &lt;), &gt;(大于号: &gt;), &amp;(和: &amp;), &quot;(双引号: &quot;), '(撇号,单引号: &amp;apos;)<br />
其中样式对象的两种写法:<br />
写法一:<br />
var sampleStyle:Object = new Object();<br />
sampleStyle.color = &quot;#FFFFFF&quot;;<br />
sampleStyle.textAlign = &quot;center&quot;;<br />
css.setStyle(&quot;.sample&quot;, sampleStyle);<br />
写法二:<br />
var sampleStyle:Object = {color: &quot;#FFFFFF&quot;, textAlign: &quot;center&quot;};<br />
css.setStyle(&quot;.sample&quot;, sampleStyle);<br />
<br />
【对用户输入的文字进行样式化】<br />
使用defaultTextFormat属性,样式会施加至用户键入输入框的文字身上:<br />
var formatter:TextFormat = new TextFormat();<br />
formatter.color = 0x0000FF; //把文字变成蓝色<br />
field.defaultTextFormat = formatter;<br />
<br />
【对现有文字的一部分进行样式化】<br />
TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void<br />
<br />
【设定文字框的字体】<br />
例子:<br />
HTML: field.htmlText = &quot;&lt;font face='Arial'&gt;Formatted text&lt;/font&gt;&quot;;<br />
TextFormat: formatter.font = &quot;Arial&quot;;<br />
CSS: P{ font-family: Arial; }<br />
也可以使用以逗号隔开的字体清单: formatter.font = &quot;Arial, Verdana, Helvetica&quot;;<br />
注意:<br />
字体和字体群组不同.字体群组有三种: _sans,_serif以及_typewriter.<br />
_sans群组一般就是指Arial或Helvetica这种字体;<br />
_serif群组一般就是指Times或Times New Roman这种字体;<br />
_typewriter群组一般就是指Courier或Courier New这种字体.<br />
<br />
【嵌入字体】<br />
使用[Embed]后设标签.[Embed]后设标签应该出现在ActionScript文件中,处于类宣告之外.你可以内嵌TrueType字体或系统字体.内嵌TrueType字体时的语法:<br />
[Embed(source=&quot;pathToTtfFile&quot;, fontName=&quot;FontName&quot;, mimeType=&quot;application/x-font-truetype&quot;)]<br />
pathToTtfFile: ttf文件的路径,TrueType字体的路径可以是相对的,也可以是绝对的;<br />
FontName: 字体名称;<br />
内嵌系统字体的语法:<br />
[Embed(systemFont=&quot;Times New Roman&quot;, fontName=&quot;Times New Roman&quot;, mimeType=&quot;application/x-font-truetype&quot;)]<br />
fontName: 以相同名称作为实际系统字体名称.<br />
注意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替 embedFonts设为true的TextField使用设备字体,什么都不会显示.如果embedFonts设为true,就无法指定以逗号相隔的字体清单.<br />
<br />
【建立可以旋转的文字】<br />
使用内嵌字体.当你旋转文字框时,设备字体就会消失.<br />
<br />
【显示Unicode文字】<br />
1. 从外部来源载入Unicode文字;<br />
2. 假如你的编辑器支持Unicode(如 Flex Builder),则可以直接在ActionScript程序中使用该字符;<br />
3. 使用Unicode转义字符,ActionScript里所有Unicode转义字符都以\u开头,后面再跟四位十六进制数字.<br />
注意: 如果你想取得Unicode字符,在Windows下使用: 开始&gt;所有程序&gt;附件&gt;系统工具&gt;字符映射表.<br />
<br />
【把Flash Player的焦点带给文字框】<br />
stage.focus = field;<br />
把焦点移除:<br />
stage.focus = null;<br />
注意: 当.swf文件首次载入至网页浏览器时,并没有焦点.因此,以程序的方式把焦点指定给Flash应用程序的一个元素前,必须先把焦点移至Flash Player.<br />
<br />
【以ActionScript选取文字】<br />
使用TextField.setSelection(beginIndex:int, endIndex:int):void<br />
为了可以正常选取文字,文字框必须具有焦点:<br />
stage.focus = field; //把焦点设给文字框<br />
field.text = &quot;This is example text&quot;; //设定文字<br />
field.setSelection(0, 4); //把&quot;This&quot;这个单词以高亮显示<br />
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.<br />
<br />
【在文字内设定安插点(游标位置)并访问游标位置的索引值】<br />
可以使用TextField.setSelection()把起始和结尾的索引参数都设成相同值,在文字内设定游标位置(假设具有焦点):<br />
field.setSelection(0, 0); //在第一个字符前摆放安插点<br />
trace(field.caretIndex); //输出游标位置的索引值<br />
<br />
【当文本字段受到选取或取消选取时给予响应】<br />
获得焦点时: FocusEvent.FOCUS_IN<br />
失去焦点时: FocusEvent.FOCUS_OUT<br />
通过键盘(Tab键)把焦点移除时: FocusEvent.KEY_FOCUS_CHANGE<br />
通过鼠标把焦点移除时: FocusEvent.MOUSE_FOCUS_CHANGE<br />
FocusEvent 类有一个relatedObject属性.就FOCUS_IN事件而言,relatedObject属性是刚才拥有焦点的对象的引用地址;对于 FOCUS_OUT,KEY_FOCUS_CHANGE以及MOUSE_FOCUS_CHANGE事件,relatedObject属性是刚接收到焦点的对象的引用地址.<br />
FOCUS_IN和FOCUS_OUT事件都是在焦点改变后发生的,所以两者都是不可取消的事件.对于KEY_FOCUS_CHANGE和MOUSE_FOCUS_CHANGE事件,可以使用FocusEvent.preventDefault()方法取消默认行为:<br />
field.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);<br />
private function onKeyFocus(event:FocusEvent):void {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(field.text == &quot;&quot;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.preventDefault(); //当field没有任何文字前,不允许使用Tab键把焦点移除<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//event.relatedObject就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址<br />
}<br />
<br />
【响应用户的输入行为】<br />
field.addEventListener(TextEvent.TEXT_INPUT, onTextInput);<br />
private function onTextInput(event:TextEvent):void {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(event.text == &quot;a&quot; &amp;&amp; field.length == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.preventDefault(); //TEXT_INPUT是可以取消的事件.TextEvent有一个text属性,内含用户所输入的的字符.此例子确保用户输入的第一个字母不是&quot;a&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
【把超链接加入文字】<br />
打开网页:<br />
例子1:<br />
var css:StyleSheet = new StyleSheet();<br />
css.parseCSS(&quot;a{color:#0000FF;} a:hover{text-decoration:underline;}&quot;);<br />
field.styleSheet = css;<br />
field.htmlText = &quot;&lt;a href='<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2F" target="_blank">http://www.riahome.cn/</a>' target='_blank'&gt;Link text&quot;;<br />
例子2:<br />
field.text = &quot;Link text&quot;;<br />
var formatter:TextFormat = new TextFormat();<br />
formatter.url = &quot;<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2F" target="_blank">http://www.riahome.cn/</a>&quot;;<br />
formatter.target = &quot;_blank&quot;;<br />
field.setTextFormat(formatter);<br />
打开Email:<br />
field.text = &quot;Link text&quot;;<br />
var formatter:TextFormat = new TextFormat();<br />
formatter.url = &quot;mailto:y_boy@126.com&quot;;<br />
field.setTextFormat(formatter);<br />
使用event协议,打开ActionScript方法:<br />
field.htmlText = &quot;&lt;a href='event:<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2F" target="_blank">http://www.riahome.cn/</a>'&gt;www.RIAHome.cn&quot;;<br />
field.addEventListener(TextEvent.LINK, onClickHyperlink);<br />
private function onClickHyperlink(event:TextEvent):void {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(event.text); //输出:&nbsp;<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2F" target="_blank">http://www.riahome.cn/</a><br />
}<br />
<br />
【精确获取某字符的索引值】<br />
在 x 和 y 参数指定的位置返回从零开始的字符索引值<br />
TextField.getCharIndexAtPoint(x:Number, y:Number):int<br />
例子:<br />
field.getCharIndexAtPoint(mouseX, mouseY); //返回鼠标位置上的该字符的索引值<br />
<br />
【精确获取某字符的边框区域】<br />
TextField.getCharBoundaries(charIndex:int):Rectangle<br />
通过读取Rectangle的x,y,width以及height等属性来确定该字符的边框区域范围.<br />
<br />
【精确获取某行的索引值】<br />
在 x 和 y 参数指定的位置返回从零开始的行索引值<br />
TextField.getLineIndexAtPoint(x:Number, y:Number):int<br />
field.getLineIndexAtPoint(mouseX, mouseY); //返回鼠标位置上的该行的索引值<br />
<br />
【获取指定索引值处的字符所在行的行索引值】<br />
TextField.getLineIndexOfChar(charIndex:int):int<br />
<br />
【获取指定行的字符数】<br />
TextField.getLineLength(lineIndex:int):int<br />
<br />
【获取指定索引值处的行所包含的字符】<br />
TextField.getLineText(lineIndex:int):String<br />
<br />
【获取指定行索引所在行的第一个字符的索引值】<br />
TextField.getLineOffset(lineIndex:int):int<br />
<br />
【获取指定文本行的度量信息】<br />
TextField.getLineMetrics(lineIndex:int):TextLineMetrics<br />
TextLineMetrics类包含文本字段中某行文本的文本位置和度量值的相关信息,帮助文档里有深入的图解.<br />
<br />
【获取指定索引处的字符所在段落内的第一个字符索引值】<br />
如果给定一个字符索引，则返回同一段落中第一个字符的索引<br />
TextField.getFirstCharInParagraph(charIndex:int):int<br />
<br />
【获取指定索引处的字符所在段落内的字符数】<br />
TextField.getParagraphLength(charIndex:int):int<br />
<br />
【替换所选文字】<br />
TextField.replaceSelectedText(value:String):void<br />
可以使用此方法插入和删除文本而不破坏其余文本的字符和段落格式.<br />
<br />
【替换指定范围的文本】<br />
TextField.replaceText(beginIndex:int, endIndex:int, newText:String):void<br />
注意: 如果对文本字段应用了样式表,则该方法不起作用<br />
<br />
【Timer计时器的使用】<br />
var timer:Timer = new Timer(delay:Number, repeatCount:int = 0);<br />
timer.addEventListener(TimerEvent.TIMER, onTimer);<br />
timer.start();<br />
private function onTimer(event:TimerEvent):void {<br />
&nbsp;&nbsp;&nbsp;&nbsp;//code<br />
}<br />
<br />
【以指定方向和速度移动元件】<br />
speed: 目标速度<br />
radians: speed与x轴的夹角,弧度<br />
vx = Math.cos(radians) * speed;<br />
vy = Math.sin(radians) * speed;<br />
<br />
【缓动动画算法】<br />
targetX,targetY: 目标坐标;<br />
easingSpeed: 每次移动分数,范围0到1;<br />
var vx:Number = (targetX - sprite.x) * easingSpeed;<br />
var vy:Number = (targetY - sprite.y) * easingSpeed;<br />
sprite.x += vx;<br />
sprite.y += vy;<br />
注意: 在非常逼近目标点时,往往找出通往目标点的距离,如果其值少于特定值,就应该停止该缓动.<br />
<br />
【模拟弹簧往复运动算法】<br />
五个变量: targetX(目标点的x坐标),sprite.X(物体的x坐标),vx(水平速度),ax(水平加速度),k(弹簧强度)<br />
已知: targetX(目标点的x坐标),k(弹簧强度)<br />
var ax:Number = (targetX - sprite.x) * k;<br />
vx += ax;<br />
sprite.x += vx;<br />
注意: 这里只是水平方向的情形,也可以推广到垂直方向以及水平垂直一起来的情形<br />
<br />
【模拟单摆运动】<br />
四个变量: sprite.x(物体的x坐标),centerX(中心位置的x坐标),angle(弧度),radius(摆动的振幅,也就是摆动的范围)<br />
sprite.x = centerX + Math.sin(angle) * radius;<br />
angle += 0.05;<br />
<br />
【模拟阻尼运动】<br />
六个变量: targetX(目标点的x坐标),sprite.X(物体的x坐标),vx(水平速度),ax(水平加速度),k(弹簧强度),damp(阻尼系数)<br />
已知: targetX(目标点的x坐标),k(弹簧强度)<br />
var ax:Number = (targetX - sprite.x) * k;<br />
vx += ax;<br />
sprite.x += vx;<br />
vx *= damp; //无阻力情况下的弹簧往复运动只缺少此句<br />
注意: 这里只是水平方向的情形,也可以推广到垂直方向以及水平垂直一起来的情形.<br />
这种原理可以推广到其它属性,如scaleX:<br />
scaleVel += (targetScale - sprite.scaleX) * k;<br />
sprite.scaleX += scaleVel;<br />
scaleVel *= damp;<br />
<br />
【计算两点间的角度】<br />
Math.atan2(y:Number, x:Number):Number<br />
y: 两点间的垂直距离<br />
x: 两点间的水平距离<br />
返回一个以弧度为单位的角度,返回值介于正PI和负PI之间.<br />
<br />
【让物体指着鼠标(跟随眼睛)】<br />
var dx:Number = mouseX - sprite.x;<br />
var dy:Number = mouseY - sprite.y;<br />
var radians:Number = Math.atan2(dy, dx);<br />
sprite.rotation = radians * 180 / Math.PI;<br />
<br />
【联结字符串时需要注意的地方】<br />
var result:String = 2 + 6 + &quot;a&quot;;<br />
trace(result); //输出: 8a<br />
var result:String = &quot;a&quot; + 2 + 6;<br />
trace(result); //输出: a26<br />
var result:String = &quot;a&quot; + (2 + 6);<br />
trace(result); //输出: a8<br />
<br />
【查找匹配的字符串】<br />
使用String.indexOf(val:String, startIndex:Number = 0):int<br />
返回指定子字符串的第一个匹配项的索引,没有匹配就返回-1<br />
查找所有匹配的字符串:<br />
var index:int = -1;<br />
while((index = myString.indexOf(&quot;val&quot;, index + 1)) != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;结果：&quot; + index);<br />
}<br />
使用String.lastIndexOf(val:String, startIndex:Number = 0x7FFFFFFF):int<br />
返回指定子字符串的最后一个匹配项的位置,没有匹配就返回-1<br />
var index:int = myString.length;<br />
while((index = myString.lastIndexOf(&quot;val&quot;, index - 1)) != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;结果：&quot; + index);<br />
}<br />
注意: indexOf()和lastIndexOf()方法都是区分大小写的.想把大小写都查找出来的话,可以结合String.toLowerCase()和String.toUpperCase()方法先把字符串一起转为小写或大写再进行查找.<br />
<br />
【提取子字符串】<br />
String.substr(startIndex:Number = 0, len:Number = 0x7fffffff):String<br />
String.substring(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String<br />
String.slice(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String<br />
substr()第一个参数可以是负值,表示索引值是从字符串尾端算过来,-1是最后一个字符;<br />
substring()和slice()差别在于substring()只接受正索引值,而把负值作为0处理.另外,如果endIndex小于startIndex,substring()方法在执行前,会自动将其调换过来,总是使用两个参数中较小的值作为起始索引.<br />
slice()方法可接受startIndex和endIndex为负值,而把负值表示为从字符串的尾端算回来,如果endIndex小于startIndex,slice()方法会返回空字符串.<br />
<br />
【以指定模式拆分字符串】<br />
String.split(delimiter:*, limit:Number = 0x7fffffff):Array<br />
<br />
【替换指定的字符串】<br />
使用String.replace(pattern:*, repl:Object):String<br />
可以这样来替换所有指定的字符串: myString.split(&quot;a&quot;).join(&quot;b&quot;);<br />
<br />
【按单词或单个字母逆转字符串】<br />
1. 把字符串切割使用String.split()方法成一个数组:对单词而言,以空格作为分界符,对字母而言,以空字符(&quot;&quot;)作为分界符;<br />
2. 使用Array.reverse()方法对数组进行逆转;<br />
3. 使用Array.join()方法重新组合为字符串:对单词而言,以空格(&quot; &quot;)作为联结符,对字母而言,以空字符(&quot;&quot;)作为联结符;<br />
<br />
【使用SharedObject及捕获异常】<br />
var so:SharedObject = SharedObject.getLocal(&quot;so&quot;);<br />
so.data.userName = &quot;Youthoy&quot;;<br />
try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var flushResult:String = so.flush(500 * 1024); //请求500KB容量<br />
&nbsp;&nbsp;&nbsp;&nbsp;//如果flush()没成功执行,就替netStatus加个事件处理函数以确认用户是同意还是拒绝,否则只检验结果.<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(flushResult == SharedObjectFlushStatus.PENDING) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//替netStatus加个事件处理函数,使得我们可以检验用户是否同意以足够磁盘容量储存共享对象.当netStatus事件发生时,执行onStatus函数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;so.addEventListener(NetStatusEvent.NET_STATUS, onStatus);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}else if(flushResult == SharedObjectFlushStatus.FLUSHED) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//成功储存.把数据成功储存后你想执行的程序放在这里.<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}catch(e:Error) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;//这里表示用户把本地储存设置为&quot;拒绝&quot;.如果储存数据很重要,你会想在此警告用户.<br />
&nbsp;&nbsp;&nbsp;&nbsp;//此外,如果你想让用户可修改其设定值,可以用下面语句打开Player的&quot;设置&quot;对话框的本地储存页面.<br />
&nbsp;&nbsp;&nbsp;&nbsp;Security.showSettings(SecurityPanel.LOCAL_STORAGE);<br />
}<br />
//定义onStatus函数以处理共享对象的状态事件.flush()返回&quot;pending&quot;时,引发提示,而用户做了选择后所引发的事件.<br />
function onStatus(event:NetStatusEvent):void {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(event.info.code == &quot;SharedObject.Flush.Success&quot;){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果event.info.code内容是&quot;SharedObject.Flush.Success&quot;,表示用户同意.把用户同意后你想执行的程序放在这里.<br />
&nbsp;&nbsp;&nbsp;&nbsp;}else if(event.info.code == &quot;SharedObject.Flush.Failed&quot;){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果event.info.code内容是&quot;SharedObject.Flush.Failed&quot;,表示用户同意.把用户拒绝后你想执行的程序放在这里.<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//现在,移除事件＊＊＊,因为我们只需监听一次.<br />
&nbsp;&nbsp;&nbsp;&nbsp;so.removeEventListener(NetStatusEvent.NET_STATUS, onStatus);<br />
}<br />
<br />
【向LSO储存对象时需要注意】<br />
LSO 使用二进制的AMF(Action Message Format)对一个对象进行编码.当你在LSO储存类对象时,该对象会编码成包含内容属性的普通对象.于是,当你试着从共享对象里读取该对象时,无法被读成某类的对象,因为没有类型数据.要克服这个限制,使用flash.net.registerClassAlias()方法.<br />
任何影片中,只要从共享对象读取出自定义对象数据,自定义类就必须注册别名,而且调用registerClassAlias()方法时必须在SharedObject.getLocal()方法被调用之前.<br />
<br />
【要相同域名内的两个影片可以存取相同LSO】<br />
首先LSO是储存在以下目录下:<br />
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects<br />
例如,如果来自于<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2Fyouthoy" target="_blank">http://www.riahome.cn/youthoy</a>的影片movie.swf写入名为example的LSO,则数据会储存在以下位置:<br />
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects\[random directory name]\riahome.cn\youthoy\movie.swf\example.sol<br />
如果在这个movie.swf里的代码是这样的: var example:SharedObject = SharedObject.getLocal(&quot;example&quot;, &quot;/&quot;); 也就是使用了选用的本地路径参数,则LSO会储存在以下路径,注意到与以上路径少了&quot;youthoy\movie.swf&quot;:<br />
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects\[random directory name]\riahome.cn\example.sol<br />
以此方法建立的LSO,可以由相同域的其它Flash影片用以下程序来读取:<br />
var example:SharedObject = SharedObject.getLocal(&quot;example&quot;, &quot;/&quot;);<br />
再看一个例子:<br />
有两个Flash影片movieOne.swf和movieTwo.swf都位于同一域(<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2F" target="_blank">http://www.riahome.cn/</a>)内,但是, movieOne.swf位于<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2Fyouthoy" target="_blank">http://www.riahome.cn/youthoy</a>/firstGroup,而movieTwo.swf位于&nbsp;<a href="http://uh.actionscript3.cn/link.php?url=http://www.riahome.cn%2Fyouthoy%2FsecondGroup." target="_blank">http://www.riahome.cn/youthoy/secondGroup.</a>在这情况里,movieOne.swf可以用下列任何本地路径建立和读取LSO:<br />
/<br />
/youthoy<br />
/youthoy/firstGroup<br />
而movieTwo.swf可以用下列任何本地路径建立和读取LSO:<br />
/<br />
/youthoy<br />
/youthoy/secondGroup<br />
因此,如果你想要两个影片都可以读取相同LSO,当你调用getLocal()方法时,必须指定影片共享的两个本地路径之一(/或/youthoy).<br />
<br />
【URLLoader.dataFormat的三种类型】<br />
URLLoader.dataFormat的可选值是:<br />
flash.net.URLLoaderDataFormat.BINARY<br />
flash.net.URLLoaderDataFormat.TEXT<br />
flash.net.URLLoaderDataFormat.VARIABLES<br />
当dataFormat是BINARY时,URLLoader.data属性就是flash.utils.ByteArray类型;<br />
当dataFormat是TEXT时,URLLoader.data属性就是String类型;<br />
当dataFormat是VARIABLES时,uRLLoader.data属性就是Object类型.<br />
<br />
【在XML内使用动态数据】<br />
把变量放在大括号({和})内:<br />
var userName:String = &quot;Youthoy&quot;;<br />
var myXML:XML = &lt;person&gt;&lt;userName&gt;{userName}&lt;/userName&gt;&lt;/person&gt;;<br />
<br />
【新增一个节点元素】<br />
//例子一:<br />
var example:XML = &lt;person/&gt;;<br />
example.father = &lt;father/&gt;; //内容属性和元素名称不一定要相同,也可以: example.abc = &lt;father/&gt;,但会以元素名称为准,即会建立一个&lt;father/&gt;元素<br />
trace(example);<br />
/*<br />
输出:<br />
&lt;person&gt;<br />
&nbsp;&nbsp;&lt;father/&gt;<br />
&lt;/person&gt;<br />
*/<br />
//例子二:<br />
var example:XML = &lt;person/&gt;;<br />
example.father = &quot;&quot;; //建立一个&lt;father/&gt;元素<br />
trace(example.toString());<br />
/*<br />
输出:<br />
&lt;person&gt;<br />
&nbsp;&nbsp;&lt;father/&gt;<br />
&lt;/person&gt;<br />
*/<br />
//例子三:<br />
var example:XML = &lt;person/&gt;;<br />
var id:int = 10;<br />
example[&quot;user&quot; + id] = &quot;&quot;;<br />
trace(example);<br />
/*<br />
输出:<br />
&lt;person&gt;<br />
&nbsp;&nbsp;&lt;user10/&gt;<br />
&lt;/person&gt;<br />
注意: 有些情况必须使用第三种情况.例如,元素节点名称内含连字符(&quot;-&quot;)是完全合法的,但在ActionScript里会得到编译器错误:<br />
example.some-element = &quot;&quot;; //产生编译器错误<br />
正确的写法是:<br />
example[&quot;some-element&quot;] = &quot;&quot;;<br />
*/<br />
<br />
【新增属性】<br />
var example:XML = &lt;person/&gt;;<br />
example.element = &quot;&quot;;<br />
example.element.@name = &quot;Youthoy&quot;;<br />
example.element.@[&quot;bad-variable-name&quot;] = &quot;yes&quot;;<br />
example.element.@other = [&quot;riahome.cn&quot;, undefined, true, 44, null];<br />
var id:int = 44;<br />
example.element.@[&quot;user&quot; + id] = &quot;love&quot;;<br />
trace(example);<br />
/*<br />
输出:<br />
&lt;person&gt;<br />
&nbsp;&nbsp;&lt;element name=&quot;Youthoy&quot; bad-variable-name=&quot;yes&quot; other=&quot;riahome.cn,,true,44,&quot; user44=&quot;love&quot;/&gt;<br />
&lt;/person&gt;<br />
*/<br />
<br />
【向XML插入文字元素和节点元素】<br />
//在指定元素前和后插入,在最前端和尾端插入<br />
var example:XML = &lt;person/&gt;;<br />
example.two = &quot;&quot;;<br />
example.insertChildBefore(example.two, &lt;one/&gt;); //在two节点前插入one节点<br />
example.insertChildBefore(example.two, &quot;在two节点前插入文字&quot;);<br />
example.insertChildAfter(example.two, &lt;three/&gt;); //在two节点后插入three节点<br />
example.prependChild(&lt;start/&gt;); //在最顶端插入start节点<br />
example.appendChild(&lt;end/&gt;); //在尾端插入end节点<br />
example.start = &quot;start内容&quot;; //向节点增加内容<br />
trace(example);<br />
/*<br />
输出:<br />
&lt;person&gt;<br />
&nbsp;&nbsp;&lt;start&gt;start内容&lt;/start&gt;<br />
&nbsp;&nbsp;&lt;one/&gt;<br />
&nbsp;&nbsp;在two节点前插入文字<br />
&nbsp;&nbsp;&lt;two/&gt;<br />
&nbsp;&nbsp;&lt;three/&gt;<br />
&nbsp;&nbsp;&lt;end/&gt;<br />
&lt;/person&gt;<br />
*/<br />
<br />
【把XML实例的内容属性转换为任何可以转换成字符串的内容】<br />
//先把等号右边转为可以转换的字符串<br />
var example:XML = &lt;person/&gt;;<br />
example.one = &quot;one&quot;;<br />
example.two = new URLLoader();<br />
example.three = new Sprite();<br />
example.four = new Boolean; //Boolean对象的值初始化为false<br />
example.five = new Number();<br />
example.six = new String();<br />
example.seven = {a:&quot;Youthoy&quot;, b:true, c:undefined};<br />
example.eight = [&quot;three&quot;, undefined, true, 44, null];<br />
/*<br />
输出:<br />
&lt;person&gt;<br />
&nbsp;&nbsp;&lt;one&gt;one&lt;/one&gt;<br />
&nbsp;&nbsp;&lt;two&gt;[object URLLoader]&lt;/two&gt;<br />
&nbsp;&nbsp;&lt;three&gt;[object Sprite]&lt;/three&gt;<br />
&nbsp;&nbsp;&lt;four&gt;false&lt;/four&gt;<br />
&nbsp;&nbsp;&lt;five&gt;0&lt;/five&gt;<br />
&nbsp;&nbsp;&lt;six/&gt;<br />
&nbsp;&nbsp;&lt;seven&gt;[object Object]&lt;/seven&gt;<br />
&nbsp;&nbsp;&lt;eight&gt;three,,true,44,&lt;/eight&gt;<br />
&lt;/person&gt;<br />
*/<br />
<br />
【对XML属性层层递归的算法】<br />
var example:XML = &lt;menu&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;menuitem label=&quot;File&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;menuitem label=&quot;New&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;menuitem label=&quot;Save&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/menuitem&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;menuitem label=&quot;Help&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;menuitem label=&quot;About&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/menuitem&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/menu&gt;;<br />
walk(example);<br />
function walk(node:XML):void {<br />
for each(var element:XML in node.elements()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(element.@label);<br />
&nbsp;&nbsp;&nbsp;&nbsp;walk(element);<br />
}<br />
<br />
【读取文字节点及其值】<br />
var example:XML = &lt;menu&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My name is Youthoy.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;myName&gt;Youthoy&lt;/myName&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/menu&gt;;<br />
example.text(); //输出: My name is Youthoy.<br />
example.myName.toXMLString(); //输出: &lt;myName&gt;Youthoy&lt;/myName&gt;<br />
//以下三行都输出: Youthoy<br />
example.myName.toString();<br />
example.myName.text();<br />
example.myName;<br />
<br />
【递归元素属性时读取属性名与其值】<br />
var example:XML = &lt;person name=&quot;Youthoy&quot; age=&quot;21&quot;/&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for each(var i:XML in example.attributes()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;trace(i.name() + &quot;=&quot; + i);<br />
}<br />
/*<br />
输出:<br />
name=Youthoy<br />
age=21<br />
*/<br />
另类方法:<br />
var example:XML = &lt;person name=&quot;Youthoy&quot; age=&quot;21&quot;/&gt;;<br />
trace(example.@*[1]); //输出: 21<br />
<br />
【不论层级地访问整个XML中指定的节点或属性】<br />
使用后代存取器运算符..<br />
例子1(对于节点元素):<br />
var example:XML = &lt;a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;z&gt;I am z.&lt;/z&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;b&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c&gt;&lt;/c&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;z&gt;I am z.&lt;/z&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/b&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
trace(example..z.text()); //输出: I am z.I am z.<br />
例子2(对于属性):<br />
var example:XML = &lt;person&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item name=&quot;Youthoy&quot; age=&quot;21&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item name=&quot;Jimpa&quot; age=&quot;21&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/person&gt;<br />
trace(example..@name); //输出: YouthoyJimpa<br />
<br />
【删除节点元素,文字节点以及属性】<br />
使用delete对单一项进行删除,要删除整个XMLList可以使用for循环以倒序形式进行删除,以避免迭代时需要改变数组索引问题.<br />
<br />
【搜索XML的高级应用】<br />
使用术语过滤.(condition),可结合正则表达式来使用.<br />
例子:<br />
var example:XML = &lt;foodgroup&gt;<br />
&lt;fruits&gt;<br />
&nbsp;&nbsp;&lt;fruit color=&quot;red&quot;&gt;Apple&lt;/fruit&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;fruit color=&quot;orange&quot;&gt;Orange&lt;/fruit&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;fruit color=&quot;green&quot;&gt;Pear&lt;/fruit&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;fruit color=&quot;red&quot;&gt;Watermelon&lt;/fruit&gt;<br />
&nbsp;&nbsp;&lt;/fruits&gt;<br />
&nbsp;&nbsp;&lt;vegetables&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;vegetable color=&quot;red&quot;&gt;Tomato&lt;/vegetable&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;vegetable color=&quot;brown&quot;&gt;Potato&lt;/vegetable&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;vegetable color=&quot;green&quot;&gt;Broccoli&lt;/vegetable&gt;<br />
&nbsp;&nbsp;&lt;/vegetables&gt;<br />
&lt;/foodgroup&gt;;<br />
trace(example..*.(hasOwnProperty(&quot;@color&quot;) &amp;&amp; @color == &quot;red&quot;));<br />
/*<br />
hasOwnProperty所做的检测是确保元素具有color属性,然后,有的话,就测试color属性之值是否为red.只有当条件的计算结果为true时,该元素才会加入EX4运算式所返回的XMLList.<br />
输出<br />
&lt;fruit color=&quot;red&quot;&gt;Apple&lt;/fruit&gt;<br />
&lt;fruit color=&quot;red&quot;&gt;Watermelon&lt;/fruit&gt;<br />
&lt;vegetable color=&quot;red&quot;&gt;Tomato&lt;/vegetable&gt;<br />
*/<br />
<br />
【CDATA(Character Data)标签】<br />
&lt;![CDATA[]]&gt;,必须大写.如果&lt;![CDATA[[]]]&gt;这样的话,它会告诉你语法错误的.<br />
&nbsp;</p>]]></description>
		</item>
		
</channel>
</rss>

