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

<channel>
	<title>DuaiCH&#039;s blog</title>
	<atom:link href="http://www.duaich.com/index.php?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.duaich.com</link>
	<description>flash爱好者</description>
	<lastBuildDate>Fri, 27 Aug 2010 03:07:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>游戏功能</title>
		<link>http://www.duaich.com/?p=206</link>
		<comments>http://www.duaich.com/?p=206#comments</comments>
		<pubDate>Fri, 27 Aug 2010 03:07:32 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[记录]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=206</guid>
		<description><![CDATA[游戏]]></description>
			<content:encoded><![CDATA[<p>今天开会总结了一下俺们游戏已有的功能及相关负责人。<br />
罗列一下，感觉还是相当有成就感的：<br />
<a href="http://www.duaich.com/wp-content/uploads/2010/08/20100827237.jpg"><img src="http://www.duaich.com/wp-content/uploads/2010/08/20100827237.jpg" alt="20100827237" title="20100827237" width="640" height="480" class="alignnone size-full wp-image-207" /></a></p>
<p>接下来的日子还会是在无尽的优化调试中度过！<br />
加油！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=206</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>（转）Apache+Tomcat配置</title>
		<link>http://www.duaich.com/?p=204</link>
		<comments>http://www.duaich.com/?p=204#comments</comments>
		<pubDate>Thu, 05 Aug 2010 01:38:07 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=204</guid>
		<description><![CDATA[Apache是web服务器，Tomcat是应用（java）服务器， Apache和Tomcat都可以做为独立的web服务器来运行，但是Apache不能解释java程序（jsp,serverlet）。为什么要整合？
打个比方：Apache是一辆卡车，上面可以装一些东西如html等。但是不能装水，要装水必须要有容器（桶），Tomcat就是一个桶（装像Java这样的水），而这个桶也可以不放在卡车上。
整合的最主要原因是为了在现有的硬件条件下提供最大的负载。
如果单独使用Tomcat做JSP服务器，在工作效率上会存在问题,Tomcat处理静态HTML的能力不如Apache，并且所能承受的最大并发连接数也有一定的限制；
在测试中，当并发连接较多时，Tomcat就会处于“僵死”状态，对后继的请求连接失去响应。所以现在提出一个“整合”解决方案：将html与jsp的功能部分进行明确分工，让tomcat只处理jsp部分，其它的由apache这个web server处理。Apache与Tomcat各司其职，那么服务器的整体效率就能够得到提升。
假设：
apache安装目录为APACHE_HOME
tomcat安装目录为TOMCAT_HOME （要设到环境变量中）
jdk安装目录为JAVA_HOME（要设到环境变量中）
1.安装apache：（假定安装目录为APACHE_HOME，根据你实际安装自行替换）
废话不多说，安装后修改APACHE_HOME/CONF/httpd.conf 以下6个地方：
1） Port 8080 或者80 随你
2） ServerName localhost
3) DocumentRoot &#8220;e:/www&#8221; (为了发布方便，不如自己建个目录作为文档根)
4) 把原来的改为

5) 添加index.jsp为缺省的主索引文件

DirectoryIndex index.html index.jsp

6） 这是最关键一步，在httpd.conf最后加上
#tomcat支持
include TOMCAT_HOME/conf/mod_jk.conf-auto
只需要这一句就够了，别听那些白痴的话，加上什么tomcat-apache.conf，那没用.
把mod_jk.dll拷贝进APACHE_HOME/module目录
这会先不管apache了，来设置tomcat3.2
步骤：
把tomcat解压缩，将它真正的目录jarakar-tomcat拷贝到你要的目录名TOMCAT_HOME
修改TOMCAT_HOME下的conf目录中的server.xml
1) 如果你不想看TOMCAT启动信息，这么做：

增加一个PATH=&#8221;logs/tomcat.log&#8221; 就可以了
2) 让tomcat改到8081上，一般来说www服务在80或者8080上：





3)增加APJ13协议支持





就放在原来的APJ12连接器后面就可以了
4)配合APACHE修改文档根目录



5)为了用例子测试，还得改一下EXAMPLES的CONTEXT:


要使用MOD_JK还得改一下同一目录下的WORKERS.PROPERTIES文件：
1） workers.tomcat_home=TOMCAT_HOME
2) workers.java_home=JAVA_HOME
3) ps= 我爱windows 赫赫
现在ok了，开始启动！
别慌，还有启动顺序问题，注意啊，先启动tomcat让它自己修改一下配置，第一次一定
要先tomcat，以后除非修改tomcat的设置，都可以先启动apache了。
ok 来启动tomcat：运行TOMCAT_HOME/bin下面的startup.bat
看到:Startting tomcat. Check logs/tomcat.log for error messages.那就对了
再来检查tomcat的情况
先随便在e:www里面放个index.jsp文件，内容是

