<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[极度鹤小居-闲云野鹤!]]></title>
  <subtitle type="html"><![CDATA[AS3.0,flash as脚本,js脚本,div+css技术,web2.0技术,网页技术,ASP,php]]></subtitle>
  <id>http://www.jdhcn.com/</id>
  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.jdhcn.com/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2010-01-08T14:42:22+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[as3游戏地图编辑器]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2010-01-08T14:42:22+08:00</updated>
	  <published>2010-01-08T14:42:22+08:00</published>
		  <summary type="html"><![CDATA[<p>这是我对游戏地图编辑器的初探, 目前只实现了90度视角的编辑, 采用的是xml文件来配置地图素材来源(只是初探过程和实现方法,所以就选择了简单的, 其中包括了地形层(背景图),建筑层,阻挡层等三种数据的生成, 输出来的数据格式也是我自己定义的, 这就当是一个练习与演示拿来晒晒吧,真正要使用的话还需要修改与扩展. (注意树形菜单需要全部展开能正确获取地图素材, 没有把aswing的JTree搞明白,真遗憾!)</p>
<p>效果图预览:</p>
<p><img alt="" src="http://www.jdhcn.com/attachments/month_1001/c201018114912.jpg" /></p>
<p><a target="_blank" href="http://www.jdhcn.com/other/GameMapEditor_as3/MapEditor.swf">点击看演示效果</a></p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=95" /> 
	  <id>http://www.jdhcn.com/default.asp?id=95</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[经典笑话：最新搞笑求婚方式]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=11" label="小憩译站" /> 
	  <updated>2009-12-02T18:30:23+08:00</updated>
	  <published>2009-12-02T18:30:23+08:00</published>
		  <summary type="html"><![CDATA[<h1 style="font-size: 18px; margin-bottom: 8px">经典笑话：最新搞笑求婚方式</h1>
<p>1.最佳露骨奖：让我们合法地结合吧！&nbsp;<br />
<br />
2.最佳好奇奖：我不知道人类为什么得结婚？不如让我们一起研究看看吧！&nbsp;<br />
<br />
3.最佳直接奖：让我葬在你们家祖坟吧！&nbsp;<br />
<br />
4.最佳直销奖：你愿不愿意带我回家当你的生活必需品？&nbsp;<br />
<br />
5.最佳柔情奖：喜欢，就是淡淡的爱。爱，就是深深的喜欢。我希望以后可以不用送你回家，而是我们一起回我们的家。&nbsp;<br />
<br />
6.最佳变态奖：看你骂我时，似乎有很大的快感！如果你想天天享受这种感觉，就嫁给我吧！&nbsp;<br />
<br />
7.最佳特技奖：你愿意嫁给我吗？如果愿意请站着举高双手，如果不愿意，请站着举高双腿。<br />
<br />
8.最佳cool&nbsp;man奖：我欠一个人管我。<br />
<br />
9.最佳信徒奖：你想这辈子嫁给我还是下辈子呢？&nbsp;<br />
<br />
10.最佳创意奖：什么时候才要把我娶回家？我房间的东西都快全搬到你家去了&hellip;&hellip;&nbsp;<br />
<br />
11.最佳保健奖：今年你再不娶我，明年我就开始有恐婚症喽！&nbsp;<br />
<br />
12.最佳告解奖：请你终结我的桃花运吧！<br />
<br />
13.最佳战俘奖：求饶，我投降了！只要你天天给我口饭吃。<br />
<br />
14.最佳影迷奖：甜心，帮我签个名吧。（签在户口簿的配偶栏）<br />
&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=94" /> 
	  <id>http://www.jdhcn.com/default.asp?id=94</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[公开我自己常用的AS3开发类包(jdhcn类包)]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-08-10T18:08:47+08:00</updated>
	  <published>2009-08-10T18:08:47+08:00</published>
		  <summary type="html"><![CDATA[jdhcn类包是自己在AS3开发过程中常用的一些类，有的是自己编写,有的是网络收集整理，使用此类包能大大提高开发效率，不断完善和整理中，不定期更新中。<br/><br/>一、全局静态类(global文件夹里)：<br/>最常用的Global，UiGlobal，GlobalJS，Cookie，ArrayGlobal等等, 具体作用和用法打开此类均有说明；<br/><br/>二、载入外部文件类包(loadData文件夹里)：<br/>BatchLoad类可以实现批量载入不同类型的文件(SWF/JPG/FLV/MP3/XML/TXT);<br/>LoadData类实现单个载入不同类型文件的文件(功能等同BatchLoad只载入单个文件)；<br/>SWFLoad，FLVLoad，MP3Load，XMLLoad，TXTLoad等分另为载入单个不同类型的外部数据文件；<br/><br/>三、数据提交类包(submitData文件夹里)：<br/>http数据提交方式： SubmitData(提交普通的数据), SubmitBitmap(提交带位图的数据), SubmitDataFile(提交带文件的数据)；<br/>remoting数据提交方式：暂时只写了个基类，事后抽时间再完善一下；<br/>Socket数据提交：暂时没编写；<br/><br/>四、jdhMVC开发框架(jdhMVC文件夹里)：<br/>一个简单的方便数据广播小框架；<br/><br/>五、MiniSite开发框架，即flash网站开发框架(minisite文件夹里)：<br/>是一个在jdhcn类包环境下并且基于jdhMVC开发框架的flash网站开发框架；<br/><br/>六、flash cs3轻量级组件(component文件夹里)：<br/>模仿flash cs3里的各种组件实现的轻量级组件，适合用在对swf文件大小限制比较严格的场合，否则可能就有点像鸡肋的感觉了：）<br/><br/>其他文件夹里的是不常用或是不够完善有待整理<br/><br/><a target="_blank" href="http://www.jdhcn.com/other/jdhcn.rar" rel="external">点击下载此类包</a><br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=93" /> 
	  <id>http://www.jdhcn.com/default.asp?id=93</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[jdhcn之minisite开发框架(flash web开发框架)]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-07-17T17:44:21+08:00</updated>
	  <published>2009-07-17T17:44:21+08:00</published>
		  <summary type="html"><![CDATA[主要使用<a target="_blank" href="http://www.jdhcn.com/article.asp?id=90" rel="external">jdhMVC框架</a>实现了事件广播来达到各频道之间的通信, 而各频道采用了xml配置方式来追加各频道, 注意本框架为了更好的灵活性并没有自动生成导航菜单(此功能以后会集成进来成为一个可选功能). <br/><br/><a target="_blank" href="http://www.jdhcn.com/other/flashWebdemo/" rel="external">先看demo</a><br/><br/>先说一下结构:<br/>1, 首先有一个主swf文件(main.swf), 此文件中包含一个存放频道的MC和一个存放导航菜单的MC, 这两个文件都是由外部导入, 所以应该在主文件中做有加载进度条, 框架中已经有此进度实现, 只需要在fla文件中修改外观就OK了.<br/><br/>2, 配置config.xml文件, 相应的配置后面说明.<br/><br/>3, 把各个频道的swf文件按config.xml文件的配置相应处理好就OK.<br/><br/>4, 在开发过程中需要广播自己事件,方法请参考<a target="_blank" href="http://www.jdhcn.com/article.asp?id=90" rel="external">jdhMVC框架</a>的使用方法<br/><br/>附加说明:<br/>由于本框架使用了<a target="_blank" href="http://www.jdhcn.com/article.asp?id=90" rel="external">jdhMVC框架</a>和jdhcn类包, 源代码还是进一步整理才方便发布, 如果有朋友感兴趣急需可以联系本人.<br/><br/>xml的配置说明:&nbsp;&nbsp;使用xml配置这样可以不需要每次次都编译相关的swf文件, 只有在添加/删除某些配置项后编辑一下主swf文件就OK了.<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.jdhcn.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?&gt;<br/>&lt;data&gt;<br/>&lt;!--path:指的是下面配置的频道swf文件的绝对地址路径, default指的是默认进入值等于频道name属性的频道(当url地址上存在有效的item参数变量时除外)--&gt;<br/>&#160;&#160;&#160;&#160;&lt;channels path=&#34;&#34; default=&#34;home&#34;&gt;&nbsp;&nbsp; <br/>&lt;!-- intro是整个网站的一个引导动画页,可以缺省 --&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;channel id=&#34;100&#34; name=&#34;intro&#34; swf=&#34;intro.swf&#34; /&gt;<br/>&lt;!-- nav是整个网站的公司导航条swf文件, 如果网站特殊性,导航条不固定,是随意性的则此项的swf值为空就行,但此项绝不可以缺省 --&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;channel id=&#34;0&#34; name=&#34;nav&#34; swf=&#34;nav.swf&#34; /&gt;<br/>&lt;!-- 下面的频道就自己想配置多少就多少啦,id最好是从1~n, id和name可以在url后台作为item值来传递以达到直接进入相应频道 --&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;channel id=&#34;1&#34; name=&#34;home&#34; swf=&#34;home.swf&#34; /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;channel id=&#34;2&#34; name=&#34;company&#34; swf=&#34;company.swf&#34; /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;channel id=&#34;3&#34; name=&#34;product&#34; swf=&#34;product.swf&#34; /&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;channel id=&#34;4&#34; name=&#34;contact&#34; swf=&#34;contact.swf&#34; /&gt;<br/>&#160;&#160;&#160;&#160;&lt;/channels&gt;<br/>&#160;&#160;&#160;&#160;&lt;configs&gt;<br/>&lt;!-- 下面的config配置项也是自由配置的, 在此框架里可以使用Config.data.下面配置的name来找到相应的地处值, 比方说下面的本人将serverUrl作为登录/注册的服务响应地址,则在开发过成中可以使用Config.data.serverUrl就可以了. 其他的验证码/报告发送/某些图或视频的地址等等,都可以自由地在下面配置好然后就在开发过中调用 --&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;config name=&#34;serverUrl&#34;&gt;<a href="http://192.168.21.145/lux/Process.aspx" target="_blank" rel="external">http://192.168.21.145/lux/Process.aspx</a>&lt;/config&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;config name=&#34;validateUrl&#34;&gt;<a href="http://222.73.42.9:8064/VeriPage.ashx" target="_blank" rel="external">http://222.73.42.9:8064/VeriPage.ashx</a>&lt;/config&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;config name=&#34;reportUrl&#34;&gt;<a href="http://www.jdhcn.com/v.htm" target="_blank" rel="external">http://www.jdhcn.com/v.htm</a>&lt;/config&gt;<br/>&#160;&#160;&#160;&#160;&lt;/configs&gt;<br/>&lt;/data&gt;<br/> </div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=91" /> 
	  <id>http://www.jdhcn.com/default.asp?id=91</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[一个新的as3开发框架:jdhMVC框架]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-07-14T19:18:00+08:00</updated>
	  <published>2009-07-14T19:18:00+08:00</published>
		  <summary type="html"><![CDATA[框架下载地址:&nbsp;&nbsp;<img src="http://www.jdhcn.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.jdhcn.com/attachments/month_0907/3200971419169.rar" target="_blank">点击下载此文件</a><br/>框架帮助文档: (稍后推出)<br/>框架使用实例: <a target="_blank" href="http://www.jdhcn.com/article.asp?id=91" rel="external">flash网站开发框架实例</a><br/><br/>jdhMVC(Version 1.0.0)框架使用方法:<br/><br/>使用方法:(所有继承此框架的类都需要定公共的静态NAME属性值)<br/><br/>1, 创建一个发送广播事件的控制类ControlObj.as继承Observer.as;<br/><br/>2, 需要发送广播事件显示对象类DisplayObj.as必需继承View.as, 这样才能和ControlObj.as建立关联;<br/><br/>3, DisplayObj.as里相关代码的使用:<br/>&#160;&#160;&#160;&#160;a) 首先创建控制类的引用var controlObj = new ControlObj();<br/>&#160;&#160;&#160;&#160;b) 使用继承的方法setRelation使DisplayObj.as与controlObj建立关联, setRelation(controlObj, NAME, this);<br/>&#160;&#160;&#160;&#160;c) 如果需要传递数据给controlObj可以使用setControlData(obj:Object);<br/>&#160;&#160;&#160;&#160;d) 如果需要接收controlObj传回来的数据可以重写方法onHandlerControl(obj:Object):void;<br/>&#160;&#160;&#160;&#160;<br/>4, ControlObj.as里继承了Objserver.as的所有属性和方法:<br/>&#160;&#160;&#160;&#160;a) 使用方法sendEvent来发送广播事件, sendEvent(Login.SUCCESS, this);<br/>&#160;&#160;&#160;&#160;b) 需要返回数据给相关联的显示对象使用getRelationObj方法, getRelationObj(DisplayObj.NAME).onHandlerControl(需要传递的参数对象);<br/>&#160;&#160;&#160;&#160;c) 接收其他控制类发送的广播事件, 可以重写relation()方法, 将其返回值中把需要接收的事件放入数组中, return [Login.SUCCESS, 事件2, 事件3];<br/>&#160;&#160;&#160;&#160;d) 响应relation中设置的相关事件, 可以重写receiveEvent(obj:IEventObj)方法, 用条件判断语句(if/switch)比较obj.type与relation方法中设置的相应事件来响应不同的动作;<br/>&#160;&#160;&#160;&#160;e) 参考Observer.as相关的更多方法或属性;<br/>&#160;&#160;&#160;&#160;<br/>5, 一个事件流程结束, 如果有更多的事件需要广播,可以建立多个像ControlObj.as类似的控制类就行了, 数据层也可以继承Observer.as来实现广播事件和接收事件,用法同Control.as.<br/><br/>自我总结:<br/>&nbsp;&nbsp;&nbsp;&nbsp;此框架并不影响以前写代码的风格, 只是将相关的类用继承框架中指定的类来达到事件播等,也许算不上MVC框架,之所以还是叫他MVC也就是因为确实把显示对象和控制对象分开来处理,至于数据层几乎和控制层相同,可以根据自己不同的习惯来定了. (参考pureMVC框架)<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;优点:简单易用, 只需要建立几个关联和重写几个方法就能实现事件广播, 重复代码量少;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;缺点:个人摸索的框架不够成熟, 测试量较少, 还需要更好地优化, 各事件发送与接收如果不做记录在数量多的情况下很找到其间的关联;<br/><br/>作者: 极度鹤<br/>博客: <a href="http://www.jdhcn.com" target="_blank" rel="external">http://www.jdhcn.com</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=90" /> 
	  <id>http://www.jdhcn.com/default.asp?id=90</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Flash与后台数据交互方法总结 ]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-05-19T15:08:11+08:00</updated>
	  <published>2009-05-19T15:08:11+08:00</published>
		  <summary type="html"><![CDATA[<div class="postTitle"><a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/MaxIE/archive/2006/07/26/460508.html">Flash与后台数据交互方法总结</a></div>
<p><font face="arial,helvetica,sans-serif" size="2">P.S <br />
最近有一些网友总是询问flash与后台数据交互的问题,因此我就做了一些总结和整理,也想方便大家了! <br />
目前据我所知,Flash与后台数据交互共有下列几种方法(如果你觉得不全,你可告知一下,我会添加上去了):<br />
1.</font><a href="http://www.klstudio.com/post/49.html"><strong><font face="arial,helvetica,sans-serif" size="2">LoadVars(XML)</font></strong></a><br />
<font face="arial,helvetica,sans-serif" size="2">2.</font><a href="http://www.klstudio.com/post/50.html"><strong><font face="arial,helvetica,sans-serif" size="2">Flash Remoting</font></strong></a><br />
<font size="2"><font face="arial,helvetica,sans-serif">3.<strong><a href="http://www.klstudio.com/post/56.html">Webservice</a></strong><br />
4.<strong><a href="http://www.klstudio.com/post/57.html">XMLSocket</a></strong></font></font></p>
<p><font size="2"><font face="arial,helvetica,sans-serif"><br />
一.<strong><font color="#0000ff">LoadVars篇</font></strong></font></font></p>
<p><font face="arial,helvetica,sans-serif" size="2">我之所以把XML也放在这里说,是因为XML和LoadVars数据交互的方式大体相同,就是传递时的数据内容有点不一样而已! <br />
我现在列出在开发过程最常用的&quot;用户密码验证&quot;实例,加以说明!<br />
<br />
</font></p>
<p>
<table cellspacing="1" cellpadding="2" width="53%" border="0">
    <tbody>
        <tr>
            <td><font face="arial,helvetica,sans-serif" size="2">//=======================================================; <br />
            // Flash代码; <br />
            //=======================================================;<br />
            //定义LoadVars对象;<br />
            var data_lv = new LoadVars(); <br />
            //提交的用户名变量和参数值;<br />
            data_lv.username = &quot;kinglong&quot;; <br />
            //提交的密码变量和参数值;<br />
            data_lv.password = &quot;king&quot;; <br />
            //提交后返回结果;<br />
            data_lv.onLoad = function(success){ <br />
            //success,数据提交是否成功; <br />
            //这个只是表示数据传输是否成功,并不是用户验证的结果; <br />
            if(success){ <br />
            trace(&quot;数据提交成功!&quot;); <br />
            //result也是用户验证返回的实际结果! <br />
            if(this.result==&quot;true&quot;){ <br />
            trace(&quot;yes&quot;); <br />
            }else{ <br />
            trace(&quot;no&quot;);<br />
            }<br />
            }else{<br />
            trace(&quot;数据提交失败!&quot;);<br />
            }<br />
            }<br />
            //数据提交方法调用;<br />
            //第一参数就是提交的页面地址; <br />
            //第二参数就是返回结果对象(只要是LoadVars对象就可以了); <br />
            //第三参数就是提交方式(这个和html中form表单类似,分为&quot;post&quot;和&quot;get&quot;两种方式) <br />
            data_lv.sendAndLoad(&quot;http://www.klstudio.com/save.asp&quot;,data_lv,&quot;post&quot;); </font></td>
        </tr>
    </tbody>
</table>
<br />
<br />
<table cellspacing="1" cellpadding="2" width="53%" border="0">
    <tbody>
        <tr>
            <td>
            <p><font face="arial,helvetica,sans-serif" size="2">//=======================================================; <br />
            //后台服务端页面处理及返回内容; <br />
            //=======================================================;<br />
            //接收flash提交过来的变量和接收一个页面提交过来的变量一致的;<br />
            Request(&quot;username&quot;) 就是flash端username变量传过来的值&quot;kinglong&quot;;<br />
            Request(&quot;password&quot;) 就是flash端password变量传过来的值&quot;kinglong&quot;;<br />
            ....数据库验证..... <br />
            //如果用户验证通过<br />
            &amp;result=true<br />
            //如果用户验证失败<br />
            &amp;result=false <br />
            //整个页面返回内容就是上面那一行内容,&amp;result对应用着flash端的result变量; <br />
            //如果是多个返回值的话,就是&amp;result=xxx&amp;result1=xxx这种形式就可以了; <br />
            如有不清楚的地方,你可查看flash帮助文档! <br />
            至于XML的方式,请对应地查看flash帮助文档就可以了!</font></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><br />
<font size="2"><font face="arial,helvetica,sans-serif"><strong>LoadVars方式的优点:</strong><br />
1.flash代码实现起来简单,方便. <br />
2.服务端接收页面和接收一个表单过来的数据一样处理,不需要专门的技术,所有服务端程序都可以实现! <br />
<br />
<strong>LoadVars方式的缺点:</strong> <br />
1.传递的变量不宜过多.<br />
2.变量传递的值不宜过长.<br />
3.变量传递值只能使用&quot;字符串&quot;这一种数据类型,数据类型单一. <br />
4.数据返回值当中不能有&quot;&amp;&quot;字符,因此比较复杂的返回值都需进行URL编码处理.</font></font></p>
<p><font face="arial,helvetica,sans-serif" size="2">二、<strong>Flash Remoting</strong><br />
Flash Remoting这种数据接口是四个之中效率最高的！<br />
<strong>其优点:</strong><br />
1.支持数据类型比较多(</font><a href="http://livedocs.macromedia.com/flashremoting/mx/Using_Flash_Remoting_MX/UseASData4.htm#1173664"><font face="arial,helvetica,sans-serif" size="2">Converting from application server data types to ActionScript</font></a><font face="arial,helvetica,sans-serif" size="2">);<br />
2.传递数据量比较大;<br />
3.运行效率是现有几个当中最高的；<br />
4.对各种后台的支持也比较好;<br />
5.其还有调试模块(NetConnection Debugger)<br />
<br />
<strong>其缺点：</strong><br />
1.需要flash端装</font><a href="http://www.macromedia.com/software/flashremoting/downloads/components/"><font face="arial,helvetica,sans-serif" size="2">Flash Remoting MX Components</font></a><font face="arial,helvetica,sans-serif" size="2">(这个是免费提供的);<br />
2.需要后台服务端装相应版本的Flash Remoting模块才可以使用,MM提供的模块有j2ee和.net两个版本是要收费的,好在网上还有两个开源的(</font><a href="http://www.openamf.org/"><font face="arial,helvetica,sans-serif" size="2">OpenAMF</font></a><font face="arial,helvetica,sans-serif" size="2">,</font><a href="http://amfphp.org/"><font face="arial,helvetica,sans-serif" size="2">AMFPHP</font></a><font face="arial,helvetica,sans-serif" size="2">);<br />
3.好像Remoting对虚拟主机的支持不太好(可以去google搜索一下，有没有解决方法).<br />
<br />
<br />
</font></p>
<p>
<table cellspacing="1" cellpadding="2" width="56%" border="0">
    <tbody>
        <tr>
            <td><font face="arial,helvetica,sans-serif" size="2">================================================================<br />
            <strong>Flash端代码说明：</strong>(<em>我这里用as1.0版本为例，其他版本到MM站查找</em>)<br />
            ================================================================<br />
            //<em>加载Remoting Component代码,这个是必须的;</em><br />
            #include &quot;NetServices.as&quot;<br />
            //<em>加载Remoting 调试模块代码,这个是可选择的,用NetConnection Debugger查看调试信息;</em><br />
            #include &quot;NetDebug.as&quot;<br />
            if (inited == null){ <br />
            inited = true; <br />
            //<em>设置默认网关;</em><br />
            NetServices.setDefaultGatewayUrl(&quot;</font><a href="http://localhost:8500/flashservices/gateway"><font face="arial,helvetica,sans-serif" size="2">http://localhost:8500/flashservices/gateway</font></a><font face="arial,helvetica,sans-serif" size="2">&quot;); <br />
            //<em>建立网关连接;</em><br />
            gateway_conn = NetServices.createGatewayConnection(); <br />
            //<em>获取一个服务;</em><br />
            myService = gateway_conn.getService(&quot;myservice&quot;, this); <br />
            }<br />
            <br />
            //<em>定义调用方法的函数;</em><br />
            function getString(name){<br />
            //<em>调用Remoting的getString方法;</em><br />
            myService.getString(name);<br />
            } <br />
            //<em>定义返回结果的函数</em>;<br />
            function getString_Result(result){<br />
            //<em>result就为返回的结果</em>;<br />
            trace(result);<br />
            }<br />
            //<em>定义返回状态的函数,此为可选的</em>;<br />
            function getString_Status(error){ <br />
            trace(&quot;getString_Status&quot;);<br />
            trace(error.code);<br />
            trace(error.description); <br />
            trace(error.details); <br />
            }<br />
            <br />
            //调用函数;<br />
            getString(&quot;kinglong&quot;); </font></td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<table cellspacing="1" cellpadding="2" width="56%" border="0">
    <tbody>
        <tr>
            <td><font size="2"><font face="arial,helvetica,sans-serif">================================================================<br />
            <strong>服务端方法定义</strong>(<em>我这里以Coldfusion Component为例,其他版本请参考相应的资料</em>)<br />
            ================================================================<br />
            <br />
            <cfcomponent displayname="我的服务"></cfcomponent><br />
            <br />
            <cffunction returntype="string" access="remote" name="getString"></cffunction><cfreturn myresult=""></cfreturn><br />
            <br />
            </font></font></td>
        </tr>
    </tbody>
</table>
</p>
<p><font face="arial,helvetica,sans-serif" size="2">另附上Flash Remoting的在线帮助文件(</font><a href="http://livedocs.macromedia.com/flashremoting/"><font face="arial,helvetica,sans-serif" size="2">Flash Remoting LiveDocs</font></a><font face="arial,helvetica,sans-serif" size="2">),MM网站上的</font><a href="http://www.macromedia.com/cfusion/search/index.cfm?loc=en_us&amp;term=remoting"><font face="arial,helvetica,sans-serif" size="2">Remoting相关的资料</font></a><font face="arial,helvetica,sans-serif" size="2">.</font></p>
<p><font size="2"><font face="arial,helvetica,sans-serif"><strong>三、WebService</strong><br />
个人觉得WebService的数据访问速度，仅次于Remoting，但WebService是一种通用型的接口，一般服务端技术都支持的!<br />
<strong>WebService的优点</strong>：<br />
1.WebService的接口支持比较广泛（</font></font><a href="http://www.blueidea.com/tech/multimedia/2003/1090.asp"><font face="arial,helvetica,sans-serif" size="2">Java</font></a><font face="arial,helvetica,sans-serif" size="2">，</font><a href="http://www.blueidea.com/tech/multimedia/2003/1094.asp"><font face="arial,helvetica,sans-serif" size="2">ASP.Net</font></a><font face="arial,helvetica,sans-serif" size="2">，</font><a href="http://blog.joycode.com/eric/archive/2004/08/14/30659.aspx"><font face="arial,helvetica,sans-serif" size="2">PHP</font></a><font face="arial,helvetica,sans-serif" size="2">，<strong>Coldfusion-我下面举例用</strong>）；<br />
2.WebService是一个通用型的接口，所以服务端写的接口，不局限于Flash使用，其他程序也可以调用，&quot;一举两得&quot;!<br />
3.WebService和Remoting一样，支持多种数据类型！<br />
4.今天还发现FMS除了支持Remoting接口，也支持WebService接口了:)<br />
<strong>WebService的缺点</strong>：<br />
Flash客户端到是没有什么问题，Flash的开发工具就自带了(WebServiceConnector 组件),但服务端虽说大多都支持这个接口技术，但除了Coldfusion生成WebService方便外，其他的实现都挺复杂的！</font></p>
<p>
<table cellspacing="1" cellpadding="2" width="57%" border="0">
    <tbody>
        <tr>
            <td>
            <p><font face="arial,helvetica,sans-serif" size="2">//=======================================;<br />
            // Flash客户端代码；<br />
            // 对于代码不是很熟悉的可以直接使用WebServiceConnector 组件，进行设置设置就可以了。<br />
            // 我这里主要是写用代码来调用WebService方法。<br />
            // 当然这个前提是你要把WebServiceConnector 组件先放到库里，否则类就无法引用了。<br />
            //=======================================;<br />
            stop();<br />
            //引用WebService类;<br />
            import mx.services.WebService;<br />
            //定义WebService的路径;<br />
            var ws_url:String = </font><a href="http://localhost:8500/klstudio/myservice.cfc?wsdl"><font face="arial,helvetica,sans-serif" size="2">http://localhost:8500/klstudio/myservice.cfc?wsdl</font></a><font face="arial,helvetica,sans-serif" size="2">;<br />
            //定义WebService对象;<br />
            var ws:WebService = new WebService(ws_url);<br />
            //调用WebService方法;<br />
            var callObject = ws.getString(&quot;kinglong&quot;);<br />
            //设置返回结果对象；<br />
            callObject.onResult = function(result){<br />
            trace(&quot;result:&quot;+result);<br />
            }<br />
            //如果调用错误返回信息(<em>这个是可选的</em>)；<br />
            callObject.onFault = function(fault){<br />
            trace(&quot;fault:&quot;+fault.faultstring);<br />
            }</font></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><font size="2"><font face="arial,helvetica,sans-serif"><font color="#ff0000"><strong>注意：</strong>如果返回结果是一个数据集的话，那每个字段名都要用大写，不管你的服务端是否大写!</font><br />
<br />
<br />
</font></font></p>
<p>
<table cellspacing="1" cellpadding="2" width="57%" border="0">
    <tbody>
        <tr>
            <td height="160"><font size="2"><font face="arial,helvetica,sans-serif">================================================================<br />
            <strong>服务端方法定义</strong>(<em>我这里仍以Coldfusion Component为例,其他版本请参考上面提供的连接</em>)<br />
            ================================================================<br />
            <br />
            <cfcomponent displayname="我的服务"></cfcomponent><cffunction returntype="string" access="remote" name="getString"></cffunction><br />
            <cfargument name="name" type="string" required="true"></cfargument><br />
            <cfset myresult="arguments.name"></cfset><br />
            <cfreturn myresult=""></cfreturn><br />
            <br />
            </font></font></td>
        </tr>
    </tbody>
</table>
</p>
<p><br />
<font face="arial,helvetica,sans-serif" size="2">调用的时候，只要在cfc路径后面加&quot;?wsdl&quot;就可以了，方便吧！ ：）</font></p>
<p><br />
<font face="arial,helvetica,sans-serif" size="2">四、<strong>XMLSocket</strong><br />
<br />
<br />
<br />
这是</font><a href="http://www.klstudio.com/post/49.html"><font face="arial,helvetica,sans-serif" size="2">LoadVars(XML)</font></a><font face="arial,helvetica,sans-serif" size="2">、</font><a href="http://www.klstudio.com/post/50.html"><font face="arial,helvetica,sans-serif" size="2">Flash Remoting</font></a><font face="arial,helvetica,sans-serif" size="2">、</font><a href="http://www.klstudio.com/post/56.html"><font face="arial,helvetica,sans-serif" size="2">Webservice</font></a><font face="arial,helvetica,sans-serif" size="2">、</font><a href="http://www.klstudio.com/post/57.html"><font face="arial,helvetica,sans-serif" size="2">XMLSocket</font></a><font face="arial,helvetica,sans-serif" size="2">四种方法整理的最后一篇，也让大家久等了</font></p>
<p>&nbsp;</p>
<p><font face="arial,helvetica,sans-serif" size="2">（<font color="#0000ff">没想到前几篇的文章在网上挺受欢迎的，其中还有一人给我发邮件，相看我这个最后一篇，哈哈，还是挺欣慰的。</font></font></p>
<p><font face="arial,helvetica,sans-serif" size="2"><font color="#ff0000">对转载我要声明一下，首先这几篇文章欢迎转载的，但要说明文章的作者，以及文章的原址吧，我发现有些网站转载，</font></font></p>
<p><font face="arial,helvetica,sans-serif" size="2"><font color="#ff0000">连作者都不写了或者写的就不对。这一点会影响我以后写文章的心情的，特此说明一下!</font>）。现在接下来转入正题了！<br />
<br />
XMLSocket主要用于与服务端进行即时通信，目前的应用领域主要是Flash文本聊天和Flash在线游戏等方面。<br />
<br />
<strong>XMLSocket的优点</strong>：<br />
<br />
1、能和服务端即时通信；<br />
<br />
2、Flash Player 5.0以上的版本内置类，不需另装组件或插件；<br />
<br />
3、因为XMLSocket就是相当于一个Socket客户端，所以一般的中间件都支持的（如java，.Net等）<br />
<br />
<strong>XMLSocket的缺点</strong>：<br />
<br />
1、XMLSocket只能传字符串或xml格式的文本，数据类型单一；<br />
<br />
2、XMLSocket服务端自行开发的话，需要对Socket技术比较了解才行，好在网上有现成的服务端软件</font></p>
<p><font face="arial,helvetica,sans-serif" size="2">（商业的XMLSocket Server 有</font><a href="http://www.moock.org/unity/"><font face="arial,helvetica,sans-serif" size="2">Unity</font></a><font face="arial,helvetica,sans-serif" size="2">、</font><a href="http://www.xadra.com/xadra_home.html"><font face="arial,helvetica,sans-serif" size="2">Fortress</font></a><font face="arial,helvetica,sans-serif" size="2">；开源的XMLSocket Server 有</font><a href="http://www.oregano-server.org/"><font face="arial,helvetica,sans-serif" size="2">Oregano Multiuser Server</font></a><font face="arial,helvetica,sans-serif" size="2">）；<br />
<br />
3、还有就是XMLSocket的80端口与flash安全策略问题。（</font><a href="http://www.riarock.com/serendipity/index.php?/archives/23-XMLSocket-socket-server-80-port.html"><font face="arial,helvetica,sans-serif" size="2">网上有一个解决方法</font></a><font face="arial,helvetica,sans-serif" size="2">，不知是否可行，请自行验证）<br />
<br />
<br />
<br />
</font></p>
<p>
<table cellspacing="1" cellpadding="1" width="65%" border="0">
    <tbody>
        <tr>
            <td>
            <p><font face="arial,helvetica,sans-serif" size="2">//=======================================;<br />
            <br />
            // <em>Flash客户端（以Flash文本聊天为例）;</em><br />
            <br />
            //=======================================;<br />
            <br />
            var paramObj:Object = new Object();<br />
            <br />
            <em>//命令分隔符</em>；<br />
            <br />
            paramObj.CommandDelimiters = &quot;-@@##@@-&quot;;<br />
            <br />
            </font><font size="2"><font face="arial,helvetica,sans-serif"><em>//用户列表分隔符；<br />
            <br />
            </em>paramObj.PeopleDelimiters = &quot;-@#@-&quot;;<br />
            <br />
            <em>//建立XMLSocket对象</em>；<br />
            <br />
            var socket:XMLSocket = new XMLSocket();<br />
            <br />
            <em>//连接状态事件</em>；<br />
            <br />
            socket.onConnect = function(success) {<br />
            <br />
            trace(&quot;socket.onConnect:&quot;+success);<br />
            <br />
            if (!success) {<br />
            <br />
            trace(&quot;服务器连接失败,请检查网络状态!&quot;);<br />
            <br />
            }<br />
            <br />
            };<br />
            <br />
            <em>//关闭事件</em>；<br />
            <br />
            socket.onClose = function() {<br />
            <br />
            trace(&quot;服务端已关闭！&quot;);<br />
            <br />
            logoutChat();<br />
            <br />
            };<br />
            <br />
            <em>//</em><em>数据通信事件</em>；<br />
            <br />
            socket.onData = function(src) {<br />
            <br />
            //trace(&quot;socket.onData:&quot;+src);<br />
            <br />
            doCommand(getCmdArrayByMsg(trim(src)));<br />
            <br />
            };<br />
            <br />
            <em>//</em><em>用户登录</em>；<br />
            <br />
            function loginChat():Void {<br />
            <br />
            //连接Socket服务端；<br />
            <br />
            socket.connect(&ldquo;localhost&rdquo;, &ldquo;8888&rdquo;);<br />
            <br />
            sendSocket(&quot;INFO&quot;+paramObj.CommandDelimiters+msg);<br />
            <br />
            }<br />
            <br />
            <em>//</em><em>用户注销</em>；<br />
            <br />
            function logoutChat(b:Boolean):Void {<br />
            <br />
            sendSocket(&quot;QUIT&quot;);<br />
            <br />
            }<br />
            <br />
            <em>//</em><em>显示聊天信息</em>；<br />
            <br />
            function showChat(msg:String):Void {<br />
            <br />
            trace(&ldquo;聊天信息：&rdquo;+msg);<br />
            <br />
            }<br />
            <br />
            <em>//</em><em>发送聊天信息</em>；<br />
            <br />
            function sendChat(msg:String):Void{<br />
            <br />
            sendSocket(&quot;MSG&quot;+paramObj.CommandDelimiters+msg+paramObj.CommandDelimiters+msg);<br />
            <br />
            }<br />
            <br />
            <em>//</em><em>向服务端发送信息</em>；<br />
            <br />
            function sendSocket(msg:String):Void {<br />
            <br />
            socket.send(msg+&quot;\r&quot;);<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            <em>//</em><em>处理服务端返回信息</em>；<br />
            <br />
            function getCmdArrayByMsg(msg:String):Array {</font></font></p>
            <p><font face="arial,helvetica,sans-serif" size="2">if (msg.charCodeAt(0) == 13 &amp;&amp; msg.charCodeAt(1) == 10) {</font></p>
            <p><font face="arial,helvetica,sans-serif" size="2">msg = msg.substr(2);</font></p>
            <p><font face="arial,helvetica,sans-serif" size="2">}</font></p>
            <p><font face="arial,helvetica,sans-serif" size="2">return msg.split(paramObj.CommandDelimiters);</font></p>
            <p><font face="arial,helvetica,sans-serif" size="2">}<br />
            <br />
            <br />
            <br />
            function doCommand(arr:Array):Void {<br />
            <br />
            switch (arr[0]) {<br />
            <br />
            case &quot;MSG&quot; :<br />
            <br />
            showChat(arr[1]);<br />
            <br />
            break;<br />
            <br />
            case &quot;TAKEN&quot; :<br />
            <br />
            trace(&quot;你的登录名已经有了,请重新换一个登录名!&quot;);<br />
            <br />
            break;<br />
            <br />
            case &quot;PEOPLE&quot; :<br />
            <br />
            doPeople(arr[1]);<br />
            <br />
            break;<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            <em>//</em><em>显示在线用户列表</em>；<br />
            <br />
            function doPeople(msg:String):Void {<br />
            <br />
            var people_arr:Array = msg.split(paramObj.PeopleDelimiters);<br />
            <br />
            trace(people_arr);<br />
            <br />
            }</font></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><br />
<br />
<br />
<br />
<font face="arial,helvetica,sans-serif" size="2">//上面与XMLSocket有关的主要代码，显示方面自己添加相关组件就行了！<br />
<br />
//<font color="#ff0000">有一个注意点，在flash向服务端发送的命令的最后一定要加上&ldquo;\r&rdquo;，否则服务端无法收到消息（我的服务端是用Java开发的）</font><br />
<br />
<br />
<br />
</font></p>
<p>
<table cellspacing="1" cellpadding="1" width="57%" border="0">
    <tbody>
        <tr>
            <td><font size="2"><font face="arial,helvetica,sans-serif">//=======================================;<br />
            <br />
            // <em>服务端代码</em><em>(</em><em>我用</em><em>java</em><em>开发的，其他版本自行研究</em></font></font><font size="2"><font face="arial,helvetica,sans-serif"><em>);<br />
            <br />
            // ChatServer.java</em><br />
            <br />
            //=======================================;<br />
            <br />
            package com.klstudio.socket.chat;<br />
            <br />
            <br />
            <br />
            import java.io.IOException;<br />
            <br />
            import java.net.ServerSocket;<br />
            <br />
            import java.net.Socket;<br />
            <br />
            import java.util.Vector;<br />
            <br />
            <br />
            <br />
            //import com.klstudio.util.Logger;<br />
            <br />
            <br />
            <br />
            /**<br />
            <br />
            * @author kinglong<br />
            <br />
            * <br />
            <br />
            * TODO 要更改此生成的类型注释的模板，请转至窗口－首选项－ Java －代码样式－代码模板<br />
            <br />
            */<br />
            <br />
            public class ChatServer {<br />
            <br />
            //private Logger logger;<br />
            <br />
            private static Vector clients = new Vector();<br />
            <br />
            private static ServerSocket server = null;<br />
            <br />
            private static Socket socket = null;<br />
            <br />
            public static String CommandDelimiters = &quot;-@@##@@-&quot;;<br />
            <br />
            public static String PeopleDelimiters = &quot;-@#@-&quot;;<br />
            <br />
            <br />
            <br />
            public ChatServer() {<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            public static void notifyRoom() {<br />
            <br />
            StringBuffer people = new StringBuffer(&quot;PEOPLE&quot;+CommandDelimiters+&quot;所有的人&quot;);<br />
            <br />
            for (int i = 0; i &lt; clients.size(); i++) {<br />
            <br />
            Client client = (Client) clients.elementAt(i);<br />
            <br />
            people.append(PeopleDelimiters+client.getClientName());<br />
            <br />
            }<br />
            <br />
            sendClients(people);<br />
            <br />
            }<br />
            <br />
            public staticboolean checkName(Client newClient){<br />
            <br />
            for(int i=0;i<br />
            Client client = (Client) clients.elementAt(i);<br />
            <br />
            if(client != newClient &amp;&amp; client.getClientName().equals(newClient.getClientName())){<br />
            <br />
            return false;<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            return true;<br />
            <br />
            }<br />
            <br />
            public static void closeAll(){<br />
            <br />
            while(clients.size()&gt;0){<br />
            <br />
            Client client = (Client) clients.firstElement();<br />
            <br />
            try {<br />
            <br />
            client.getClientSocket().close();<br />
            <br />
            } catch (IOException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //Logger logger = new Logger(System.out);<br />
            <br />
            //logger.log(&quot;错误-&quot; + e.toString());<br />
            <br />
            } finally {<br />
            <br />
            clients.removeElement(client);<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            public static synchronized void disconnect(Client client) {<br />
            <br />
            client.send(new StringBuffer(&quot;QUIT&quot;));<br />
            <br />
            try {<br />
            <br />
            client.getClientSocket().close();<br />
            <br />
            } catch (IOException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //Logger logger = new Logger(System.out);<br />
            <br />
            //logger.log(&quot;错误-&quot; + e.toString());<br />
            <br />
            } finally{<br />
            <br />
            clients.removeElement(client);<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            public static synchronized void sendClients(StringBuffer sb) {<br />
            <br />
            for(int i=0;i<br />
            Client client = (Client) clients.elementAt(i);<br />
            <br />
            client.send(sb);<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            public static synchronized void sendClients(StringBuffer sb,String ownerName,String toName) {<br />
            <br />
            for(int i=0;i<br />
            Client client = (Client) clients.elementAt(i);<br />
            <br />
            if(toName.equals(client.getClientName()) || toName.equals(&quot;所有的人&quot;) || ownerName.equals(client.getClientName())){<br />
            <br />
            client.send(sb);<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            public static synchronized void sendClients(Client ownerClient) {<br />
            <br />
            for(int i=0;i<br />
            Client client = (Client) clients.elementAt(i);<br />
            <br />
            if(client.getClientName().equals(ownerClient.getClientName())){<br />
            <br />
            client.send(new StringBuffer(&quot;MSG&quot;+CommandDelimiters+&quot;系统信息&gt;欢迎你进入!&quot;));<br />
            <br />
            }else{<br />
            <br />
            client.send(new StringBuffer(&quot;MSG&quot;+CommandDelimiters+&quot;系统信息&gt;[&quot;+ownerClient.getClientName()+&quot;]用户进入!&quot;));<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            public static void main(String[] args) {<br />
            <br />
            int port = 8888; <br />
            <br />
            if(args.length&gt;0){<br />
            <br />
            port = Integer.parseInt(args[0]);<br />
            <br />
            }<br />
            <br />
            //Logger logger = new Logger(System.out);<br />
            <br />
            //logger.log(&quot;信息-ChatServer[&quot;+port+&quot;]服务正在启动...&quot;);<br />
            <br />
            try {<br />
            <br />
            server = new ServerSocket(port);<br />
            <br />
            } catch (IOException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //logger.log(&quot;错误-&quot;+e.toString());<br />
            <br />
            }<br />
            <br />
            while(true){<br />
            <br />
            if(clients.size()&lt;5){<br />
            <br />
            try {<br />
            <br />
            socket = server.accept();<br />
            <br />
            if(socket != null){<br />
            <br />
            //logger.log(&quot;信息-&quot;+socket.toString()+&quot;连接&quot;);<br />
            <br />
            }<br />
            <br />
            } catch (IOException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //logger.log(&quot;错误-&quot;+e.toString());<br />
            <br />
            }<br />
            <br />
            int i=0;<br />
            <br />
            do{<br />
            <br />
            Client client = new Client(socket);<br />
            <br />
            if(client.getClientName() != null){<br />
            <br />
            clients.addElement(client);<br />
            <br />
            if(checkName(client)){<br />
            <br />
            //logger.log(&quot;信息-&quot;+&quot;目前有[&quot;+clients.size()+&quot;]个用户已连接&quot;);<br />
            <br />
            sendClients(client);<br />
            <br />
            client.start();<br />
            <br />
            notifyRoom();<br />
            <br />
            }else{<br />
            <br />
            client.send(new StringBuffer(&quot;TAKEN&quot;));<br />
            <br />
            disconnect(client);<br />
            <br />
            }<br />
            <br />
            i++;<br />
            <br />
            }<br />
            <br />
            break;<br />
            <br />
            }while(i<br />
            <br />
            <br />
            }else{<br />
            <br />
            try {<br />
            <br />
            Thread.sleep(200);<br />
            <br />
            } catch (InterruptedException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //logger.log(&quot;错误-&quot;+e.toString());<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }</font></font></td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>
<table cellspacing="1" cellpadding="1" width="63%" border="0">
    <tbody>
        <tr>
            <td><font face="arial,helvetica,sans-serif" size="2">//=======================================;<br />
            <br />
            // <em>Client.java</em><br />
            <br />
            //=======================================;<br />
            <br />
            /*<br />
            <br />
            * 创建日期2005-10-10<br />
            <br />
            *<br />
            <br />
            * TODO 要更改此生成的文件的模板，请转至<br />
            <br />
            * 窗口－首选项－ Java －代码样式－代码模板<br />
            <br />
            */<br />
            <br />
            package com.klstudio.socket.chat;<br />
            <br />
            <br />
            <br />
            import java.io.BufferedReader;<br />
            <br />
            import java.io.IOException;<br />
            <br />
            import java.io.InputStreamReader;<br />
            <br />
            import java.io.PrintStream;<br />
            <br />
            import java.net.Socket;<br />
            <br />
            //import com.klstudio.util.Logger;<br />
            <br />
            <br />
            <br />
            /**<br />
            <br />
            * @author kinglong<br />
            <br />
            * <br />
            <br />
            * TODO 要更改此生成的类型注释的模板，请转至窗口－首选项－ Java －代码样式－代码模板<br />
            <br />
            */<br />
            <br />
            public class Client extends Thread {<br />
            <br />
            private Socket clientSocket;<br />
            <br />
            private String clientName;<br />
            <br />
            private String clientIp;<br />
            <br />
            private BufferedReader br;<br />
            <br />
            private PrintStream ps;<br />
            <br />
            //private Logger logger;<br />
            <br />
            private ChatServer server;<br />
            <br />
            <br />
            <br />
            public Client(Socket socket) {<br />
            <br />
            //this.logger = new Logger(System.out);<br />
            <br />
            this.clientSocket = socket;<br />
            <br />
            try {<br />
            <br />
            this.br = new BufferedReader(new InputStreamReader(socket.getInputStream(),&quot;utf-8&quot;));<br />
            <br />
            this.ps = new PrintStream(socket.getOutputStream(),true,&quot;utf-8&quot;);<br />
            <br />
            String info = this.br.readLine();<br />
            <br />
            <br />
            <br />
            if(info!=null){<br />
            <br />
            String[] info_arr = info.split(ChatServer.CommandDelimiters);<br />
            <br />
            if(info_arr.length&gt;1){<br />
            <br />
            this.clientName = info_arr[1];<br />
            <br />
            }<br />
            <br />
            this.clientIp = socket.getRemoteSocketAddress().toString();<br />
            <br />
            }else{<br />
            <br />
            socket.close();<br />
            <br />
            }<br />
            <br />
            } catch (IOException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //this.logger.log(&quot;错误-&quot; + e.toString());<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            /**<br />
            <br />
            * @return 返回 ip。<br />
            <br />
            */<br />
            <br />
            public String getClientIp() {<br />
            <br />
            return clientIp;<br />
            <br />
            }<br />
            <br />
            /**<br />
            <br />
            * @return 返回 name。<br />
            <br />
            */<br />
            <br />
            public String getClientName() {<br />
            <br />
            return clientName;<br />
            <br />
            }<br />
            <br />
            <br />
            <br />
            /**<br />
            <br />
            * @return 返回 socket。<br />
            <br />
            */<br />
            <br />
            public Socket getClientSocket() {<br />
            <br />
            return clientSocket;<br />
            <br />
            }<br />
            <br />
            public void send(StringBuffer msg){<br />
            <br />
            this.ps.println(msg.toString()+&quot;\0&quot;);<br />
            <br />
            //this.ps.flush();<br />
            <br />
            }<br />
            <br />
            public void run() {<br />
            <br />
            while (true) {<br />
            <br />
            String line = null;<br />
            <br />
            try {<br />
            <br />
            line = this.br.readLine();<br />
            <br />
            } catch (IOException e) {<br />
            <br />
            // TODO 自动生成 catch 块<br />
            <br />
            //this.logger.log(&quot;错误-&quot; + e.toString());<br />
            <br />
            ChatServer.disconnect(this);<br />
            <br />
            ChatServer.notifyRoom();<br />
            <br />
            return;<br />
            <br />
            }<br />
            <br />
            if (line == null) {<br />
            <br />
            //this.logger.log(&quot;信息-[&quot; + this.clientName + this.clientIp + &quot;]用户离开!&quot;);<br />
            <br />
            ChatServer.disconnect(this);<br />
            <br />
            ChatServer.notifyRoom();<br />
            <br />
            if(this.clientName != null){<br />
            <br />
            ChatServer.sendClients(new StringBuffer(&quot;MSG&quot;+ChatServer.CommandDelimiters+&quot;系统信息&gt;[&quot; + this.clientName + &quot;]用户离开!&quot;));<br />
            <br />
            }<br />
            <br />
            return;<br />
            <br />
            }<br />
            <br />
            //this.logger.log(&quot;信息-&quot;+line);<br />
            <br />
            String[] cmd_arr = line.split(ChatServer.CommandDelimiters);<br />
            <br />
            String keyword = cmd_arr[0];<br />
            <br />
            keyword = keyword.substring(1);<br />
            <br />
            if(keyword.equals(&quot;MSG&quot;)){<br />
            <br />
            StringBuffer msg = new StringBuffer(&quot;MSG&quot;+ChatServer.CommandDelimiters);<br />
            <br />
            msg.append(this.clientName+&quot;&gt;&quot;);<br />
            <br />
            msg.append(cmd_arr[1]);<br />
            <br />
            ChatServer.sendClients(msg,this.clientName,cmd_arr[2]);<br />
            <br />
            }else if(keyword.equals(&quot;QUIT&quot;)){<br />
            <br />
            //this.logger.log(&quot;信息-[&quot; + this.clientName + this.clientIp + &quot;]用户离开!&quot;);<br />
            <br />
            ChatServer.disconnect(this);<br />
            <br />
            ChatServer.notifyRoom();<br />
            <br />
            ChatServer.sendClients(new StringBuffer(&quot;MSG&quot;+ChatServer.CommandDelimiters+&quot;系统信息&gt;[&quot; + this.clientName + &quot;]用户离开!&quot;));<br />
            <br />
            this.stop();<br />
            <br />
            return;<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }<br />
            </font></td>
        </tr>
    </tbody>
</table>
</p>
<p><font size="2"><font face="arial,helvetica,sans-serif">//<font color="#ff0000">注意，服务端向客户端发送的信息，必需以&rdquo;\0&rdquo;，空字符结尾，否则客户端也无法接收到信息！</font></font></font></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=89" /> 
	  <id>http://www.jdhcn.com/default.asp?id=89</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[AS3 库资源 很多非常有用的类库]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-05-03T11:50:28+08:00</updated>
	  <published>2009-05-03T11:50:28+08:00</published>
		  <summary type="html"><![CDATA[<p style="text-indent: 2em">下面是非常有用的类库:</p>
<p style="text-indent: 2em"><span style="background-color: #ffff00"><strong>APIs、Libs、Components</strong></span></p>
<p style="text-indent: 2em">1、as3ebaylib</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3ebaylib/">http://code.google.com/p/as3ebaylib/</a></p>
<p style="text-indent: 2em">2、as3youtubelib</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3youtubelib/">http://code.google.com/p/as3youtubelib/</a></p>
<p style="text-indent: 2em">3、as3flickrlib</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3flickrlib/">http://code.google.com/p/as3flickrlib/</a></p>
<p style="text-indent: 2em">4、Yahoo ASTRA Flash Components</p>
<p style="text-indent: 2em"><a href="http://developer.yahoo.com/flash/astra-flash/">http://developer.yahoo.com/flash/astra-flash/</a></p>
<p style="text-indent: 2em">5、facebook-as3</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/facebook-as3/">http://code.google.com/p/facebook-as3/</a></p>
<p style="text-indent: 2em">6、as3awss3lib</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3awss3lib/">http://code.google.com/p/as3awss3lib/</a></p>
<p style="text-indent: 2em">7、Adobe ActionScript 3:resources:apis:libraries （官方，包括corelib、FlexUnit、Flickr、Mappr、RSS and Atom libraries、Odeo、YouTube）</p>
<p style="text-indent: 2em"><a href="http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries">http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries</a></p>
<p style="text-indent: 2em">8、Tweener&nbsp;&nbsp; 用于过渡与切换的一组动画库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/tweener/">http://code.google.com/p/tweener/</a></p>
<p style="text-indent: 2em">9、uicomponents-as3&nbsp;&nbsp;&nbsp;&nbsp; 一组轻量级的AS3 UI组件库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/uicomponents-as3/">http://code.google.com/p/uicomponents-as3/</a></p>
<p style="text-indent: 2em">10、as3ds&nbsp;&nbsp;&nbsp;&nbsp; AS3的数据结构实现</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3ds/">http://code.google.com/p/as3ds/</a></p>
<p style="text-indent: 2em">11、mecheye-as3-libraries&nbsp;&nbsp;&nbsp;&nbsp; 一组主要用于Flash 游戏开发的AS3库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/mecheye-as3-libraries/">http://code.google.com/p/mecheye-as3-libraries/</a></p>
<p style="text-indent: 2em">12、XIFF&nbsp;&nbsp; 一套XMPP协议的AS3实现</p>
<p style="text-indent: 2em"><a href="http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/">http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/</a></p>
<p style="text-indent: 2em">13、FZip&nbsp;&nbsp; 一套AS3库，可用作对ZIP压缩文件的载入、修改与创建</p>
<p style="text-indent: 2em"><a href="http://codeazur.com.br/lab/fzip/">http://codeazur.com.br/lab/fzip/</a></p>
<p style="text-indent: 2em">14、FlexLib&nbsp;&nbsp; 一套开源的Flex界面组件库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/flexlib/">http://code.google.com/p/flexlib/</a></p>
<p style="text-indent: 2em">15、AnimatedGIfLoader Flex Component&nbsp;&nbsp;&nbsp;&nbsp; 可载入GIF的Flex组件</p>
<p style="text-indent: 2em"><a href="http://dougmccune.com/blog/animatedgifloader-flex-component/">http://dougmccune.com/blog/animatedgifloader-flex-component/</a></p>
<p style="text-indent: 2em">16、goplayground&nbsp;&nbsp;&nbsp;&nbsp; 一套轻量级的，可用创建属于你自己的AS3 动画工具的库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/goplayground/">http://code.google.com/p/goplayground/</a></p>
<p style="text-indent: 2em">17、AlivePDF&nbsp;&nbsp; 开源的用于PDF创建的AS3库</p>
<p style="text-indent: 2em"><a href="http://www.alivepdf.org/">http://www.alivepdf.org/</a></p>
<p style="text-indent: 2em">18、jwopitz-lib&nbsp;&nbsp; 一组开源的Flex用户界面组件</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/jwopitz-lib/">http://code.google.com/p/jwopitz-lib/</a></p>
<p style="text-indent: 2em">19、as3crypto&nbsp;&nbsp; AS3实现的一套加密库，包括多种加密算法</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3crypto/">http://code.google.com/p/as3crypto/</a></p>
<p style="text-indent: 2em">20、flare&nbsp;&nbsp;&nbsp;&nbsp; 一套强大的可视化交互的AS3类库</p>
<p style="text-indent: 2em"><a href="http://flare.prefuse.org/">http://flare.prefuse.org/</a></p>
<p style="text-indent: 2em">21、SWFAddress&nbsp;&nbsp;&nbsp;&nbsp; 一小而强大的库，可以为Flash和Ajax提供深链接的功能</p>
<p style="text-indent: 2em"><a href="http://www.asual.com/swfaddress/">http://www.asual.com/swfaddress/</a></p>
<p style="text-indent: 2em">22、SWFObject&nbsp;&nbsp;&nbsp;&nbsp; 用于嵌入Flash，Adobe官方也认可了</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/swfobject/">http://code.google.com/p/swfobject/</a></p>
<p style="text-indent: 2em">23、ulse Particle System 一套开源的强大的AS3动态粒子系统</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/pulse-particle/">http://code.google.com/p/pulse-particle/</a></p>
<p style="text-indent: 2em"><a href="http://www.rogue-development.com/pulseParticles.html">http://www.rogue-development.com/pulseParticles.html</a></p>
<p style="text-indent: 2em">24、SpringGraph Flex Component</p>
<p style="text-indent: 2em"><a href="http://mark-shepherd.com/blog/springgraph-flex-component/">http://mark-shepherd.com/blog/springgraph-flex-component/</a></p>
<p style="text-indent: 2em">25、GoASAP&nbsp;&nbsp;&nbsp;&nbsp; AS3动画库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/goasap/">http://code.google.com/p/goasap/</a></p>
<p style="text-indent: 2em"><a href="http://www.goasap.org/index.html">http://www.goasap.org/index.html</a></p>
<p style="text-indent: 2em">26、asaplibrary&nbsp;&nbsp; 一套开源的Flash Actionscript3.0 RIA库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/asaplibrary/">http://code.google.com/p/asaplibrary/</a></p>
<p style="text-indent: 2em"><a href="http://asaplibrary.org/">http://asaplibrary.org/</a></p>
<p style="text-indent: 2em"><a href="http://asapframework.org/">http://asapframework.org</a></p>
<p style="text-indent: 2em">27、as3mathlib 开源Flex/Actionscript数学库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3mathlib/">http://code.google.com/p/as3mathlib/</a></p>
<p style="text-indent: 2em">28、as3corelib 包含一些基础功能AS3库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3corelib/">http://code.google.com/p/as3corelib/</a></p>
<p style="text-indent: 2em">29、minimalcomps 一组AS3 UI组件</p>
<p style="text-indent: 2em"><a href="http://www.bit-101.com/minimalcomps/">http://www.bit-101.com/minimalcomps/</a></p>
<p style="text-indent: 2em">30、as3gif</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3gif/">http://code.google.com/p/as3gif/</a></p>
<p style="text-indent: 2em">31、queueloader-as3&nbsp;&nbsp;&nbsp;&nbsp; 一组AS3库，用来进行资源序列载入及监测</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/queueloader-as3/">http://code.google.com/p/queueloader-as3/</a></p>
<p style="text-indent: 2em">32、TweenMax (AS3)</p>
<p style="text-indent: 2em"><a href="http://blog.greensock.com/tweenmaxas3/">http://blog.greensock.com/tweenmaxas3/</a></p>
<p style="text-indent: 2em">33、Atellis Reflection Component&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一款Flex反射效果组件</p>
<p style="text-indent: 2em"><a href="http://labs.atellis.com/2007/07/11/atellis-reflection-component/">http://labs.atellis.com/2007/07/11/atellis-reflection-component/</a></p>
<p style="text-indent: 2em">34、AS3Eval&nbsp;&nbsp;&nbsp;&nbsp; 简单来说，就是用AS3实现的AS3编译器</p>
<p style="text-indent: 2em"><a href="http://%20.hurlant.com/">http://eval.hurlant.com/</a></p>
<p style="text-indent: 2em">35、ByteArray的组件、库合集，包括liquid components、mousegesture、ASZip、GIF Player、GIF Animation Encoder、AlivePDF、Live JPEG Encoder、ScaleBitmap等</p>
<p style="text-indent: 2em"><a href="http://www.bytearray.org/?page_id=82">http://www.bytearray.org/?page_id=82</a></p>
<p style="text-indent: 2em">36、AS3C&nbsp;&nbsp;&nbsp;&nbsp; 针对AVM2虚拟机，用C#写的字节码编译器</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3c/">http://code.google.com/p/as3c/</a></p>
<p style="text-indent: 2em">37、as3httpclientlib&nbsp;&nbsp; as3实现的http客户端</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3httpclientlib/">http://code.google.com/p/as3httpclientlib/</a></p>
<p style="text-indent: 2em">38、as3ui&nbsp;&nbsp; 一组常规的as3　ui界面库</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3ui/">http://code.google.com/p/as3ui/</a></p>
<p style="text-indent: 2em">39、as3xls　让你在flex中可以读写Excel文件</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3xls/">http://code.google.com/p/as3xls/</a></p>
<p style="text-indent: 2em">40、as3flexdb 让你的flex程序可以连接到MySQL服务器，主要是使用AMFPHP来访问PHP服务器</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3flexdb/">http://code.google.com/p/as3flexdb/</a></p>
<p style="text-indent: 2em">这一是一篇详细使用介绍的教程</p>
<p style="text-indent: 2em"><a href="http://itutorials.ro/viewtopic.php?f=9">http://itutorials.ro/viewtopic.php?f=9</a>&amp;t=7</p>
<p style="text-indent: 2em">41、vivisectingmedia-as3 　一组AS3/Flex实用库，是作者在实践中总结出来的</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/vivisectingmedia-as3/">http://code.google.com/p/vivisectingmedia-as3/</a></p>
<p style="text-indent: 2em"><span style="background-color: #ffff00"><strong>Actionscript 3.0 Class</strong></span></p>
<p style="text-indent: 2em">1、fZip&nbsp;&nbsp; 此类可允许你载入标准的zip文件并提取里面包含的文件</p>
<p style="text-indent: 2em"><a href="http://wahlers.com.br/claus/blog/zip-it-up/">http://wahlers.com.br/claus/blog/zip-it-up/</a></p>
<p style="text-indent: 2em">2、AS3: Layout class for Flash CS3&nbsp;&nbsp;&nbsp;&nbsp; 一组用作布局的类</p>
<p style="text-indent: 2em"><a href="http://www.senocular.com/?id=2.8">http://www.senocular.com/?id=2.8</a></p>
<p style="text-indent: 2em">3、CSSLoader&nbsp;&nbsp;&nbsp;&nbsp; 该类允许Flex应用程序在运行时载入CSS</p>
<p style="text-indent: 2em"><a href="http://www.rubenswieringa.com/blog/cssloader">http://www.rubenswieringa.com/blog/cssloader</a></p>
<p style="text-indent: 2em">4、AS3: QueryString&nbsp;&nbsp;&nbsp;&nbsp; 一个单例类，用来获取URL地址后所带参数值对</p>
<p style="text-indent: 2em"><a href="http://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/">http://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/</a>#more-141</p>
<p style="text-indent: 2em">5、ActionScript 3 Contextual Menu Manager Class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AS3关联菜单管理类</p>
<p style="text-indent: 2em"><a href="http://www.blog.noponies.com/archives/103">http://www.blog.noponies.com/archives/103</a></p>
<p style="text-indent: 2em"><span style="background-color: #ffff00"><strong>2D &amp; 3D Engine</strong></span></p>
<p style="text-indent: 2em">1、APE (Actionscript Physics Engine)&nbsp;&nbsp; 物理引擎</p>
<p style="text-indent: 2em">APE前身是as2版本的Flade，呼声很高，优点就是清晰简单，一共没有几个类：），目 前版本alpha 0.45 ，有API文档和示例，教程有一篇quick start ，在Google Group上有一个论坛可以讨论。svn上一直在更新目前svn上的版本为0.5a</p>
<p style="text-indent: 2em"><a href="http://www.cove.org/ape/">http://www.cove.org/ape/</a></p>
<p style="text-indent: 2em">2、Away3D</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/away3d/">http://code.google.com/p/away3d/</a></p>
<p style="text-indent: 2em">3、Papervision3D</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/papervision3d/">http://code.google.com/p/papervision3d/</a></p>
<p style="text-indent: 2em">4、Sandy&nbsp;&nbsp;&nbsp;&nbsp; 开源3D库</p>
<p style="text-indent: 2em"><a href="http://www.flashsandy.org/versions/3.0">http://www.flashsandy.org/versions/3.0</a></p>
<p style="text-indent: 2em">5、FORM&nbsp;&nbsp; 一套AS3完成的用于2D刚性物体的物理引擎</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/foam-as3/">http://code.google.com/p/foam-as3/</a></p>
<p style="text-indent: 2em">6、Five3D&nbsp;&nbsp; 基于矢量的Flash 3D 交互动画创建</p>
<p style="text-indent: 2em"><a href="http://five3d.mathieu-badimon.com/">http://five3d.mathieu-badimon.com/</a></p>
<p style="text-indent: 2em">7、Flade (Flash Dynamics Engine)&nbsp;&nbsp; 一套开源的2D物理引擎，AS2实现</p>
<p style="text-indent: 2em"><a href="http://www.cove.org/flade/">http://www.cove.org/flade/</a></p>
<p style="text-indent: 2em">8、Box2DFlashAS3&nbsp;&nbsp;&nbsp;&nbsp; 2D物理引擎，AS3实现，基于强大的Box2D C++物理库</p>
<p style="text-indent: 2em"><a href="http://box2dflash.sourceforge.net/">http://box2dflash.sourceforge.net/</a></p>
<p style="text-indent: 2em">9、Paradox&nbsp;&nbsp; 基于Flash的第一称3D引擎</p>
<p style="text-indent: 2em"><a href="http://animasinteractive.com/propaganda/">http://animasinteractive.com/propaganda/</a></p>
<p style="text-indent: 2em">10、ND3D AS3 3D Engine 　一款简单的AS3开源3D引擎，编译后的引擎大小仅约10K</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/nd3d/">http://code.google.com/p/nd3d/</a></p>
<p style="text-indent: 2em"><a href="http://www.nulldesign.de/nd3d-as3-3d-engine/">http://www.nulldesign.de/nd3d-as3-3d-engine/</a></p>
<p style="text-indent: 2em">11、motor2&nbsp;&nbsp; 基于Box2d的AS3刚体引擎,也是2D的.</p>
<p style="text-indent: 2em">作者就是 AS3数据结构的作者，2007年最后一天发布</p>
<p style="text-indent: 2em">作者主页：<a href="http://lab.polygonal.de/motor_physics/">http://lab.polygonal.de/motor_physics/</a></p>
<p style="text-indent: 2em">代码：<a href="http://code.google.com/p/motor2/">http://code.google.com/p/motor2/</a></p>
<p style="text-indent: 2em">12、WOW-Engine&nbsp;&nbsp; 法国人写的，基于Sandy library的算法 3D物理引擎</p>
<p style="text-indent: 2em"><a href="http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/">http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/</a></p>
<p style="text-indent: 2em"><span style="background-color: #ffff00"><strong>FrameWorks</strong></span></p>
<p style="text-indent: 2em">1、Cairngorm&nbsp;&nbsp; Adobe官方出的Flex框架</p>
<p style="text-indent: 2em"><a href="http://labs.adobe.com/wiki/index.php/Cairngorm">http://labs.adobe.com/wiki/index.php/Cairngorm</a></p>
<p style="text-indent: 2em">2、PureMVC&nbsp;&nbsp; 纯AS3框架，也有其它语言的实现</p>
<p style="text-indent: 2em"><a href="http://www.puremvc.org/">http://www.puremvc.org/</a></p>
<p style="text-indent: 2em">3、ASWing AS3&nbsp;&nbsp; 一套开源的AS3 GUI框架</p>
<p style="text-indent: 2em"><a href="http://www.aswing.org/">http://www.aswing.org/</a></p>
<p style="text-indent: 2em">4、EasyMVC&nbsp;&nbsp; 由事件驱动的MVC框架</p>
<p style="text-indent: 2em"><a href="http://projects.simb.net/easyMVC/">http://projects.simb.net/easyMVC/</a></p>
<p style="text-indent: 2em">5、Mate 基于Tag及事件驱动的Flex框架</p>
<p style="text-indent: 2em"><a href="http://mate.asfusion.com/">http://mate.asfusion.com/</a></p>
<p style="text-indent: 2em">6、ARP&nbsp;&nbsp;&nbsp;&nbsp; 基于模式（Pattern）的RIA框架，Flash平台，支持AS2和AS3</p>
<p style="text-indent: 2em"><a href="http://osflash.org/projects/arp">http://osflash.org/projects/arp</a></p>
<p style="text-indent: 2em">7、Gaia&nbsp;&nbsp; 开源的Flash前端框架，支持AS2和AS3，用于快速开发</p>
<p style="text-indent: 2em"><a href="http://www.gaiaflashframework.com/">http://www.gaiaflashframework.com/</a></p>
<p style="text-indent: 2em">8、flest&nbsp;&nbsp; Actionscript3.0/Flex应用程序框架，用来开发企业级的RIA</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/flest/">http://code.google.com/p/flest/</a></p>
<p style="text-indent: 2em">9、Gugga&nbsp;&nbsp;&nbsp;&nbsp; Flash Framework&nbsp;&nbsp;&nbsp;&nbsp; 更新至AS3</p>
<p style="text-indent: 2em"><a href="http://www.gugga.com/flashblog/">http://www.gugga.com/flashblog/</a></p>
<p style="text-indent: 2em">10、Prana 另一个提供了IOC反转控制的框架，类似著名的Spring框架</p>
<p style="text-indent: 2em"><a href="http://www.pranaframework.org/">http://www.pranaframework.org/</a></p>
<p style="text-indent: 2em">11、OpenFlux&nbsp;&nbsp; 开源的Flex组件框架，让开发Flex组件更加快速容易</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/openflux/">http://code.google.com/p/openflux/</a></p>
<p style="text-indent: 2em">12、Degrafa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 声明式的Flex图形框架，允许以MXML标签的方式绘制图形、创建皮肤，还包括对CSS的支持</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/degrafa/">http://code.google.com/p/degrafa/</a></p>
<p style="text-indent: 2em">13、FlexMVCs&nbsp;&nbsp; 针对AS3和Flex的应用程序框架，基于PureMVC，作了些修正和精简</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/flexmvcs/">http://code.google.com/p/flexmvcs/</a></p>
<p style="text-indent: 2em"><span style="background-color: #ffff00"><strong>Flash &amp; Flex Tools、Servers</strong></span></p>
<p style="text-indent: 2em">1、FlexUnit&nbsp;&nbsp;&nbsp;&nbsp; Flex/Actionscript3.0单元测试框架</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/as3flexunitlib/">http://code.google.com/p/as3flexunitlib/</a></p>
<p style="text-indent: 2em">2、Visual FlexUnit 增强的FlexUnit，支持&ldquo;可视化断言&rdquo;</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/visualflexunit/">http://code.google.com/p/visualflexunit/</a></p>
<p style="text-indent: 2em">3、RED bug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug调试控制器，让Flash、Flex、AIR应用程序更加容易</p>
<p style="text-indent: 2em"><a href="http://www.realeyesmedia.com/redbug/">http://www.realeyesmedia.com/redbug/</a></p>
<p style="text-indent: 2em">4、reflexutil 可在运行时对Flex组件进行调试</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/reflexutil/">http://code.google.com/p/reflexutil/</a></p>
<p style="text-indent: 2em">5、FxSpy&nbsp;&nbsp; 当Flex应用程序运行时可以检测和动态的改变可视化组件属性值</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/fxspy/">http://code.google.com/p/fxspy/</a></p>
<p style="text-indent: 2em">6、ThunderBolt 基于Firefox的Firebug插件的日志扩展，支持AS2及AS3</p>
<p style="text-indent: 2em"><a href="http://code.google.com/p/flash-thunderbolt/">http://code.google.com/p/flash-thunderbolt/</a></p>
<p style="text-indent: 2em">7、FlashTracer Firefox扩展，可以以侧栏的方式将Flash中trace()的结果显示</p>
<p style="text-indent: 2em">8、RIALogger　另一款Flex/AIR的Debug工具</p>
<p style="text-indent: 2em"><a href="http://renaun.com/blog/flex-components/rialogger/">http://renaun.com/blog/flex-components/rialogger/</a></p>
<p style="text-indent: 2em">9、Alcon 一款轻量级的AS2及AS3的Debug工具，AIR方式将Debug信息展示出来</p>
<p style="text-indent: 2em"><a href="http://blog.hexagonstar.com/alcon/">http://blog.hexagonstar.com/alcon/</a></p>
<p style="text-indent: 2em">10、GDS (Granite Data Services) 开源，提供了Adobe LiveCycle Data Services类似功能的服务器</p>
<p style="text-indent: 2em"><a href="http://www.graniteds.org/">http://www.graniteds.org/</a></p>
<p style="text-indent: 2em"><span style="background-color: #ffff00">Flex Explorers&nbsp;&nbsp; （大部分为Flex2版本，但同样适用于Flex3）</span></p>
<p style="text-indent: 2em">1、Flex3 Component Explorer&nbsp;&nbsp; Flex各类组件示例</p>
<p style="text-indent: 2em"><a href="http://examples.adobe.com/flex3/componentexplorer/explorer.html">http://examples.adobe.com/flex3/componentexplorer/explorer.html</a></p>
<p style="text-indent: 2em">2、Resize ManagerFX Explorer （此为商业作品，要收费的）</p>
<p style="text-indent: 2em"><a href="http://www.teotigraphix.com/explorers/ResizeManagerFX/ResizeManagerFXExplorer.html">http://www.teotigraphix.com/explorers/ResizeManagerFX/ResizeManagerFXExplorer.html</a></p>
<p style="text-indent: 2em">3、Flex3 Style Explorer</p>
<p style="text-indent: 2em"><a href="http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html">http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html</a></p>
<p style="text-indent: 2em">4、Flex2 Style Explorer（添加了Kuler功能）Flex UI组件风格定制并可输出为CSS</p>
<p style="text-indent: 2em"><a href="http://www.maclema.com/content/sek/">http://www.maclema.com/content/sek/</a></p>
<p style="text-indent: 2em">5、Flex2 Style Explorer（Adobe 原始的版本）</p>
<p style="text-indent: 2em"><a href="http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html">http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html</a></p>
<p style="text-indent: 2em">6、Flex2 Filter Explorer&nbsp;&nbsp; 查看各类滤镜效果并可进行设置</p>
<p style="text-indent: 2em"><a href="http://merhl.com/flex2_samples/filterExplorer/">http://merhl.com/flex2_samples/filterExplorer/</a></p>
<p style="text-indent: 2em"><a href="http://merhl.com/?p=40">http://merhl.com/?p=40</a>&nbsp;&nbsp; (AIR版本)</p>
<p style="text-indent: 2em">7、Flex2 Primitive Explorer&nbsp;&nbsp; 在Flex中创建各种简单形状</p>
<p style="text-indent: 2em"><a href="http://www.flexibleexperiments.com/Flex/PrimitiveExplorer/Flex2PrimitiveExplorer.html">http://www.flexibleexperiments.com/Flex/PrimitiveExplorer/Flex2PrimitiveExplorer.html</a></p>
<p style="text-indent: 2em">&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=88" /> 
	  <id>http://www.jdhcn.com/default.asp?id=88</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[as3中的资源管理与GC]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-04-08T04:33:26+08:00</updated>
	  <published>2009-04-08T04:33:26+08:00</published>
		  <summary type="html"><![CDATA[<p>1、as3中不管是普通的object，还是displayobejct都一视同仁<br />
<br />
2、fp9中的gc采用了两种方式进行内存清理<br />
&nbsp; a、reference count引用计数，顾名思义，根据对象被引用的次数，如果为0，gc清除之<br />
&nbsp; b、mark sweeping标记扫荡，从root开始往下扫荡，标记所有和root有关联的object，清除没有关联的，方法虽然精确，但是很耗资源，所以fp9只是偶尔来一次扫荡<br />
<img src="http://www.asarea.cn/resource/pic/diary/20080706110144.jpg" onload="if(this.width&gt;560)this.style.width=560" alt="" /><br />
<br />
3、你永远无法知道gc什么时候会调用，你能做的只是等待，等待gc在某一时刻运行起来。<br />
<br />
4、as3中delete只能用来删除动态属性，不能删除变量，可以将变量置为null来达到删除对象的目的。<br />
<br />
5、将对象置为null，gc是否就会来清除该对象的内存？不一定！！！如果在别处有对它或者它的属性或者它的方法的引用，gc就不会清除该对象！<br />
<br />
6、as3中在addlistener时，可以将weakreference设置为true，这样listener这个函数对象的引用将不计入引用记数，标记扫荡也不理它(it is not counted in reference counting, and it is not followed for mark sweeping)。Grant Skinner甚至建议永远将该值设定为true！<br />
<br />
7、as3的System类提供了totolmemory工具来查看当前fp所占有的内存，great！<br />
<br />
8、as3的System类乍一看居然提供了gc方法，强制gc运行，但是仅仅适用于FP debugger version和AIR程序。如果要强制运行gc，可以hack。可以调用两个localconnection，connect两个同名方法，这会产生一个错误，导致gc强制运行一次标记扫荡！<br />
try {<br />
&nbsp; new LocalConnection()onnect('foo');<br />
&nbsp; new LocalConnection()onnect('foo');<br />
} catch (e:*) {}<br />
&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=87" /> 
	  <id>http://www.jdhcn.com/default.asp?id=87</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Flex与后台交互的4种方法]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-03-27T10:57:54+08:00</updated>
	  <published>2009-03-27T10:57:54+08:00</published>
		  <summary type="html"><![CDATA[<strong>HTTPService</strong><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.jdhcn.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"> <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; initialize=&#34;initializeHandler(event)&#34;&gt;<br/>&lt;mx:Script&gt;<br/>&lt;![CDATA[<br/>private function initializeHandler(event:Event):void {<br/>countriesService.send();<br/>}<br/>private function changeHandler(event:Event):void {<br/>statesService.send();<br/>}<br/>]]&gt;<br/>&lt;/mx:Script&gt;<br/>&lt;!-- 载入纯静态的xml数据 --&gt;<br/>&lt;mx:HTTPService id=&#34;countriesService&#34; url=&#34;<a href="http://www.rightactionscri&#112;t.com/states/xml/countries.xml" target="_blank" rel="external">http://www.rightactionscri&#112;t.com/states/xml/countries.xml</a>&#34; /&gt;<br/>&lt;!-- 载入由php生成的xml数据 --&gt;<br/>&lt;mx:HTTPService id=&#34;statesService&#34; url=&#34;<a href="http://www.rightactionscri&#112;t.com/states/xml/states.php" target="_blank" rel="external">http://www.rightactionscri&#112;t.com/states/xml/states.php</a>&#34;&gt;<br/>&lt;!-- 以下标签就是要发送到服务端的数据了,可以这样理解:有一个名为country的变量,它的值为花括号{}里的内容 --&gt;<br/>&lt;mx:request&gt;<br/>&lt;country&gt;{country.value}&lt;/country&gt;<br/>&lt;/mx:request&gt;<br/>&lt;/mx:HTTPService&gt;<br/>&lt;mx:VBox&gt;<br/>&lt;!-- 此控件的数据由第一个&lt;mx:HTTPService/&gt;控件接收的内容提供,并且由这个ComboBox控制着第二个ComboBox所要显示的内容 --&gt;<br/>&lt;mx:ComboBox id=&#34;country&#34; dataProvider=&#34;{countriesService.lastResult.countries.country}&#34;<br/>change=&#34;changeHandler(event)&#34; /&gt;<br/>&lt;!-- 下面的ComboBox已经绑定了{statesService.lastResult.states.state},随它的数据改变而改变 --&gt;<br/>&lt;mx:ComboBox dataProvider=&#34;{statesService.lastResult.states.state}&#34; /&gt;<br/>&lt;/mx:VBox&gt;<br/>&lt;/mx:Application&gt;<br/></div></div><br/><br/><strong>URLLoader</strong><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.jdhcn.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"> <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; initialize=&#34;initializeHandler(event)&#34;&gt;<br/>&lt;mx:Script&gt;<br/>&lt;![CDATA[<br/>private var _countriesService:URLLoader;<br/>private var _statesService:URLLoader;<br/>private function initializeHandler(event:Event):void {<br/>_countriesService = new URLLoader();<br/>_countriesService.addEventListener(Event.COMPLETE, countriesCompleteHandler);<br/>_countriesService.load(new URLRequest(&#34;<a href="http://www.rightactionscri&#112;t.com/states/xml/countries.xml" target="_blank" rel="external">http://www.rightactionscri&#112;t.com/states/xml/countries.xml</a>&#34;));<br/>_statesService = new URLLoader();<br/>_statesService.addEventListener(Event.COMPLETE, statesCompleteHandler);<br/>XML.ignoreWhitespace = true;<br/>}<br/>private function countriesCompleteHandler(event:Event):void {<br/>var xml:XML = new XML(_countriesService.data);<br/>country.dataProvider = xml.children();<br/>}<br/>private function statesCompleteHandler(event:Event):void {<br/>var xml:XML = new XML(_statesService.data);<br/>state.dataProvider = xml.children();<br/>}<br/>private function changeHandler(event:Event):void {<br/>var request:URLRequest = new URLRequest(&#34;<a href="http://www.rightactionscri&#112;t.com/states/xml/states.php" target="_blank" rel="external">http://www.rightactionscri&#112;t.com/states/xml/states.php</a>&#34;);<br/>var parameters:URLVariables = new URLVariables();<br/>parameters.country = country.value;<br/>request.data = parameters;<br/>_statesService.load(request);<br/>}<br/>]]&gt;<br/>&lt;/mx:Script&gt;<br/>&lt;mx:VBox&gt;<br/>&lt;mx:ComboBox id=&#34;country&#34; change=&#34;changeHandler(event)&#34; /&gt;<br/>&lt;mx:ComboBox id=&#34;state&#34; /&gt;<br/>&lt;/mx:VBox&gt;<br/>&lt;/mx:Application&gt;<br/></div></div><br/><br/><strong>WebService 方法一</strong><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.jdhcn.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"> <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; initialize=&#34;initializeHandler(event)&#34;&gt;<br/>&lt;mx:Script&gt;<br/>&lt;![CDATA[<br/>private function initializeHandler(event:Event):void {<br/>statesService.getCountries();<br/>}<br/>private function changeHandler(event:Event):void {<br/>statesService.getStates(country.value);<br/>}<br/>]]&gt;<br/>&lt;/mx:Script&gt;<br/>&lt;mx:WebService id=&#34;statesService&#34;<br/>wsdl=&#34;<a href="http://www.rightactionscri&#112;t.com/states/webservice/StatesService.php?wsdl" target="_blank" rel="external">http://www.rightactionscri&#112;t.com/states/webservice/StatesService.php?wsdl</a>&#34;&gt;<br/>&lt;mx:operation name=&#34;getCountries&#34; /&gt;<br/>&lt;mx:operation name=&#34;getStates&#34; /&gt;<br/>&lt;/mx:WebService&gt;<br/>&lt;mx:VBox&gt;<br/>&lt;mx:ComboBox id=&#34;country&#34;<br/>dataProvider=&#34;{statesService.getCountries.lastResult}&#34; change=&#34;changeHandler(event)&#34; /&gt;<br/>&lt;mx:ComboBox dataProvider=&#34;{statesService.getStates.lastResult}&#34; /&gt;<br/>&lt;/mx:VBox&gt;<br/>&lt;/mx:Application&gt;<br/></div></div><br/><br/><strong>WebService 方法二</strong><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.jdhcn.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"> <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; initialize=&#34;initializeHandler(event)&#34;&gt;<br/>&lt;mx:Script&gt;<br/>&lt;![CDATA[<br/>private function initializeHandler(event:Event):void {<br/>statesService.getCountries.send( );<br/>}<br/>private function changeHandler(event:Event):void {<br/>statesService.getStates.send( );<br/>}<br/>]]&gt;<br/>&lt;/mx:Script&gt;<br/>&lt;mx:WebService id=&#34;statesService&#34; wsdl=&#34;<a href="http://www.rightactionscri&#112;t.com/states/webservice/StatesService.php?wsdl" target="_blank" rel="external">http://www.rightactionscri&#112;t.com/states/webservice/StatesService.php?wsdl</a>&#34;&gt;<br/>&lt;mx:operation name=&#34;getCountries&#34; /&gt;<br/>&lt;mx:operation name=&#34;getStates&#34;&gt;<br/>&lt;mx:request&gt;<br/>&lt;country&gt;{country.value}&lt;/country&gt;<br/>&lt;/mx:request&gt;<br/>&lt;/mx:operation&gt;<br/>&lt;/mx:WebService&gt;<br/>&lt;mx:VBox&gt;<br/>&lt;mx:ComboBox id=&#34;country&#34;<br/>dataProvider=&#34;{statesService.getCountries.lastResult}&#34; change=&#34;changeHandler(event)&#34; /&gt;<br/>&lt;mx:ComboBox dataProvider=&#34;{statesService.getStates.lastResult}&#34; /&gt;<br/>&lt;/mx:VBox&gt;<br/>&lt;/mx:Application&gt; </div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=86" /> 
	  <id>http://www.jdhcn.com/default.asp?id=86</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[gskinner发布最新的AS3补间动画类库]]></title>
	  <author>
		 <name>极度鹤</name>
		 <uri>http://www.jdhcn.com/</uri>
		 <email>lzdk2003@hotmail.com</email>
	  </author>
	  <category term="" scheme="http://www.jdhcn.com/default.asp?cateID=8" label="AS3.0编程" /> 
	  <updated>2009-02-13T18:32:54+08:00</updated>
	  <published>2009-02-13T18:32:54+08:00</published>
		  <summary type="html"><![CDATA[<p>GTween是由国外知名RIA咨询公司gskinner发布的一套使用AS3构造补间动画的类库，这周，他们推出了核心经过重新改写的Beta 5版本，功能异常强大，更令人咂舌的是，这个AS3 Library只有3kb！如果你是AS3开发人员又对于设计超酷的补间动画有需求的话，强烈推荐去尝试GTween这个类库。<br />
<br />
GTween的官方站点：<br />
<br />
<a href="http://www.gskinner.com/libraries/gtween/" target="_blank">http://www.gskinner.com/libraries/gtween/</a><br />
<br />
里面，介绍，文档，Demo，下载一应俱全！</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.jdhcn.com/article.asp?id=85" /> 
	  <id>http://www.jdhcn.com/default.asp?id=85</id>
  </entry>	
		
</feed>
