<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[专注于Flash RIA与网络游戏开发]]></title>
<link>http://www.sujun.org/</link>
<description><![CDATA[弃天笑的小窝]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[sujun10@21cn.com(弃天笑)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>专注于Flash RIA与网络游戏开发</title> 
	<url>http://www.sujun.org/images/logos.gif</url> 
	<link>http://www.sujun.org/</link> 
	<description>专注于Flash RIA与网络游戏开发</description> 
</image>

			<item>
			<link>http://www.sujun.org/default.asp?id=39</link>
			<title><![CDATA[[as3]Flash自动进入方便面三国游戏]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Wed,12 Nov 2008 11:44:03 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=39</guid>	
		<description><![CDATA[之前有一段时间在玩webgame，本来打算看能不能看发出简单的外挂，让自己玩游戏玩得更简单些，可惜没时间，最终只是用flash开发了一个账号登陆器，就是预先存多个账号，然后选择对应的账号，就会登陆到游戏里面,绕过每次输入帐户密码的过程。<br/>下面发送的是根据账号自动登陆的flash，把生成出来的gameurl复制到浏览器上，就可以马上进去游戏了<br/>演示flash:<br/><img src="http://www.sujun.org/attachments/month_0811/42008111212914.jpg" border="0" alt=""/><br/><br/>接下是简单的原理说明:其实就是利用Flash去请求网页，然后解析网页返回的数据，提取出自己所需要的数据，然后再进一步请求页面，如此反复而已：<br/><img src="http://www.sujun.org/attachments/month_0811/020081112113826.jpg" border="0" alt=""/><br/><br/>再接下来就是代码的简单说明了<br/>这是初始函数<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;程序入口<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@author&nbsp;弃天笑<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@date&nbsp;2008.06.10<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.useCodePage&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//获取登陆首页数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader&nbsp;=&nbsp;new&nbsp;URLLoader();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request&nbsp;=&nbsp;new&nbsp;URLRequest();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestEsate&nbsp;=&nbsp;&#34;fmbMain&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://baidu.51wan.com/login_51wan.php?game=fbmsg" target="_blank">http://baidu.51wan.com/login_51wan.php?game=fbmsg</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.method&nbsp;=&nbsp;URLRequestMethod.POST;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.addEventListener(Event.COMPLETE,onLoader);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;serverList.dataProvider&nbsp;=&nbsp;boxData;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loginBtn.enabled&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;copyBtn.enabled&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nameText.text&nbsp;=&nbsp;&#34;sujun.org&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;passText.text&nbsp;=&nbsp;&#34;123456&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//进行登陆请求,分析出必须的参数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameFind:String&nbsp;=&nbsp;&#34;test.setAttribute(&#39;name&#39;,&#39;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idName:String&nbsp;=&nbsp;getStringValue(contents,idNameFind,&#34;&#39;)&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;timestampValue:String&nbsp;=&nbsp;getStringValue(contents,&#34;&#39;timestamp&#39;).value=&#39;&#34;,&#34;&#39;;&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;signValue:String&nbsp;=&nbsp;getStringValue(contents,&#34;(&#39;sign&#39;).value=&#39;&#34;,&#34;&#39;;&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//加入参数,分析页面代码<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;variables:URLVariables&#160;&#160;&#160;&#160;=&nbsp;new&nbsp;URLVariables();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[idName]&nbsp;=&nbsp;idName;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;timestamp&#34;]&nbsp;=&nbsp;timestampValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;sign&#34;]&nbsp;=&nbsp;signValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;dontup&#100;ateagain&#34;]&nbsp;=&nbsp;&#34;dont&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;gamename&#34;]&nbsp;=&nbsp;&#34;fbmsg&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;username&#34;]&nbsp;=&nbsp;nameText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;password&#34;]&nbsp;=&nbsp;passText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//进行登陆连接<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestEsate&nbsp;=&nbsp;&#34;login&#34;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;LOGIN_URL;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.data&nbsp;=&nbsp;variables;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/></div></div><br/>这一段是解析登陆页面的一些数据，例如解析出页面包含的验证码什么的<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//根据从字符串中取出所需的数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;getStringValue(contents:String,findStr:String,endSign:String):String<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameFind:String&nbsp;=&nbsp;findStr;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameStart:int&nbsp;=&nbsp;contents.indexOf(idNameFind);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameEnd:int&nbsp;=&nbsp;contents.indexOf(endSign,idNameStart);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idName:String&nbsp;=&nbsp;contents.substring(idNameStart&nbsp;+&nbsp;idNameFind.length,idNameEnd);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;idName;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><br/>全部代码就不贴出来了，大家可以把代码下载下去，用flex编译一下就可以运行看到效果了<br/>代码下载:<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0811/c20081112114241.rar" target="_blank">点击下载此代码</a>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=38</link>
			<title><![CDATA[[反射]比较两个VO对象的值]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[Java]]></category>
			<pubDate>Wed,15 Oct 2008 22:39:06 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=38</guid>	
		<description><![CDATA[开发flash&nbsp;remoting的时候，直接把一个flash的vo对象发送到服务器，然后服务器接受这个vo，并取出对应的值，具体的情况可能各不相同，直接假设一个客户端传过来的vo要把里面有值的地方传给新的vo对象中<br/>(实际例子，客户端传一个与Hibernate的VO具有相同属性的vo，在这里要把客户端vo的值传给hibernate的vo，从而更新数据库，为了避免给不同的vo手工编写代码，所以就用到了反射)<br/>在这里，主要是利用到反射，这是一个简单的例子，有兴趣的人可以继续扩充<br/>下面是比较类的代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;o&#114;g.sujun.utils;<br/><br/>import&nbsp;java.lang.reflect.Method;<br/><br/>public&nbsp;class&nbsp;ObjectCompare&nbsp;<br/>{<br/>&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;比较客户端和服务端的vo，把clientVo有值的方法传给serverVo对应的方法<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param&nbsp;clientVo<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param&nbsp;serverVo<br/>&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;public&nbsp;static&nbsp;void&nbsp;voCompare(Object&nbsp;clientVo,&nbsp;Object&nbsp;serverVo)&nbsp;throws&nbsp;Exception<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//通过反射得出客户端vo的所有get的属性方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Class&nbsp;clientClass&nbsp;=&nbsp;clientVo.getClass();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Method[]&nbsp;methods&nbsp;=&nbsp;clientClass.getMethods();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;methods.length;&nbsp;i++)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(methods[i].getName());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;String&nbsp;methodName&nbsp;=&nbsp;methods[i].getName();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//查找出set相关的方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int&nbsp;isGet&nbsp;=&nbsp;methodName.indexOf(&#34;get&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(isGet&nbsp;!=&nbsp;-1&nbsp;&amp;&amp;&nbsp;!methodName.equals(&#34;getClass&#34;))<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Object&nbsp;result&nbsp;=&nbsp;null;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//反射出该方法，并得到它的返回结果<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;result&nbsp;=&nbsp;methods[i].invoke(clientVo,null);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch(Exception&nbsp;e)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;===result===:&#34;&nbsp;+&nbsp;result);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(result&nbsp;!=&nbsp;null)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//有值，则传给serverVo对应的set方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;methodName&nbsp;=&nbsp;methodName.substring(3,methodName.length());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;==result.getClass()===&#34;&nbsp;+&nbsp;result.getClass());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Method&nbsp;method&nbsp;=&nbsp;null;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(result.getClass()&nbsp;==&nbsp;Integer.class)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,int.class);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&nbsp;if(result.getClass()&nbsp;==&nbsp;Double.class)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,double.class);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&nbsp;if(result.getClass()&nbsp;==&nbsp;Boolean.class)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,boolean.class);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method&nbsp;=&nbsp;serverVo.getClass().getMethod(&#34;set&#34;&nbsp;+&nbsp;methodName,&nbsp;result.getClass());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;==method===&#34;&nbsp;+&nbsp;method);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method.invoke(serverVo,result);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//System.out.println(&#34;=newResult====&#34;&nbsp;+&nbsp;newResult);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch(Exception&nbsp;e)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>//&#160;&#160;&#160;&#160;private&nbsp;static&nbsp;Object&nbsp;reflectMethod(Object&nbsp;vo,&nbsp;Method&nbsp;method,String&nbsp;methodName,&nbsp;Object&nbsp;args)<br/>//&#160;&#160;&#160;&#160;{<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;=vo====&#34;&nbsp;+&nbsp;vo);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;=method====&#34;&nbsp;+&nbsp;method);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(&#34;=args====&#34;&nbsp;+&nbsp;args);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//Object[]&nbsp;objs&nbsp;=&nbsp;new&nbsp;Object[1];<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//objs[0]&nbsp;=&nbsp;&#34;soda1111&#34;;<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Object&nbsp;result&nbsp;=&nbsp;method.invoke(vo,null);<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;result;<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;catch(Exception&nbsp;e)<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;null;<br/>//&#160;&#160;&#160;&#160;}<br/>}<br/><br/></div></div><br/>接着看一下需要比较的vo<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><br/>public&nbsp;class&nbsp;ClientVo&nbsp;<br/>{<br/>&#160;&#160;&#160;&#160;private&nbsp;String&nbsp;name;<br/>&#160;&#160;&#160;&#160;private&nbsp;int&nbsp;age;<br/>&#160;&#160;&#160;&#160;private&nbsp;String&nbsp;form;<br/>&#160;&#160;&#160;&#160;private&nbsp;boolean&nbsp;flag;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;String&nbsp;getName()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;name;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setName(String&nbsp;name)&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.name&nbsp;=&nbsp;name;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;int&nbsp;getAge()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;age;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setAge(int&nbsp;age)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.age&nbsp;=&nbsp;age;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;String&nbsp;getForm()&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;form;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setForm(String&nbsp;form)&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.form&nbsp;=&nbsp;form;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;String&nbsp;toString()<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;&#34;[ClientVo&nbsp;name:&#34;&nbsp;+&nbsp;name&nbsp;+&nbsp;&#34;&nbsp;age:&#34;&nbsp;+&nbsp;age&nbsp;+&nbsp;&#34;&nbsp;form:&#34;&nbsp;+&nbsp;form&nbsp;+&nbsp;&#34;]&#34;;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;boolean&nbsp;getFlag()&nbsp;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;flag;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;public&nbsp;void&nbsp;setFlag(boolean&nbsp;flag)&nbsp;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.flag&nbsp;=&nbsp;flag;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/>最后是测试代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>import&nbsp;o&#114;g.sujun.utils.ObjectCompare;<br/>public&nbsp;class&nbsp;TestMain<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientVo&nbsp;clientVo&nbsp;=&nbsp;new&nbsp;ClientVo();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientVo.setName(&#34;soda&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientVo.setAge(24);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientVo.setFlag(true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clientVo.setForm(&#34;guang&nbsp;dong&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientVo&nbsp;serverVo&nbsp;=&nbsp;new&nbsp;ClientVo();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serverVo.setForm(&#34;by&nbsp;soda.C&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectCompare.voCompare(clientVo,&nbsp;serverVo);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(serverVo);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div><br/>编译输出结果是:<br/>[ClientVo&nbsp;name:soda&nbsp;age:24&nbsp;form:by&nbsp;soda.C]<br/><br/>//clientVo.setForm(&#34;guang&nbsp;dong&#34;);恢复这个注释的代码，输出的结果是：<br/>[ClientVo&nbsp;name:soda&nbsp;age:24&nbsp;form:guang&nbsp;dong]<br/><br/>可以当有属性没有值的时候，他是不会重新赋值的]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=36</link>
			<title><![CDATA[空间域名有问题，造成数据丢失]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[Blog信息]]></category>
			<pubDate>Wed,15 Oct 2008 10:35:32 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=36</guid>	
		<description><![CDATA[非常郁闷，服务器空间提供商遭到黑客攻击，blog被停了两天，也造成一定的数据损失，非常郁闷.....<br/>没有经常做数据备份的结果.....<br/>以后一定常做数据备份...]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=35</link>
			<title><![CDATA[发些今年的作品：童梦社区]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[Blog信息]]></category>
			<pubDate>Mon,04 Aug 2008 16:21:38 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=35</guid>	
		<description><![CDATA[这是一个探索阶段所开发的作品，其实我当时是比较晚参与这个项目的，不过后来也是整个系统重新去熟悉过，进行了大量的维护和调整，也尝试过做性能的调整，不过效果似乎不大，前后不到两个月时间，后来就带下新人维护该系统，然后去全新开发这个系列的男孩版（机器人，看下图的）。现在是处于维护阶段。。。。。。<br/>下面登陆地址:<a target="_blank" href="http://k2-mmo.golive2.cn/client/GoLiveClient.html#">http://k2-mmo.golive2.cn/client/GoLiveClient.html#</a><br/><br/>选择世界<br/><img src="http://www.sujun.org/attachments/month_0808/v200884161711.jpg" border="0" alt=""/><br/><br/>地图选择<br/><img src="http://www.sujun.org/attachments/month_0808/6200884162245.jpg" border="0" alt=""/><br/><br/>巴黎地图<br/><img src="http://www.sujun.org/attachments/month_0808/h200884161747.jpg" border="0" alt=""/><br/><br/><br/>森林<br/><img src="http://www.sujun.org/attachments/month_0808/2200884161911.jpg" border="0" alt=""/><br/><br/>这个有中文和英文两个版本，当然，程序是一份的。配合自主开发的地图编辑器，美术可以自由地添加场景：）<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=34</link>
			<title><![CDATA[发些今年的作品：网络斗地主]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[Blog信息]]></category>
			<pubDate>Thu,31 Jul 2008 22:54:05 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=34</guid>	
		<description><![CDATA[最近工作都比较忙，尤其是这个月，都没更新blog，就发些今年的一些作品图片，记录下，呵呵<br/><br/>这是一个flash网络斗地主游戏，顺便当宣传，呵呵，前台是用as3开发的，后台是C++服务器，当时自己开发了一个flash的MVC框架方便多人合作，以及C++通讯网络通讯层的框架。当然，到现在已经改善不少了。<br/>大厅支持即时切换中英文版本：）<br/>游戏网址:<br/><a target="_blank" href="http://www.acenuke.com">http://www.acenuke.com</a><br/>早期独立版本将界面<br/><img src="http://www.sujun.org/attachments/month_0807/u2008731224520.jpg" border="0" alt=""/><br/><img src="http://www.sujun.org/attachments/month_0807/j2008731224547.jpg" border="0" alt=""/><br/><br/>接着又开发了斗地主相关游戏的大厅以及修改了相关的UI<br/><br/><img src="http://www.sujun.org/attachments/month_0807/d2008731225147.jpg" border="0" alt=""/><br/><br/><img src="http://www.sujun.org/attachments/month_0807/q2008731225521.jpg" border="0" alt=""/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=33</link>
			<title><![CDATA[[AS3]registerClassAlias的用法]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Thu,31 Jul 2008 22:30:16 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=33</guid>	
		<description><![CDATA[registerClassAlias在利用AMF3进行序列话网络通讯中，是非常有用的。需要把客户端的对象直接传送到服务器得时候，保留该对象的类（类型）。&nbsp;这样的话，就可以传送自定义对象或者系统自带对象。<br/>具体的使用方法，官方有详细地用法。这里我只说说自己的一些理解。<br/>readObject方法对构造器有参数的类，是会出错的，会弹出参数数量不匹配这个错误。因为还原对象进行反射的时候，是默认没有参数的给构造器的。这也是有些人&nbsp;讨论Sprite等对象不能进行深度拷贝的原因<br/>所以在使用AMF3进行序列话的时候要注意这个了，还有一个就是，如果那个类包含了多个类，也就是个复合类，那么里面的那个复合类，也必须进行registerClassAlias，例如<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package<br/>{<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.geom.Point;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;Test<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;var&nbsp;name:String;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;var&nbsp;point:Point;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/>这样需要写两条语句才能完全把Test序列化<br/>registerClassAlias(&#34;point&#34;,Point);<br/>registerClassAlias(&#34;test&#34;,Test)<br/><br/>此示例使用&nbsp;registerClassAlias()&nbsp;函数为&nbsp;ExampleClass&nbsp;注册一个别名&nbsp;(&nbsp;com.example.eg&nbsp;)。&nbsp;由于为类注册了别名，因此可以将对象作为&nbsp;ExampleClass&nbsp;的实例反序列化，且代码将输出&nbsp;true。&nbsp;如果删除&nbsp;registerClassAlias()&nbsp;调用，则代码将输出&nbsp;false<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.display.Sprite;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.net.registerClassAlias;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.utils.ByteArray;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;RegisterClassAliasExample&nbsp;extends&nbsp;Sprite&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;RegisterClassAliasExample()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registerClassAlias(&#34;com.example.eg&#34;,&nbsp;ExampleClass);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eg1:ExampleClass&nbsp;=&nbsp;new&nbsp;ExampleClass();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ba:ByteArray&nbsp;=&nbsp;new&nbsp;ByteArray();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ba.writeObject(eg1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ba.position&nbsp;=&nbsp;0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eg2:*&nbsp;=&nbsp;ba.readObject();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(eg2&nbsp;is&nbsp;ExampleClass);&nbsp;//&nbsp;true<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>class&nbsp;ExampleClass&nbsp;{}<br/></div></div><br/>具体使用例子，参考官方例子，下面是摘录出来的<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=32</link>
			<title><![CDATA[[AS3]Flash Socket底层接受数据的初级处理]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sun,29 Jun 2008 11:47:15 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=32</guid>	
		<description><![CDATA[用flash去开发应用，，免不了网络通讯，特别是网络游戏，需要用到即使通讯。<br/>as3提供了两个支持即时通讯的类:XMLSocket和Socket，前者其实是只支持发送字符串，而后者就强大多了，支持发送字节，相对来说比较底层，而这也给我们更多的发挥空间。<br/>其实，flash&nbsp;socket的网络底层接受数据，就以与C++服务器通讯为例子，C++服务器一般会发一段一段数据过来，每段数据都是由一定结构组成的，一般是消息头和消息头，然后再逐步分层解析。<br/>在这里，我只说接受网络底层的处理，一般一段数据前面，还有有一个4个字节左右的数据，表示的是后面网络流里的数据有多少....<br/>看下简单示意图<br/><img src="http://www.sujun.org/attachments/month_0806/o2008629113148.jpg" border="0" alt=""/><br/>我们网络底层需要做的处理，就是根据头4个字节判断出后面的数据大小，然后把那一整块取出来，抛给上层解析，然后又在不停地侦听，收到指定大小之后，又做类似的操作，下面看详细的代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&nbsp;*&nbsp;@(#)NetBottomHandle.as<br/>&nbsp;*&nbsp;@author&nbsp;soda.C&nbsp;&nbsp;mail:sujun10@21cn.com<br/>&nbsp;*&nbsp;@version&nbsp;&nbsp;1.0<br/>&nbsp;*&nbsp;&lt;br&gt;Copyright&nbsp;(C),&nbsp;2007&nbsp;soda.C<br/>&nbsp;*&nbsp;&lt;br&gt;This&nbsp;program&nbsp;is&nbsp;protected&nbsp;by&nbsp;copyright&nbsp;laws.<br/>&nbsp;*&nbsp;&lt;br&gt;Program&nbsp;Name:GameHall<br/>&nbsp;*&nbsp;@data&nbsp;2008-3-20<br/>&nbsp;*/<br/>package&nbsp;o&#114;g.sujun.net&nbsp;<br/>{<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.net.Socket;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.events.ProgressEvent;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.utils.ByteArray;<br/>&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;socket数据流里的底层处理,从这里接受到服务器的数据,满足条件后就会抛出需要的字节<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;对数据流的数据,不做任何处理<br/>&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;NetBottomHandle&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;socket&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:Socket;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;listener&#160;&#160;&#160;&#160;:Function;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//接受网络解析出来的数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;msgLen&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:int;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//消息长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;msgLenMax&#160;&#160;&#160;&#160;:int;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//收到的消息最大长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;headLen&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:int;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//消息头长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;isReadHead&#160;&#160;&#160;&#160;:Boolean;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//是否已经读了消息头<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;bytes&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:ByteArray;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//所读数据的缓冲数据，读出的数据放在这里<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;NetBottomHandle()<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;msgLenMax&nbsp;=&nbsp;5000;&#160;&#160;&#160;&#160;//5000字节<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;headLen&nbsp;=&nbsp;4;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//4个字节<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bytes&nbsp;=&nbsp;new&nbsp;ByteArray();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;设置一个网络通讯实例<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;setSocket(socket:Socket):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.socket&nbsp;=&nbsp;socket;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//监听......<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.addEventListener(ProgressEvent.SOCKET_DATA,&nbsp;onServerData,false,0,true);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;接受在网络层里收到的原始数据,传递过来的数据为描述长度,以及ByteArray对象functon(len,bytes)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param&nbsp;listener:接受数据函数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;receiverNetData(listener:Function):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.listener&nbsp;=&nbsp;listener;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;服务器发送过来的数据都在这里接收,最底层的<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;onServerData(event:ProgressEvent):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//一有收到数据的事件，就通过这个函数进行检验<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;parseNetData();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;解析网络数据流<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;parseNetData():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果需要读信息头<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(isReadHead)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(socket.bytesAvailable&nbsp;&gt;=&nbsp;headLen)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//读出指示后面的数据有多大<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;msgLen&nbsp;=&nbsp;socket.readUnsignedInt();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isReadHead&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果已经读了信息头,则看能不能收到满足条件的字节数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!isReadHead&nbsp;&amp;&amp;&nbsp;msgLen&nbsp;&lt;=&nbsp;msgLenMax)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果为0,表示收到异常消息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(msgLen&nbsp;==&nbsp;0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//一般消息长度为0的话，表示与服务器出了错，或者即将被断开等，通知客户端，进行特别处理<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;listener(msgLen,null);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//数据流里的数据满足条件，开始读数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(socket.bytesAvailable&nbsp;&gt;=&nbsp;msgLen)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//指针回归<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bytes.position&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//取出指定长度的网络字节<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.readBytes(bytes,&nbsp;0,&nbsp;msgLen);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;listener(msgLen,bytes);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isReadHead&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果数据流里还满足读取数据条件，继续读取数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(socket.bytesAvailable&nbsp;&gt;=&nbsp;headLen)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;parseNetData();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/>代码我就不详细解说了，注释得很清楚，这段代码也是经过我写过几个版本锤炼过的。呵呵<br/>在实际应用中，表现也是比较稳定的<br/>当然，这是比较早期的了，以后再正正应用中，可能还需要做更多的处理，例如每个网络字节的缓冲，缓存等，以免过多字节造成socket出错等等<br/>希望有兴趣的人继续留贴讨论，呵呵<br/><br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0806/u2008629114938.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=31</link>
			<title><![CDATA[[AS3]Flash多国语言自由切换]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Thu,26 Jun 2008 21:49:37 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=31</guid>	
		<description><![CDATA[为了让应用面向世界化，让系统具备多语言，是必备的条件。<br/>本演示程序是个简单的多语言演示系统，具备即使切换各国语言得特点，程序使用的显示文字采用xml文件配置，从而达到不用语言的效果,看flash效果<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp78596_href" href="http://www.sujun.org/javascript:MediaShow('swf','temp78596','attachments/month_0806/f200862621410.swf','400','300')"><img name="temp78596_img" src="http://www.sujun.org/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp78596_text">在线播放</span></a><div id="temp78596"></div></div></div><br/>如果打不开或者没效果，请点击下面连接地址:<br/><br/><a target="_blank" href="http://www.sujun.org/flash/languages/languages.html">http://www.sujun.org/flash/languages/languages.html</a><br/><br/>看了效果，就说一下原理，其实很简单，就是程序中需要用到的每一个文字，都是读取xml配置文件得，在各个语言版本的xml配置文件中，都保持着相同的key，但是其中的vlaue就不相同<br/><br/>先看下中文配置<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;UTF-8&#34;?&gt;<br/>&lt;languages&nbsp;type=&#34;China&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;text-content&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;cnBtn&#34;&nbsp;&gt;中文&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;enBtn&#34;&nbsp;&gt;英文&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;loginBtn&#34;&nbsp;&gt;登陆&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Label&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;nameLabel&#34;&nbsp;&gt;名&nbsp;&nbsp;称:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;passLabel&#34;&nbsp;&gt;密&nbsp;&nbsp;码:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Label&gt;<br/>&#160;&#160;&#160;&#160;&lt;/text-content&gt;<br/>&lt;/languages&gt;<br/></div></div><br/>英文版配置文件<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;UTF-8&#34;?&gt;<br/>&lt;languages&nbsp;type=&#34;English&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;text-content&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;cnBtn&#34;&nbsp;&gt;China&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;enBtn&#34;&nbsp;&gt;English&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;loginBtn&#34;&nbsp;&gt;Login&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Label&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;nameLabel&#34;&nbsp;&gt;UserName:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;passLabel&#34;&nbsp;&gt;Userpass:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Label&gt;<br/>&#160;&#160;&#160;&#160;&lt;/text-content&gt;<br/>&lt;/languages&gt;<br/></div></div><br/>可以看到这两个文件在文件中的&lt;value&nbsp;key=&#34;nameLabel&#34;&nbsp;&gt;UserName:&lt;/value&gt;，保持着相同的key，但是值就不一样<br/><br/>接下来看界面程序<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;utf-8&#34;?&gt;<br/>&lt;mx:Application&nbsp;xmlns:mx=&#34;<a href="http://www.adobe.com/2006/mxml" target="_blank">http://www.adobe.com/2006/mxml</a>&#34;&nbsp;layout=&#34;vertical&#34;&nbsp;fontFamily=&#34;Arial&#34;&nbsp;fontSize=&#34;12&#34;<br/>&#160;&#160;&#160;&#160;&nbsp;creationComplete=&#34;init()&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;![CDATA[<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;import&nbsp;o&#114;g.sujun.lang.LangManager;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;loader:URLLoader;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;request:URLRequest;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;currLang:String;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Security.allowDomain(&#34;*&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//默认加载中文<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;currLang&nbsp;=&nbsp;&#34;<a href="http://www.sujun.org/flash/languages/languages/china.xml" target="_blank">http://www.sujun.org/flash/languages/languages/china.xml</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader&nbsp;=&nbsp;new&nbsp;URLLoader();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request&nbsp;=&nbsp;new&nbsp;URLRequest(currLang);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;enBtn.addEventListener(MouseEvent.CLICK,buttEvent);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cnBtn.addEventListener(MouseEvent.CLICK,buttEvent);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.addEventListener(Event.COMPLETE,onLoadXml);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;buttEvent(event:MouseEvent):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//根据按钮确定加载那个语言配置文件<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(event.target&nbsp;==&nbsp;enBtn)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://www.sujun.org/flash/languages/languages/English.xml" target="_blank">http://www.sujun.org/flash/languages/languages/English.xml</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://www.sujun.org/flash/languages/languages/china.xml" target="_blank">http://www.sujun.org/flash/languages/languages/china.xml</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;onLoadXml(event:Event):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;加载成功&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LangManager.instanceLang(XML(loader.data));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//初始化文字<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;enBtn.label&nbsp;=&nbsp;LangManager.getContent(&#34;enBtn&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cnBtn.label&nbsp;=&nbsp;LangManager.getContent(&#34;cnBtn&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loginBtn.label&nbsp;=&nbsp;LangManager.getContent(&#34;loginBtn&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//文本<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nameLabel.text&nbsp;=&nbsp;LangManager.getContent(&#34;nameLabel&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;passLabel.text&nbsp;=&nbsp;LangManager.getContent(&#34;passLabel&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;]]&gt;<br/>&#160;&#160;&#160;&#160;&lt;/mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Panel&nbsp;width=&#34;375&#34;&nbsp;height=&#34;374&#34;&nbsp;layout=&#34;absolute&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;x=&#34;65&#34;&nbsp;y=&#34;57&#34;&nbsp;label=&#34;Button&#34;&nbsp;id=&#34;enBtn&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;x=&#34;158&#34;&nbsp;y=&#34;57&#34;&nbsp;label=&#34;Button&#34;&nbsp;id=&#34;cnBtn&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Label&nbsp;x=&#34;65&#34;&nbsp;y=&#34;122&#34;&nbsp;text=&#34;Label&#34;&nbsp;id=&#34;nameLabel&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Label&nbsp;x=&#34;65&#34;&nbsp;y=&#34;158&#34;&nbsp;text=&#34;Label&#34;&nbsp;id=&#34;passLabel&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:TextInput&nbsp;x=&#34;137&#34;&nbsp;y=&#34;122&#34;&nbsp;id=&#34;nameText&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:TextInput&nbsp;x=&#34;137&#34;&nbsp;y=&#34;156&#34;&nbsp;id=&#34;passText&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;x=&#34;137&#34;&nbsp;y=&#34;210&#34;&nbsp;label=&#34;Button&#34;&nbsp;id=&#34;loginBtn&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;/mx:Panel&gt;<br/>&lt;/mx:Application&gt;<br/><br/></div></div><br/><br/>代码很简单.....就是点击不同按钮，加载不同的xml配置文件，然后初始化文字信息。<br/>在这个程序里，有个比较重要的类，就是解析和根据key获取到对应的值。你可以看到，在代码里都是通过<br/>LangManager.getContent(&#34;enBtn&#34;);去获取到对应得值<br/>呵呵，关键就是LangManager这个类，里面做了个递归，去获取xml文件中的key和vlaue信息，大家可以下载源文件去仔细看看<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0806/h2008626214923.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=30</link>
			<title><![CDATA[[AS3&amp;JS]Flash中生成Js方法，刷新页面]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Tue,10 Jun 2008 14:27:50 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=30</guid>	
		<description><![CDATA[这也是js方法&#34;eval&#34;中的一种应用。利用flash生成js的方法，并让flash进行后续调用<br/>同时，也可以通过eval，直接刷新整个html页面。<br/>代码很简单，我就不直接说了，贴出来，大家可以直接看效果<br/><br/>例子运行<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp57846_href" href="http://www.sujun.org/javascript:MediaShow('swf','temp57846','attachments/month_0806/72008610142925.swf','400','300')"><img name="temp57846_img" src="http://www.sujun.org/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp57846_text">在线播放</span></a><div id="temp57846"></div></div></div><br/><br/>代码部分<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;utf-8&#34;?&gt;<br/>&lt;mx:Application&nbsp;xmlns:mx=&#34;<a href="http://www.adobe.com/2006/mxml" target="_blank">http://www.adobe.com/2006/mxml</a>&#34;&nbsp;layout=&#34;vertical&#34;&nbsp;fontFamily=&#34;Times&nbsp;New&nbsp;Roman&#34;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fontSize=&#34;12&#34;&nbsp;creationComplete=&#34;init()&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;![CDATA[<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;import&nbsp;mx.controls.Alert;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;import&nbsp;flash.external.ExternalInterface;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//需要在js生成的代码<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;str:String&nbsp;=&nbsp;&#34;function&nbsp;testMethod(str)&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;{&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;alert(&#39;Flash传来:&#39;&nbsp;+&nbsp;str);&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;return&nbsp;&#39;js返回：&#39;&nbsp;+&nbsp;str;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;}&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//利用eval函数生成<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExternalInterface.call(&#34;eval&#34;,&nbsp;str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;buttonClick():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//调用刚刚生成的方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;str:String&nbsp;=&nbsp;ExternalInterface.call(&#34;testMethod&#34;,&nbsp;valueText.text);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Alert.show(str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;fulshHtmlEvent():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//刷新页面<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExternalInterface.call(&#34;eval&#34;,&nbsp;&#34;location.reload();&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;]]&gt;<br/>&#160;&#160;&#160;&#160;&lt;/mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;label=&#34;提交&#34;&nbsp;id=&#34;subimtBtn&#34;&nbsp;click=&#34;buttonClick()&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:TextInput&nbsp;width=&#34;122&#34;&nbsp;id=&#34;valueText&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Label&nbsp;text=&#34;Flash数据：&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;label=&#34;刷新页面&#34;&nbsp;id=&#34;flushBtn&#34;&nbsp;click=&#34;fulshHtmlEvent()&#34;/&gt;<br/>&lt;/mx:Application&gt;<br/><br/></div></div><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=29</link>
			<title><![CDATA[[as3,js]在Flash中动态生成js代码并执行]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sat,07 Jun 2008 23:20:21 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=29</guid>	
		<description><![CDATA[最近在做关于flash解析一些类似网页浏览相关的技术，其中会涉及一些js的技术<br/>js很少用，不是很熟，没怎么用，所以边做边查<br/>由于需要在flash执行部分js代码，而且必须动态生成的．研究一下，发现js有个类似as以前的函数<br/>＂eval＂，呵呵，在这里做文章就可以了<br/>eval能把字符串转化为对应的对象或是数值，而且还可以执行表达式．<br/>例子代码很简单，在此仅做个记录<br/><br/>ExternalInterface.call(&#34;eval&#34;,&nbsp;&#34;alert(&#39;生成成功,soda&#39;);&#34;);<br/><br/>只需要在文档类里执行这一句就可以了，接着可以看到网页里弹出js窗口<br/><img src="http://www.sujun.org/attachments/month_0806/l20086723207.jpg" border="0" alt=""/><br/><br/>呵呵，这样发展的空间就大了，<br/>在js和flash之间自由切换，同时flash可以更好地操作html（通过js）<br/>有兴趣的人可以去深入研究<br/><br/>]]></description>
		</item>
		
</channel>
</rss>