用浏览器打开http://localhost:8081
如果看到上面的话出现，那么根文档就成功了，再来用例子测试一下，用浏览器打开：
http://localhost:8081/examples/jsp
运行猜数字游戏，如果正确了，说明咱们的examples上下文也关联正确。这就简单了。
剩下就是运行apache了
运行apache，看到这么一行：
Apache/1.3.14 (win32) with mod_jk running&#8230;那就对了
再来测试它们的组合，用浏览器打开http://localhost:8080(我假设你用8080端口，如
果是80端口，那就用http://localhost
还是看到那句“啊哈！jsp第一次运行！”
这就说明apache和tomcat连上了！
你可以再用http://localhosy:8080/examples/jsp测试一下例子
]]></description>
			<content:encoded><![CDATA[<p>Apache是web服务器，Tomcat是应用（java）服务器， Apache和Tomcat都可以做为独立的web服务器来运行，但是Apache不能解释java程序（jsp,serverlet）。为什么要整合？<br />
打个比方：Apache是一辆卡车，上面可以装一些东西如html等。但是不能装水，要装水必须要有容器（桶），Tomcat就是一个桶（装像Java这样的水），而这个桶也可以不放在卡车上。<br />
整合的最主要原因是为了在现有的硬件条件下提供最大的负载。</p>
<p>如果单独使用Tomcat做JSP服务器，在工作效率上会存在问题,Tomcat处理静态HTML的能力不如Apache，并且所能承受的最大并发连接数也有一定的限制；</p>
<p>在测试中，当并发连接较多时，Tomcat就会处于“僵死”状态，对后继的请求连接失去响应。所以现在提出一个“整合”解决方案：将html与jsp的功能部分进行明确分工，让tomcat只处理jsp部分，其它的由apache这个web server处理。Apache与Tomcat各司其职，那么服务器的整体效率就能够得到提升。</p>
<p>假设：<br />
apache安装目录为APACHE_HOME<br />
tomcat安装目录为TOMCAT_HOME （要设到环境变量中）<br />
jdk安装目录为JAVA_HOME（要设到环境变量中）<br />
1.安装apache：（假定安装目录为APACHE_HOME，根据你实际安装自行替换）<br />
废话不多说，安装后修改APACHE_HOME/CONF/httpd.conf 以下6个地方：<br />
1） Port 8080 或者80 随你<br />
2） ServerName localhost<br />
3) DocumentRoot &#8220;e:/www&#8221; (为了发布方便，不如自己建个目录作为文档根)<br />
4) 把原来的<Directory "APACHE_HOME/htdocs">改为<br />
<Directory "e:/www"><br />
5) 添加index.jsp为缺省的主索引文件<br />
<IfModule mod_dir.c><br />
DirectoryIndex index.html index.jsp<br />
</IfModule><br />
6） 这是最关键一步，在httpd.conf最后加上<br />
#tomcat支持<br />
include TOMCAT_HOME/conf/mod_jk.conf-auto<br />
只需要这一句就够了，别听那些白痴的话，加上什么tomcat-apache.conf，那没用.<br />
把mod_jk.dll拷贝进APACHE_HOME/module目录<br />
这会先不管apache了，来设置tomcat3.2<br />
步骤：<br />
把tomcat解压缩，将它真正的目录jarakar-tomcat拷贝到你要的目录名TOMCAT_HOME<br />
修改TOMCAT_HOME下的conf目录中的server.xml<br />
1) 如果你不想看TOMCAT启动信息，这么做：<br />
<Logger name="tc_log"<br />
path="logs/tomcat.log"<br />
verbosityLevel = "INFORMATION"<br />
/><br />
增加一个PATH=&#8221;logs/tomcat.log&#8221; 就可以了<br />
2) 让tomcat改到8081上，一般来说www服务在80或者8080上：<br />
<!-- Normal HTTP --><br />
<Connector className="org.apache.tomcat.service.PoolTcpConnector"><br />
<Parameter name="handler"<br />
value="org.apache.tomcat.service.http.HttpConnectionHandler"/><br />
<Parameter name="port" value="8081"/><br />
</Connector><br />
3)增加APJ13协议支持<br />
<!-- Apache AJP13 support. This is also used to shut down tomcat. --><br />
<Connector className="org.apache.tomcat.service.PoolTcpConnector"><br />
<Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13<br />
ConnectionHandler"/><br />
<Parameter name="port" value="8009"/><br />
</Connector><br />
就放在原来的APJ12连接器后面就可以了<br />
4)配合APACHE修改文档根目录<br />
<!-- 文档根目录 --><br />
<Context path="/" docBase="e:/www" ><br />
</Context><br />
5)为了用例子测试，还得改一下EXAMPLES的CONTEXT:<br />
<Context path="/examples"<br />
docBase="TOMCAT_HOME/webapps/examples" crossContext="false" ><br />
</Context><br />
要使用MOD_JK还得改一下同一目录下的WORKERS.PROPERTIES文件：<br />
1） workers.tomcat_home=TOMCAT_HOME<br />
2) workers.java_home=JAVA_HOME<br />
3) ps= 我爱windows 赫赫<br />
现在ok了，开始启动！<br />
别慌，还有启动顺序问题，注意啊，先启动tomcat让它自己修改一下配置，第一次一定<br />
要先tomcat，以后除非修改tomcat的设置，都可以先启动apache了。<br />
ok 来启动tomcat：运行TOMCAT_HOME/bin下面的startup.bat<br />
看到:Startting tomcat. Check logs/tomcat.log for error messages.那就对了<br />
再来检查tomcat的情况<br />
先随便在e:www里面放个index.jsp文件，内容是<br />
<%="啊哈！jsp第一次运行！"%><br />
用浏览器打开http://localhost:8081<br />
如果看到上面的话出现，那么根文档就成功了，再来用例子测试一下，用浏览器打开：<br />
http://localhost:8081/examples/jsp<br />
运行猜数字游戏，如果正确了，说明咱们的examples上下文也关联正确。这就简单了。<br />
剩下就是运行apache了<br />
运行apache，看到这么一行：<br />
Apache/1.3.14 (win32) with mod_jk running&#8230;那就对了<br />
再来测试它们的组合，用浏览器打开http://localhost:8080(我假设你用8080端口，如<br />
果是80端口，那就用http://localhost<br />
还是看到那句“啊哈！jsp第一次运行！”<br />
这就说明apache和tomcat连上了！<br />
你可以再用http://localhosy:8080/examples/jsp测试一下例子</p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=204</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【转】remove, removed, removeFromStage 的差异</title>
		<link>http://www.duaich.com/?p=193</link>
		<comments>http://www.duaich.com/?p=193#comments</comments>
		<pubDate>Fri, 26 Mar 2010 01:51:08 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=193</guid>
		<description><![CDATA[转自：http://ria.richtechmedia.com/2008/05/09/remove-removed-removefromstage-%e7%9a%84%e5%b7%ae%e7%95%b0/
remove:
mx.events.FlexEvent.REMOVE
removed:
flash.events.Event.REMOVED
removedFromStage:
flash.events.Event.REMOVED_FROM_STAGE
看到它們的 package name 應該就瞭了吧？
其中 remove 最好辨識，它是 mx.* 下面的事件，由 UIComponent 定義，簡單來說可規納為 framework event。
removed 與 removedFromStage 則是 flash.*，屬於 player level event，由 DisplayObject 內義，屬於系統事件。

使用上比較需要注意的差異在於：
removed: 只針對目前操作中的 DisplayObject 有作用
removedFromStage: 是會 ripple 的，例如一個 button 包在 box 裏，結果 box 被移除了，button 也會收到一個 removedFromStage event
至於 remove 太高階，很少理它(通常我都會在底層的地方就處理掉這些事了，輪不到 remove 發生了 XD )
ps. 舉一反三，add, added, addedToStage 也是一樣的道理，還有其它的嗎？
]]></description>
			<content:encoded><![CDATA[<p>转自：http://ria.richtechmedia.com/2008/05/09/remove-removed-removefromstage-%e7%9a%84%e5%b7%ae%e7%95%b0/</p>
<p>remove:<br />
mx.events.FlexEvent.REMOVE</p>
<p>removed:<br />
flash.events.Event.REMOVED</p>
<p>removedFromStage:<br />
flash.events.Event.REMOVED_FROM_STAGE</p>
<p>看到它們的 package name 應該就瞭了吧？</p>
<p>其中 remove 最好辨識，它是 mx.* 下面的事件，由 UIComponent 定義，簡單來說可規納為 framework event。</p>
<p>removed 與 removedFromStage 則是 flash.*，屬於 player level event，由 DisplayObject 內義，屬於系統事件。<br />
<span id="more-193"></span><br />
使用上比較需要注意的差異在於：</p>
<p>removed: 只針對目前操作中的 DisplayObject 有作用</p>
<p>removedFromStage: 是會 ripple 的，例如一個 button 包在 box 裏，結果 box 被移除了，button 也會收到一個 removedFromStage event</p>
<p>至於 remove 太高階，很少理它(通常我都會在底層的地方就處理掉這些事了，輪不到 remove 發生了 XD )</p>
<p>ps. 舉一反三，add, added, addedToStage 也是一樣的道理，還有其它的嗎？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=193</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO For Flex/Flash</title>
		<link>http://www.duaich.com/?p=190</link>
		<comments>http://www.duaich.com/?p=190#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:41:18 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=190</guid>
		<description><![CDATA[这方面接触的太少，做个记号：
http://blog.richmediaplus.com/2009/07/virtual-unique-urls-for-flex-flash/
http://blog.richmediaplus.com/2009/07/seo-for-flex-flash/
官方资料：http://www.adobe.com/devnet/seo/
]]></description>
			<content:encoded><![CDATA[<p>这方面接触的太少，做个记号：<br />
<a href="http://blog.richmediaplus.com/2009/07/virtual-unique-urls-for-flex-flash/">http://blog.richmediaplus.com/2009/07/virtual-unique-urls-for-flex-flash/</a><br />
<a href="http://blog.richmediaplus.com/2009/07/seo-for-flex-flash/">http://blog.richmediaplus.com/2009/07/seo-for-flex-flash/</a></p>
<p>官方资料：<a href="http://www.adobe.com/devnet/seo/">http://www.adobe.com/devnet/seo/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=190</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bitmapPlayer</title>
		<link>http://www.duaich.com/?p=181</link>
		<comments>http://www.duaich.com/?p=181#comments</comments>
		<pubDate>Fri, 29 Jan 2010 06:32:21 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[位图操作]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=181</guid>
		<description><![CDATA[在游戏开发中动画系统开销是一个让人头痛的问题，尤其是在flash游戏开发中。游戏规模越大系统开销越明显，如果全用矢量图无疑会增加cpu的计算量。另外一个就是谁也不愿意让自己的游戏画面中布满N个movieClip这个胖子。如果采用位图，虽说会增加游戏体积，但运行游戏时cpu的开销会减少很多。但位图不是flash中的movieClip，它不会自动播放。如果要想用位图序列代替movieClip，那么就需要一个播放位图序列的机制。
我在网上找了相关资料，比较好的解决途径是采用bitmapData中的copyPixels方法，分区绘制位图。
以下面这位图为例:

它用四组位图序列绘制了人物上下左右行走和停止的动画。

绘制方法不难，下面是demo：
]]></description>
			<content:encoded><![CDATA[<p>在游戏开发中动画系统开销是一个让人头痛的问题，尤其是在flash游戏开发中。游戏规模越大系统开销越明显，如果全用矢量图无疑会增加cpu的计算量。另外一个就是谁也不愿意让自己的游戏画面中布满N个movieClip这个胖子。如果采用位图，虽说会增加游戏体积，但运行游戏时cpu的开销会减少很多。但位图不是flash中的movieClip，它不会自动播放。如果要想用位图序列代替movieClip，那么就需要一个播放位图序列的机制。<br />
我在网上找了相关资料，比较好的解决途径是采用bitmapData中的copyPixels方法，分区绘制位图。<br />
以下面这位图为例:<br />
<a href="http://www.duaich.com/wp-content/uploads/2010/01/test.png"><img src="http://www.duaich.com/wp-content/uploads/2010/01/test.png" alt="test" title="test" width="72" height="130" class="aligncenter size-full wp-image-182" /></a><br />
它用四组位图序列绘制了人物上下左右行走和停止的动画。<br />
<span id="more-181"></span><br />
绘制方法不难，下面是demo：<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.duaich.com/wp-content/uploads/2010/01/bitmapPlayer.swf" /><embed type="application/x-shockwave-flash" width="400" height="350" src="http://www.duaich.com/wp-content/uploads/2010/01/bitmapPlayer.swf"</embed></object><br />
ps:用方向箭可控制小人移动</p>
<p><a href="http://www.duaich.com/wp-content/uploads/2010/01/bitmapPlayer.rar">源文件</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=181</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bitmap做残影效果</title>
		<link>http://www.duaich.com/?p=166</link>
		<comments>http://www.duaich.com/?p=166#comments</comments>
		<pubDate>Wed, 27 Jan 2010 07:23:53 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[bitmap]]></category>
		<category><![CDATA[残影]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=166</guid>
		<description><![CDATA[
主要用了bitmapData的colorTransform函数。在每次渲染时都对bitmapData的颜色和alpha通道做递减运算。

var bmp:Bitmap = new Bitmap();
var&#160;bmd:BitmapData = new BitmapData(550, 400, false, 0);
var&#160;rect:Rectangle = new Rectangle(0, 0, 550, 400);
var&#160;cTra:ColorTransform = new ColorTransform(0, .8, .8, .9);
var&#160;xp:int = 0;
var&#160;yp:int = 0;
&#160;
bmp.bitmapData = bmd;
addChild(bmp);
&#160;
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
&#160;
function&#160;enterFrameHandler(event:Event):void {
&#160; &#160; bmd.colorTransform(rect, cTra);
&#160; &#160; xp += (mouseX - xp)&#160;/ 5;
&#160; &#160; yp += (mouseY - yp) /&#160;5;
&#160; &#160; bmd.fillRect(new&#160;Rectangle(xp, yp, 10, 10), 0xffffff);
}
]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.duaich.com/wp-content/uploads/2010/01/blogCon.swf" /><param name="flashvars" value="url=http://www.duaich.com/wp-content/uploads/2010/01/BitmapBlur.swf" /><embed type="application/x-shockwave-flash" width="400" height="350" src="http://www.duaich.com/wp-content/uploads/2010/01/blogCon.swf" flashvars="url=http://www.duaich.com/wp-content/uploads/2010/01/BitmapBlur.swf"></embed></object></p>
<p>主要用了bitmapData的colorTransform函数。在每次渲染时都对bitmapData的颜色和alpha通道做递减运算。<br />
<span id="more-166"></span></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">bmp</span><span style="color: Gray;">:</span><span style="color: Blue;">Bitmap</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Bitmap</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bmd</span><span style="color: Gray;">:</span><span style="color: Teal;">BitmapData</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">BitmapData</span><span style="color: Olive;">(</span><span style="color: Maroon;">550</span><span style="color: Gray;">, </span><span style="color: Maroon;">400</span><span style="color: Gray;">, </span><span style="color: Green;">false</span><span style="color: Gray;">, </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">rect</span><span style="color: Gray;">:</span><span style="color: Teal;">Rectangle</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">Rectangle</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">, </span><span style="color: Maroon;">0</span><span style="color: Gray;">, </span><span style="color: Maroon;">550</span><span style="color: Gray;">, </span><span style="color: Maroon;">400</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cTra</span><span style="color: Gray;">:</span><span style="color: Teal;">ColorTransform</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">ColorTransform</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">, </span><span style="color: Maroon;">.8</span><span style="color: Gray;">, </span><span style="color: Maroon;">.8</span><span style="color: Gray;">, </span><span style="color: Maroon;">.9</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">xp</span><span style="color: Gray;">:</span><span style="color: Teal;">int</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">yp</span><span style="color: Gray;">:</span><span style="color: Teal;">int</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">bmp</span><span style="color: Gray;">.</span><span style="color: Blue;">bitmapData</span><span style="color: Gray;"> = </span><span style="color: Blue;">bmd</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">addChild</span><span style="color: Olive;">(</span><span style="color: Blue;">bmp</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">stage</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: Blue;">Event</span><span style="color: Gray;">.</span><span style="color: Blue;">ENTER_FRAME</span><span style="color: Gray;">, </span><span style="color: Blue;">enterFrameHandler</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">enterFrameHandler</span><span style="color: Olive;">(</span><span style="color: Blue;">event</span><span style="color: Gray;">:</span><span style="color: Blue;">Event</span><span style="color: Olive;">)</span><span style="color: Gray;">:</span><span style="color: Green;">void</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">bmd</span><span style="color: Gray;">.</span><span style="color: Teal;">colorTransform</span><span style="color: Olive;">(</span><span style="color: Blue;">rect</span><span style="color: Gray;">, </span><span style="color: Blue;">cTra</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">xp</span><span style="color: Gray;"> += </span><span style="color: Olive;">(</span><span style="color: Blue;">mouseX</span><span style="color: Gray;"> - </span><span style="color: Blue;">xp</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 5;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; yp += (mouseY - yp) </span><span style="color: #8b0000;">/</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">5</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">bmd</span><span style="color: Gray;">.</span><span style="color: Teal;">fillRect</span><span style="color: Olive;">(</span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Teal;">Rectangle</span><span style="color: Olive;">(</span><span style="color: Blue;">xp</span><span style="color: Gray;">, </span><span style="color: Blue;">yp</span><span style="color: Gray;">, </span><span style="color: Maroon;">10</span><span style="color: Gray;">, </span><span style="color: Maroon;">10</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: Maroon;">0</span><span style="color: Blue;">xffffff</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=166</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【转】AssetCache – FlashPlayer中的cache机制</title>
		<link>http://www.duaich.com/?p=162</link>
		<comments>http://www.duaich.com/?p=162#comments</comments>
		<pubDate>Thu, 21 Jan 2010 01:31:02 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[flex框架]]></category>
		<category><![CDATA[RSL]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=162</guid>
		<description><![CDATA[转自：http://www.cbmland.com/post/531/assetcache-flashplayer-cache.html/comment-page-1#comment-49236
在开发Flex项目时可以选择RSL模式来分离出框架文件framework_*.swz ，这个框架文件包航了所有的Flex内置类，3.0的框架文件在520kb左右。可以供其他使用了RSL模式的SWF使用，有点类似Flash中的共享库概念，也可以理解为分布式的SWF下载，而Flex项目的发布的SWF文件的将体积大大减小，只有项目代码和初始化必须的模块。
这个方案看来一定程度上可以解决Flex项目生成的SWF文件过大的诟病。

 与Flash中的共享库概念和分布式下载又不同，framework_*.swz 框架文件一旦被使用过，就不依赖于浏览器的cache机制了。Flash Player会将其cache住。
在此之后如果有其他的Flex项目SWF也使用了相同版本的framework，这里就不需要再来下载framework_*.swz文件了，FlashPlayer直接从cache中本地读取。这样就只需要加载起始与50Kb左右的SWF文件，大大提高依赖于网络的载入速度。
Flash Player AssetCache 在机器上的储存路径
在XP系统下路径为类似为 C:\Documents and Settings\Administrator\Application Data\Adobe\Flash Player\AssetCache 下的一个随机目录中。
改成通用一点的
&#8220;%AppData%\Adobe\Flash Player\AssetCache&#8221;用这段创建一个快捷方式，这样每次都可以很快的找到这个目录了。(适用与所有Windows)
嘿嘿，有没有浏览过使用了RSL技术的SWF应用？就打开这个目录看看就知道了！
]]></description>
			<content:encoded><![CDATA[<p>转自：http://www.cbmland.com/post/531/assetcache-flashplayer-cache.html/comment-page-1#comment-49236<br />
在开发Flex项目时可以选择RSL模式来分离出框架文件framework_*.swz ，这个框架文件包航了所有的Flex内置类，3.0的框架文件在520kb左右。可以供其他使用了RSL模式的SWF使用，有点类似Flash中的共享库概念，也可以理解为分布式的SWF下载，而Flex项目的发布的SWF文件的将体积大大减小，只有项目代码和初始化必须的模块。</p>
<p>这个方案看来一定程度上可以解决Flex项目生成的SWF文件过大的诟病。<br />
<a href="http://www.duaich.com/wp-content/uploads/2010/01/2008-06-13_095411.png"><img src="http://www.duaich.com/wp-content/uploads/2010/01/2008-06-13_095411.png" alt="2008-06-13_095411" title="2008-06-13_095411" width="377" height="334" class="aligncenter size-full wp-image-163" /></a></p>
<p> 与Flash中的共享库概念和分布式下载又不同，framework_*.swz 框架文件一旦被使用过，就不依赖于浏览器的cache机制了。Flash Player会将其cache住。<br />
<span id="more-162"></span>在此之后如果有其他的Flex项目SWF也使用了相同版本的framework，这里就不需要再来下载framework_*.swz文件了，FlashPlayer直接从cache中本地读取。这样就只需要加载起始与50Kb左右的SWF文件，大大提高依赖于网络的载入速度。</p>
<p>Flash Player AssetCache 在机器上的储存路径</p>
<p>在XP系统下路径为类似为 C:\Documents and Settings\Administrator\Application Data\Adobe\Flash Player\AssetCache 下的一个随机目录中。</p>
<p>改成通用一点的</p>
<p>&#8220;%AppData%\Adobe\Flash Player\AssetCache&#8221;用这段创建一个快捷方式，这样每次都可以很快的找到这个目录了。(适用与所有Windows)</p>
<p>嘿嘿，有没有浏览过使用了RSL技术的SWF应用？就打开这个目录看看就知道了！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=162</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“电磁波”效果</title>
		<link>http://www.duaich.com/?p=158</link>
		<comments>http://www.duaich.com/?p=158#comments</comments>
		<pubDate>Wed, 13 Jan 2010 06:54:12 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=158</guid>
		<description><![CDATA[
原理：算出起点和终点的角度，然后沿着这个角度做分段随即绘制线段。
]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.duaich.com/wp-content/uploads/2010/01/blogCon.swf" /><param name="flashvars" value="url=http://www.duaich.com/wp-content/uploads/2010/01/lightningStudy.swf" /><embed type="application/x-shockwave-flash" width="400" height="350" src="http://www.duaich.com/wp-content/uploads/2010/01/blogCon.swf" flashvars="url=http://www.duaich.com/wp-content/uploads/2010/01/lightningStudy.swf"></embed></object></p>
<p>原理：算出起点和终点的角度，然后沿着这个角度做分段随即绘制线段。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=158</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>转：谈技术人员研究方向</title>
		<link>http://www.duaich.com/?p=154</link>
		<comments>http://www.duaich.com/?p=154#comments</comments>
		<pubDate>Tue, 05 Jan 2010 06:10:21 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[感悟]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=154</guid>
		<description><![CDATA[转自：http://timyang.net/misc/tech-life/
这篇文章不错，转来自勉。
为了更清楚的看清自己，拿一个成熟工业领域用设计汽车的例子来类比软件设计与开发。
技术人员的学习与实践有三个层次
第一层次 了解专业知识与原理
作为一名汽车设计师，在正式上岗之前，首先要了解汽车的各种原理。如引擎、燃料、悬挂，制动、碟鼓，ABS，风阻，油耗，安全防撞等知识，设计汽车目标并不仅是制造一个漂亮的外壳或者让轮子转起来。相反它一个有机的整体，一个系统的工程，你必须有综合的了解才能进行下一步。

软件技术也是如此，在入行之前，我们要了解计算机基础知识、操作系统、内存、网络、协议、TCP/IP、数据库/SQL、存储、数据结构、Web，HTML等专业知识。对于每一种知识你要知其然并知其所以然。比如HTML你不能只象一般的IT人员那样简单的知道它是一种描述网页的语言，而是要知其所覆盖范围，其所长和不所长，为什么有了HTML还要用JavaScript/Flash。
这个层次主要主要目标是知其所用。大部分技术人员应该不局限于长久停留在这一阶段。
第二层次 掌握工具、搭造环境
在汽车设计领域就是你的汽车模型建造工具，验证环境，测试工具，分析工具。你要能清晰的知道它们的特性，了解它们的限制及如何去规避。在软件领域，工具主要是指计算机语言，它是你制造原型及最终产品的工具。不同的场景适合不同的工具，合适的工具能帮助你如虎添翼，但语言也并不是多多益善，通常精通2-3种足矣。了解多种不如精通一种。除了工具还要建立自己得心应手的环境，就像比亚迪要建造自己的的汽车试验场一样，有了合适的环境，才能让你能高效的设计，开发，测试及验证。Jon Bentley，世界著名计算机科学家，被誉为影响算法发展的十位大师之一，他在《编程珠玑》中提到贝尔实验室的环境对他成就的巨大帮助
I came to the Labs because I enjoy balancing the theoretical and the applied, because I want to build products and write books. The pendulum has swung back and forth during my years at the Labs, but my management has always encouraged a wide range of activities.
能熟练使用工具只是对开发人员最低的要求，代表你有能力开发软件产品。但是你是满足一辈子都是重复造一种QQ车还是有更高的追求。比如在国内，某些行业几乎和10年前没什么区别，比如在企业管理应用领域，10年前用VB/Delphi做企业应用，大家都在谈人脉和关系在项目中的关键作用。10年后不用Delphi了，改用Java/SSH，其它一切如旧。这样的领域，开发人员和打一辈子铁的铁匠没什么区别，大家都是把活干得更熟了，除此之外，所获寥寥。
第三层次 学会设计
这时应跳出语言之争与语言迷恋，语言的细节了解得再多，也只是一名工匠，大部分优秀的应用只用到语言及框架不到1/3的特性。你应该寻找有价值的领域深入研究， 就如乔布斯所说
你的工作将填满你的一大块人生，唯一获得真正满足的方法就是做你相信是伟大的工作，而唯一做伟大工作的方法是爱你所做的事。如果你还没找到这些事，继续找，别停顿。尽你全心全力，你知道你一定会找到。而且，如同任何伟大的关系，事情只会随着时间愈来愈好。
所以，在你找到之前，继续找，别停顿。
首先应达到在单个专业领域能够游刃有余，比如如何设计一个简单的网站爬虫。注意有兴趣的设计与干活完成任务的重大区别，你设计的每个产品，它不单是个工作任务，而应该把它看作一个艺术品，这样才能保证你能不断的进步。注意不单要完成功能，否则永远无法达到更高境界。
下一步设计相对更全面领域的产品，比如考虑一个游戏服务器的方方面面或可以设计一个类twitter系统。慢慢的，你才会有自己积累的东西。
最后, 什么是开发人员有意义的方向？
从汽车行业来看，主要任务是学习国外先进公司的经验，在关键领域缩小与其差距，软件开发领域看来也是如此。有些领域虽然高深和有趣，但如果行业暂时需求不大，专注这方面研究难免敝帚自珍。研究业界有需求的领域并寻找有应用需求的场合方可达到开放人员价值的最大化。比如在热门的云存储云计算，虚拟化到不太热门的数据挖掘等都存在一定的空白去填补。最好是在有需求有环境的公司内开展。国内科研机构做表面文章的太多，因此感觉不是合适的场地。
只有找到你感兴趣的方向，才会达到王国维说的第二境界，“衣带渐宽终不悔，为伊消得人憔悴”。至于更高境界，自然是水到渠成。
在这个社会里，你只有做出令人尊敬的产品，才能赢得认可。就像Mini设计在汽车行业流芳百世的榜样，在技术行业里，学识，名望，人脉，金钱带来的价值都是可估量的，不可估量的是对行业留下的创新设计，让你无愧于工程师这个称号。
]]></description>
			<content:encoded><![CDATA[<p>转自：http://timyang.net/misc/tech-life/<br />
这篇文章不错，转来自勉。</p>
<p>为了更清楚的看清自己，拿一个成熟工业领域用设计汽车的例子来类比软件设计与开发。</p>
<p>技术人员的学习与实践有三个层次</p>
<p>第一层次 了解专业知识与原理</p>
<p>作为一名汽车设计师，在正式上岗之前，首先要了解汽车的各种原理。如引擎、燃料、悬挂，制动、碟鼓，ABS，风阻，油耗，安全防撞等知识，设计汽车目标并不仅是制造一个漂亮的外壳或者让轮子转起来。相反它一个有机的整体，一个系统的工程，你必须有综合的了解才能进行下一步。</p>
<p><span id="more-154"></span><br />
软件技术也是如此，在入行之前，我们要了解计算机基础知识、操作系统、内存、网络、协议、TCP/IP、数据库/SQL、存储、数据结构、Web，HTML等专业知识。对于每一种知识你要知其然并知其所以然。比如HTML你不能只象一般的IT人员那样简单的知道它是一种描述网页的语言，而是要知其所覆盖范围，其所长和不所长，为什么有了HTML还要用JavaScript/Flash。</p>
<p>这个层次主要主要目标是知其所用。大部分技术人员应该不局限于长久停留在这一阶段。</p>
<p>第二层次 掌握工具、搭造环境</p>
<p>在汽车设计领域就是你的汽车模型建造工具，验证环境，测试工具，分析工具。你要能清晰的知道它们的特性，了解它们的限制及如何去规避。在软件领域，工具主要是指计算机语言，它是你制造原型及最终产品的工具。不同的场景适合不同的工具，合适的工具能帮助你如虎添翼，但语言也并不是多多益善，通常精通2-3种足矣。了解多种不如精通一种。除了工具还要建立自己得心应手的环境，就像比亚迪要建造自己的的汽车试验场一样，有了合适的环境，才能让你能高效的设计，开发，测试及验证。Jon Bentley，世界著名计算机科学家，被誉为影响算法发展的十位大师之一，他在《编程珠玑》中提到贝尔实验室的环境对他成就的巨大帮助</p>
<p>I came to the Labs because I enjoy balancing the theoretical and the applied, because I want to build products and write books. The pendulum has swung back and forth during my years at the Labs, but my management has always encouraged a wide range of activities.<br />
能熟练使用工具只是对开发人员最低的要求，代表你有能力开发软件产品。但是你是满足一辈子都是重复造一种QQ车还是有更高的追求。比如在国内，某些行业几乎和10年前没什么区别，比如在企业管理应用领域，10年前用VB/Delphi做企业应用，大家都在谈人脉和关系在项目中的关键作用。10年后不用Delphi了，改用Java/SSH，其它一切如旧。这样的领域，开发人员和打一辈子铁的铁匠没什么区别，大家都是把活干得更熟了，除此之外，所获寥寥。</p>
<p>第三层次 学会设计<br />
这时应跳出语言之争与语言迷恋，语言的细节了解得再多，也只是一名工匠，大部分优秀的应用只用到语言及框架不到1/3的特性。你应该寻找有价值的领域深入研究， 就如乔布斯所说</p>
<p>你的工作将填满你的一大块人生，唯一获得真正满足的方法就是做你相信是伟大的工作，而唯一做伟大工作的方法是爱你所做的事。如果你还没找到这些事，继续找，别停顿。尽你全心全力，你知道你一定会找到。而且，如同任何伟大的关系，事情只会随着时间愈来愈好。<br />
所以，在你找到之前，继续找，别停顿。<br />
首先应达到在单个专业领域能够游刃有余，比如如何设计一个简单的网站爬虫。注意有兴趣的设计与干活完成任务的重大区别，你设计的每个产品，它不单是个工作任务，而应该把它看作一个艺术品，这样才能保证你能不断的进步。注意不单要完成功能，否则永远无法达到更高境界。</p>
<p>下一步设计相对更全面领域的产品，比如考虑一个游戏服务器的方方面面或可以设计一个类twitter系统。慢慢的，你才会有自己积累的东西。</p>
<p>最后, 什么是开发人员有意义的方向？<br />
从汽车行业来看，主要任务是学习国外先进公司的经验，在关键领域缩小与其差距，软件开发领域看来也是如此。有些领域虽然高深和有趣，但如果行业暂时需求不大，专注这方面研究难免敝帚自珍。研究业界有需求的领域并寻找有应用需求的场合方可达到开放人员价值的最大化。比如在热门的云存储云计算，虚拟化到不太热门的数据挖掘等都存在一定的空白去填补。最好是在有需求有环境的公司内开展。国内科研机构做表面文章的太多，因此感觉不是合适的场地。</p>
<p>只有找到你感兴趣的方向，才会达到王国维说的第二境界，“衣带渐宽终不悔，为伊消得人憔悴”。至于更高境界，自然是水到渠成。</p>
<p>在这个社会里，你只有做出令人尊敬的产品，才能赢得认可。就像Mini设计在汽车行业流芳百世的榜样，在技术行业里，学识，名望，人脉，金钱带来的价值都是可估量的，不可估量的是对行业留下的创新设计，让你无愧于工程师这个称号。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=154</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数字消消看游戏制作心得</title>
		<link>http://www.duaich.com/?p=122</link>
		<comments>http://www.duaich.com/?p=122#comments</comments>
		<pubDate>Sun, 03 Jan 2010 15:41:55 +0000</pubDate>
		<dc:creator>DuaiCH</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[as3，小游戏，数字消消看]]></category>

		<guid isPermaLink="false">http://www.duaich.com/?p=122</guid>
		<description><![CDATA[这些天模仿制作这个游戏：http://www.456.net/swf/5477.htm
下面是心得：
1.数据：
    地图数组&#8212;-二维数组。这个游戏的方块地图是10*9（10行9列），我采用的是11*9的二维数组。多出的一行用来操作顶部方块。数组元素由两种值：0，UnitData。

2.内存管理：
    方块：原计划是里面的方块用Sprite，内存控制方面打算用Dictionary进行缓存。后来发现实现上面存在难度。之后受俄罗斯方块游戏的启发，决定采用Bitmap和BitmapData实现。   bitmapSource由一个MovieClip跳帧提供。主要用到BitmapData的draw和fillRect方法实现方块下落效果。鼠标响应采用一个Sprite，根据点击x,y来映射地图中的坐标。
    爆炸效果：采用Dictionary进行缓存，最多10*9个动画。
3.动画管理：
     这个游戏有两处关键动画：下落动画和顶部方块生成动画。下落动画用BitmapData的draw和fillRect方法实现；顶部方块动画采用的是隔时间段draw出来。
4.游戏主要算法：
    游戏里有三种道具：时间暂停道具，炸弹道具和地雷道具；其中时间暂停道具效果很容易实现。炸弹和地雷道具效果实现时有两个难点：1.改变道具方块上面方块的坐标和改变顶部方块的目标值（target）；起初的做法是把效果分开来做，上面两点在每种效果里进行判断。后来发现有冲突，效果进行的顺序不同就会出现bug。后来采用先记录状态然后一起进行处理： 道具方块效果仍有，但这时的操作只是把受影响的方块记录下来。等道具效果全部结束后，把受影响的方块从地图数组里剔除出来（需要一个临时数组做为缓存）再进行全部渲染。
5.游戏层次（由上向下）：
    提示层
    场景层：
                引导页      游戏页       暂停页    &#8211;三者可切换
                                   绘制层（bitmap）
                                   选中显示层
                                   爆炸动画层
                                   鼠标响应层
                                   分数显示层
6.不足：道具算法上感觉还有提升的空间。感觉全部遍历渲染效率有点低。
地址：http://www.duaich.com/game/game.swf
]]></description>
			<content:encoded><![CDATA[<p>这些天模仿制作这个游戏：<a href="http://www.456.net/swf/5477.htm">http://www.456.net/swf/5477.htm</a></p>
<p>下面是心得：</p>
<p>1.数据：</p>
<p>    地图数组&#8212;-二维数组。这个游戏的方块地图是10*9（10行9列），我采用的是11*9的二维数组。多出的一行用来操作顶部方块。数组元素由两种值：0，UnitData。</p>
<p><span id="more-122"></span><br />
2.内存管理：</p>
<p>    方块：原计划是里面的方块用Sprite，内存控制方面打算用Dictionary进行缓存。后来发现实现上面存在难度。之后受俄罗斯方块游戏的启发，决定采用Bitmap和BitmapData实现。   bitmapSource由一个MovieClip跳帧提供。主要用到BitmapData的draw和fillRect方法实现方块下落效果。鼠标响应采用一个Sprite，根据点击x,y来映射地图中的坐标。</p>
<p>    爆炸效果：采用Dictionary进行缓存，最多10*9个动画。</p>
<p>3.动画管理：</p>
<p>     这个游戏有两处关键动画：下落动画和顶部方块生成动画。下落动画用BitmapData的draw和fillRect方法实现；顶部方块动画采用的是隔时间段draw出来。</p>
<p>4.游戏主要算法：</p>
<p>    游戏里有三种道具：时间暂停道具，炸弹道具和地雷道具；其中时间暂停道具效果很容易实现。炸弹和地雷道具效果实现时有两个难点：1.改变道具方块上面方块的坐标和改变顶部方块的目标值（target）；起初的做法是把效果分开来做，上面两点在每种效果里进行判断。后来发现有冲突，效果进行的顺序不同就会出现bug。后来采用先记录状态然后一起进行处理： 道具方块效果仍有，但这时的操作只是把受影响的方块记录下来。等道具效果全部结束后，把受影响的方块从地图数组里剔除出来（需要一个临时数组做为缓存）再进行全部渲染。</p>
<p>5.游戏层次（由上向下）：</p>
<p>    提示层</p>
<p>    场景层：</p>
<p>                引导页      游戏页       暂停页    &#8211;三者可切换</p>
<p>                                   绘制层（bitmap）</p>
<p>                                   选中显示层</p>
<p>                                   爆炸动画层</p>
<p>                                   鼠标响应层</p>
<p>                                   分数显示层</p>
<p>6.不足：道具算法上感觉还有提升的空间。感觉全部遍历渲染效率有点低。</p>
<p>地址：<a href="http://www.duaich.com/game/game.swf" target="_blank">http://www.duaich.com/game/game.swf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.duaich.com/?feed=rss2&amp;p=122</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
