<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[羽柴|鬼铃-blog]]></title>
  <subtitle type="html"><![CDATA[Flash网络游戏开发教程,CG,flash,fms,as2,插画,漫画,网页,动画,flash游戏,云南游戏,昆明游戏,云南flash,昆明flash]]></subtitle>
  <id>http://www.ycflash.com/</id> 
  <link rel="alternate" type="text/html" href="http://www.ycflash.com/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.ycflash.com/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-07-17T15:45:53+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[转贴:FMS无法启动的另一个杀手]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=3" label="FMS" /> 
	  <updated>2008-07-17T15:45:53+08:00</updated>
	  <published>2008-07-17T15:45:53+08:00</published>
		  <summary type="html"><![CDATA[2次出现这样的问题, 所以把大猴子的这贴转过来.<br/>出处:<a href="http://25swf.blogbus.com/logs/10019430.html" target="_blank">http://25swf.blogbus.com/logs/10019430.html</a><br/><br/>如果你发现你的FMS无法启动,无法运行所有的APPLICATION,你可以打开你的FMS日志,地址是<br/>Program Files\Macromedia\Flash Media Server 2\logs\<br/>打开 master.00.log 这个文件,如果你在其中发现有这样一句<br/>MS has detected system time is going backwards; shutting down server<br/><br/>那么就很幸运的,本文对你有一定的帮助作用.<br/>找到 C:\Documents and Settings\All Users\Application Data\Macromedia\FMS<br/>这里有一个 名字为空的文件,删除它,然后再重试启动的的FMS..可能一切就会恢复以前了.<br/><br/>一般产生这种结果的原因是因为你修改过系统的时间,导致FMS以为你想修改系统时间来作假.从而锁定了FMS...<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=86" /> 
	  <id>http://www.ycflash.com/default.asp?id=86</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[WebService调用方法.]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=2" label="AS2" /> 
	  <updated>2008-05-29T21:04:33+08:00</updated>
	  <published>2008-05-29T21:04:33+08:00</published>
		  <summary type="html"><![CDATA[今天朋友提到 WebService调用方法. 如果不用组件如何实现. 看以下例子:<br/><br/>//下面这句必须要,是加载方法类库<br/>import mx.services.WebService;<br/>wspath = &#34;<a href="http://xxx.xxx.xx.xx/xxx.asmx?wsdl" target="_blank">http://xxx.xxx.xx.xx/xxx.asmx?wsdl</a>&#34;;<br/>//<br/><br/>var sWeb:WebService = new WebService(wspath);<br/>sWeb.onLoad = function(wsdl:Object) {<br/>&#160;&#160;&#160;&#160;trace(&#34;ws连接成功&#34;);<br/>};<br/>sWeb.onFault = function(err:Object) {<br/>&#160;&#160;&#160;&#160;trace(&#34;失败&#34;);<br/>};<br/>//下面是WebService的调用方法 下例中 ServiceFun 是方法例子。具体的方法名得.net开发者提供。<br/>//先用1-9行的方法与WebService取得连接，连接成功后就可以调用方法。下面则是点击按钮调用方法<br/>按钮.onRelease = function() {<br/>&#160;&#160;&#160;&#160;//下面方法需要sWeb连接成功后才可以调用,所以我写在按钮方法中.<br/>&#160;&#160;&#160;&#160;验证用户 = sWeb.ServiceFun(参数1, 参数2);<br/>&#160;&#160;&#160;&#160;验证用户.onResult = function(resObj:Object) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//resObj则是成功后返回的数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;};<br/>&#160;&#160;&#160;&#160;验证用户.onFault = function(fault) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果失败则会调用下面<br/>&#160;&#160;&#160;&#160;};<br/>};<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=85" /> 
	  <id>http://www.ycflash.com/default.asp?id=85</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[鬼铃的作品系列7]]></title>
	  <author>
		 <name>白夜鬼铃</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=11" label="CG插画" /> 
	  <updated>2007-11-28T23:37:24+08:00</updated>
	  <published>2007-11-28T23:37:24+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.ycflash.com/attachments/month_0712/r2007126144554.jpg" border="0" alt=""/><br/><br/><img src="http://www.ycflash.com/attachments/month_0712/52007126144610.jpg" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=84" /> 
	  <id>http://www.ycflash.com/default.asp?id=84</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[牌类游戏中取出顺子的算法]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=4" label="游戏算法" /> 
	  <updated>2007-11-26T23:26:11+08:00</updated>
	  <published>2007-11-26T23:26:11+08:00</published>
		  <summary type="html"><![CDATA[//一直忙啊，都好长时间没写BLOG了。。今天刚写到一个自动从一套牌中取出顺子的算法就贴上来吧<br/>//以下用斗地主作为例子： 把代码贴到FLASH中导出即可看到效果，只限FLASH8&nbsp;&nbsp;AS2版本<br/>散牌组 = [[17, 4], [12, 3], [15, 0], [14, 2], [14, 3], [10, 3], [5, 3], [11, 3], [12, 1], [3, 0], [8, 0], [15, 3], [6, 3], [13, 1], [14, 1], [7, 2], [4, 3], [10, 1], [15, 2]];<br/>散牌组.sortOn(0, 1 | 16);<br/>顺子牌组 = new Array();<br/>//建立调试点数<br/>调试点数 = new Array();<br/>for (var i = 0; i&lt;散牌组.length; i++) {<br/>&#160;&#160;&#160;&#160;调试点数.push(散牌组[i][0]);<br/>}<br/>trace(&#34;原牌组=&#34;+调试点数);<br/>for (var i = 0; i&lt;散牌组.length-5; i++) {<br/>&#160;&#160;&#160;&#160;//用来记录合格的编号<br/>&#160;&#160;&#160;&#160;var 编号数组 = new Array();<br/>&#160;&#160;&#160;&#160;//追加值用来判断如果成对的跳跃判断数<br/>&#160;&#160;&#160;&#160;var 跳跃值 = 0;<br/>&#160;&#160;&#160;&#160;for (var j = 0; j&lt;散牌组.length-i; j++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//trace(散牌组[i+j][0]+&#34;==&#34;+(散牌组[i+j+1][0]-1+跳跃值)+&#34; 跳跃值=&#34;+跳跃值);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (散牌组[i+j][0]+跳跃值 == 散牌组[i+j+1][0]+跳跃值 &amp;&amp; 散牌组[i+j+1][0]&lt;=15) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;跳跃值++;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else if (散牌组[i+j][0]+跳跃值 == 散牌组[i+j+1][0]-1+跳跃值 &amp;&amp; 散牌组[i+j+1][0]&lt;=15) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;编号数组.push(i+j);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;if (编号数组.length&gt;=5) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var 临时牌组 = new Array();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var 减编号 = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for (var j = 0; j&lt;编号数组.length; j++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var 删除值 = 散牌组.splice(编号数组[j]-减编号, 1);<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;临时牌组.push(删除值[0]);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;顺子牌组.push(临时牌组);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;i = 0;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>trace(&#34;抽取的组队数=&#34;+顺子牌组.length);<br/>trace(&#34;=============处理取牌后的结果=========&#34;);<br/>for (var n = 0; n&lt;顺子牌组.length; n++) {<br/>&#160;&#160;&#160;&#160;调试点数 = new Array();<br/>&#160;&#160;&#160;&#160;for (var i = 0; i&lt;顺子牌组[n].length; i++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;调试点数.push(顺子牌组[n][i][0]);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;trace(&#34;顺子牌组&#34;+n+&#34;=&#34;+调试点数);<br/>}<br/>调试点数 = new Array();<br/>for (var i = 0; i&lt;散牌组.length; i++) {<br/>&#160;&#160;&#160;&#160;调试点数.push(散牌组[i][0]);<br/>}<br/>trace(&#34;抽取后剩下的散牌=&#34;+调试点数);<br/>//=====================================<br/>//<br/>//转载请注明出处：羽柴 鬼铃-blog&nbsp;&nbsp;www.ycflash.com/blog<br/>//<br/>//=====================================]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=83" /> 
	  <id>http://www.ycflash.com/default.asp?id=83</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[我们的QQ秀绘制真人版]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=11" label="CG插画" /> 
	  <updated>2007-11-13T13:44:26+08:00</updated>
	  <published>2007-11-13T13:44:26+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.ycflash.com/attachments/month_0711/z20071113134335.jpg" border="0" alt=""/><br/><img src="http://www.ycflash.com/attachments/month_0711/e20071113134343.jpg" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=82" /> 
	  <id>http://www.ycflash.com/default.asp?id=82</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[时尚千变]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=7" label="商业案例" /> 
	  <updated>2007-11-04T14:17:02+08:00</updated>
	  <published>2007-11-04T14:17:02+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://www.ycflash.com/attachments/month_0711/02007114141645.jpg" border="0" alt=""/><br/><br/><br/><img src="http://www.ycflash.com/attachments/month_0711/e2007114141652.jpg" border="0" alt=""/><br/><br/><br/><img src="http://www.ycflash.com/attachments/month_0711/j2007114141659.jpg" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=81" /> 
	  <id>http://www.ycflash.com/default.asp?id=81</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[FMS异步与其他web语言达成异步验证]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=3" label="FMS" /> 
	  <updated>2007-10-29T18:53:33+08:00</updated>
	  <published>2007-10-29T18:53:33+08:00</published>
		  <summary type="html"><![CDATA[如做到 FLASH 输入账号 密码去取得数据库中的数据， 目前需要.net 或php做中转。方法有sendandload和WebService较为常用（目前AS2&nbsp;&nbsp;AS3本人不熟不知道能否直接与数据沟通）。 但大家假想，如果用FLASH客户端直接去从取。如果页面地址暴露将会有什么后果。。不能想都知道。<br/>最理想的处理方法则是 用FLASH 把账号，密码传给FMS，让FMS去做和数据库登录验证的工作。这样才能达到最安全的机制.如下图的验证机制。<br/><img src="http://www.ycflash.com/attachments/month_0710/g20071029184048.gif" border="0" alt=""/><br/>从图上可以看出，验证的主要还是由.net和php做验证。FMS只是做了把账号密码中转了一次。但这样做法有很大用途。这样让玩家无法得取.net的处理页面具体地址。要想知道就得把FMS服务器给黑了才知道，比起写在FLASH客户端用破解软件要安全的多得多。特别是现在FLASH破解软件满天飞的时代<br/><br/>但sendandload和WebService的处理方式是异步的，要经过访问和返回的步骤。特别在网络不佳的时候还有等待的处理。下面的例子用sendandload来简单说明怎么处理异步的FMS验证操作。 <br/><br/>=========FMS端========<br/>function userLogin(_newClient,usrName,usrPwd){<br/>&#160;&#160;&#160;&#160;trace(&#34;用户登录&#34;)<br/>&#160;&#160;&#160;&#160;thisObj=this<br/>&#160;&#160;&#160;&#160;//用户登录GameLogin() &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;var Login = new LoadVars()<br/>&#160;&#160;&#160;&#160;Login.onLoad = function(success) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (success) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (this.usrOkFlag == &#34;ok&#34;) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(usrName+&#34;登录成功&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;application.acceptConnection (_newClient);<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;_newClient.myData=this.data&#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;_newClient.call(&#34;init&#34;)<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;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;application.rejectConnection (_newClient, &#34;登录失败!&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;};&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;sendUrl=&#34;<a href="http://www.xxx.com/xxx.aspx?usrName=" target="_blank">http://www.xxx.com/xxx.aspx?usrName=</a>&#34;+usrName+&#34;&amp;usrPwd&#34;+usrPwd+&#34;&amp;&#34;<br/>&#160;&#160;&#160;&#160;Login.sendAndLoad(sendUrl, Login, &#34;GET&#34;);<br/>&#160;&#160;&#160;&#160;//&#160;&#160;&#160;&#160;<br/>}<br/><br/>application.onConnect = function(newClient,usrName,usrPwd) {<br/>&#160;&#160;&#160;&#160;userLogin(newClient,usrName,usrPwd)&#160;&#160;&#160;&#160;<br/>};<br/>//<br/><br/>大家可以看到 在登录的时候去调用一个function 把 new LoadVars() 写在该函数中。这样同时N人进入，<br/>他会自动处理多个function。而每个function中就是一个new LoadVars。并把处理的结果调回了相应的function中达到异步的接受事件.<br/>//=====================================<br/>//<br/>//转载请注明出处：羽柴 鬼铃-blog&nbsp;&nbsp;www.ycflash.com/blog<br/>//<br/>//=====================================]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=80" /> 
	  <id>http://www.ycflash.com/default.asp?id=80</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[类似俄罗斯式拼方块游戏。]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=4" label="游戏算法" /> 
	  <updated>2007-10-28T17:02:18+08:00</updated>
	  <published>2007-10-28T17:02:18+08:00</published>
		  <summary type="html"><![CDATA[昨天朋友急需开发一个类似俄罗斯式拼方块游戏。 在赶项目过程中，只有花去晚上3小时赶出了这个游戏。基原理和俄罗斯方块一样简单，维持2维数组碰撞。成形后消除，现发上来给大家研究下吧。<br/><br/>拼成如下图形后消失。<br/><img src="http://www.ycflash.com/attachments/month_0710/p20071028165838.gif" border="0" alt=""/><br/><br/>============核心源码===========<br/>function 变量初始() {<br/>&#160;&#160;&#160;&#160;场景高格数 = 12;<br/>&#160;&#160;&#160;&#160;场景宽格数 = 12;<br/>&#160;&#160;&#160;&#160;单元格高宽 = 30;<br/>&#160;&#160;&#160;&#160;移动时间 = 1000;<br/>&#160;&#160;&#160;&#160;游戏结束 = false;<br/>&#160;&#160;&#160;&#160;场景数组 = new Array();<br/>&#160;&#160;&#160;&#160;//生成2维数组<br/>&#160;&#160;&#160;&#160;for (var i = 0; i&lt;场景高格数; i++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i] = new Array();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for (var j = 0; j&lt;场景宽格数; j++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i][j] = 0;<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;this.cr&#101;ateTextField(&#34;文本&#34;+i+&#34;@&#34;+j, (i*场景高格数+j)*10, i*单元格高宽, j*单元格高宽, 100, 100);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+i+&#34;@&#34;+j].color = 0xff0000;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+i+&#34;@&#34;+j].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;//<br/>&#160;&#160;&#160;&#160;出现位置 = [5, 0];<br/>&#160;&#160;&#160;&#160;方块数量 = 0;<br/>&#160;&#160;&#160;&#160;生成方块();<br/>&#160;&#160;&#160;&#160;//在原点上的增加位 2维增加位 [1,1],[0,0]&nbsp;&nbsp;前2位为第1行,后2位为第2行<br/>&#160;&#160;&#160;&#160;形状数组 = [[&#34;无需数据&#34;], [1, 0], [0, 1], [-1, 0], [0, -1]];<br/>}<br/>变量初始();<br/>//<br/>function 生成方块() {<br/>&#160;&#160;&#160;&#160;trace(&#34;ss&#34;);<br/>&#160;&#160;&#160;&#160;if (!游戏结束) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;方块数量++;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;attachMovie(&#34;方块&#34;, &#34;方块&#34;+方块数量, 方块数量);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;形状 = int(random(4))+1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当前操作方块 = this[&#34;方块&#34;+方块数量];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量].形状 = 形状;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量].gotoAndStop(形状);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量].运行 = 运行;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量].移动 = 移动;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量].计算可否移动 = 计算可否移动;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量]._x = 出现位置[0]*单元格高宽+15;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量]._y = 出现位置[1]*单元格高宽+15;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+方块数量].运行(移动时间, 形状);<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>function 运行(移动时间, 形状) {<br/>&#160;&#160;&#160;&#160;this.移动间隔 = setInterval(移动, 移动时间, this);<br/>}<br/>function 移动($this) {<br/>&#160;&#160;&#160;&#160;//trace(&#34;移动 &#34;+$this);<br/>&#160;&#160;&#160;&#160;$this._y += 30;<br/>&#160;&#160;&#160;&#160;//计算可否移动<br/>&#160;&#160;&#160;&#160;计算可否移动($this, $this._x, $this._y, $this.形状);<br/>}<br/>function 横向移动($this, 方向) {<br/>&#160;&#160;&#160;&#160;var 二维坐标 = [int($this._x/单元格高宽), int($this._y/单元格高宽)];<br/>&#160;&#160;&#160;&#160;//trace(二维坐标)<br/>&#160;&#160;&#160;&#160;if (方向 == &#34;左&#34; &amp;&amp; (场景数组[二维坐标[0]-1][二维坐标[1]] == 0 &amp;&amp; 场景数组[二维坐标[0]+形状数组[$this.形状][0]-1][二维坐标[1]+形状数组[$this.形状][1]] == 0)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this._x -= 30;<br/>&#160;&#160;&#160;&#160;} else if (方向 == &#34;右&#34; &amp;&amp; (场景数组[二维坐标[0]+1][二维坐标[1]] == 0 &amp;&amp; 场景数组[二维坐标[0]+形状数组[$this.形状][0]+1][二维坐标[1]+形状数组[$this.形状][1]] == 0)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this._x += 30;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>function 计算可否移动($this, X, Y, 形状) {<br/>&#160;&#160;&#160;&#160;当前2维坐标 = [int(X/单元格高宽), int(Y/单元格高宽)];<br/>&#160;&#160;&#160;&#160;//trace(当前2维坐标)<br/>&#160;&#160;&#160;&#160;//trace(场景数组[当前2维坐标[0]][当前2维坐标[1]+1]);<br/>&#160;&#160;&#160;&#160;//判断游戏是否结束<br/>&#160;&#160;&#160;&#160;//判断是否碰到阻碍 <br/>&#160;&#160;&#160;&#160;if (场景数组[当前2维坐标[0]][当前2维坐标[1]+1] != 0 || 场景数组[当前2维坐标[0]+形状数组[$this.形状][0]][当前2维坐标[1]+形状数组[$this.形状][1]+1] != 0) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//trace(&#34;形状=&#34;+$this.形状);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//trace(&#34;形状数组=&#34;+形状数组[$this.形状]);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[当前2维坐标[0]][当前2维坐标[1]] = 1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1]].text = 1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[当前2维坐标[0]+形状数组[形状][0]][当前2维坐标[1]+形状数组[$this.形状][1]] = 2;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(当前2维坐标[0]+形状数组[$this.形状][0])+&#34;@&#34;+(当前2维坐标[1]+形状数组[$this.形状][1])].text = 1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//trace(this[&#34;文本&#34;+(当前2维坐标[0]+形状数组[$this.形状][0])+&#34;@&#34;+(当前2维坐标[1]+形状数组[$this.形状][1])]);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var temp形状 = $this.形状;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;clearInterval($this.移动间隔);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this.removeMovieClip();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//trace(this[&#34;方块&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1]]);<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;if (是否清除) {<br/>&#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;attachMovie(&#34;方块&#34;, &#34;方块&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1], 方块数量);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1]]._x = 当前2维坐标[0]*单元格高宽+15;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1]]._y = 当前2维坐标[1]*单元格高宽+15;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1]].形状 = temp形状;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+当前2维坐标[0]+&#34;@&#34;+当前2维坐标[1]].gotoAndStop(temp形状);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (当前2维坐标[1]-1 == 0 || (当前2维坐标[1]+形状数组[$this.形状][1])-1 == 0) {<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;游戏结束 = true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return;<br/>&#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;}<br/>&#160;&#160;&#160;&#160;}<br/>}<br/>function 判断可否消除() {<br/>&#160;&#160;&#160;&#160;for (var i = 1; i&lt;场景高格数-1; i++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for (var j = 1; j&lt;场景宽格数-1; j++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (场景数组[i-1][j-1] == 1 &amp;&amp; 场景数组[i][j-1] == 2 &amp;&amp; 场景数组[i+1][j-1] == 1 &amp;&amp; 场景数组[i-1][j] == 2 &amp;&amp; 场景数组[i+1][j] ==2 &amp;&amp; 场景数组[i-1][j+1] == 1 &amp;&amp; 场景数组[i][j+1] == 2 &amp;&amp; 场景数组[i+1][j+1] == 1) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;拼成一个 &#34;+i+&#34;@&#34;+j);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i-1)+&#34;@&#34;+(j-1)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i)+&#34;@&#34;+(j-1)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i+1)+&#34;@&#34;+(j-1)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i-1)+&#34;@&#34;+(j)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i+1)+&#34;@&#34;+(j)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i-1)+&#34;@&#34;+(j+1)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i)+&#34;@&#34;+(j+1)].text = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;文本&#34;+(i+1)+&#34;@&#34;+(j+1)].text = 0;<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;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+(i-1)+&#34;@&#34;+(j-1)].removeMovieClip();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+(i+1)+&#34;@&#34;+(j-1)].removeMovieClip();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+(i-1)+&#34;@&#34;+(j+1)].removeMovieClip();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this[&#34;方块&#34;+(i+1)+&#34;@&#34;+(j+1)].removeMovieClip();<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;场景数组[i-1][j-1] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i][j-1] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i+1][j-1] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i-1][j] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i+1][j] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i-1][j+1] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i][j+1] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;场景数组[i+1][j+1] = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return true;<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;return false;<br/>}<br/>//热键<br/>var keyListener:Object = new Object();<br/>keyListener.onKeyDown = function() {<br/>&#160;&#160;&#160;&#160;//trace(Key.getCode());<br/>&#160;&#160;&#160;&#160;//空格键<br/>&#160;&#160;&#160;&#160;if (Key.isDown(32) || Key.isDown(38)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当前操作方块.形状++;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (当前操作方块.形状&gt;4) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当前操作方块.形状 = 1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当前操作方块.gotoAndStop(当前操作方块.形状);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;//向下键&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#160;&#160;&#160;&#160;if (Key.isDown(40)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!游戏结束) {<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;if (Key.isDown(37)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;横向移动(当前操作方块, &#34;左&#34;);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;if (Key.isDown(39)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;横向移动(当前操作方块, &#34;右&#34;);<br/>&#160;&#160;&#160;&#160;}<br/>};<br/>Key.addListener(keyListener);<br/>//=====================================<br/>//<br/>//转载请注明出处：羽柴 鬼铃-blog&nbsp;&nbsp;www.ycflash.com/blog<br/>//<br/>//=====================================<br/><br/><br/><br/>源码下载：<br/><img src="http://www.ycflash.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.ycflash.com/attachments/month_0710/42007102817215.rar" target="_blank">点击下载此文件</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=79" /> 
	  <id>http://www.ycflash.com/default.asp?id=79</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[FMS大厅建房及自动分组]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=3" label="FMS" /> 
	  <updated>2007-10-26T01:32:49+08:00</updated>
	  <published>2007-10-26T01:32:49+08:00</published>
		  <summary type="html"><![CDATA[之前一直忙啊忙的都没时间弄自己的东西和写BLOG了，终于告一段落了。虽然手上还有N个项目等着开发，但今天在整理debug的时候发现原来我开发大厅建房和分组机制上原来有一个不好的误区 所以也拿出来和大家分享及讨论。虽然我之前的开发一直没出现特殊问题，但今天仔细考虑后。其实是种不方便扩展和不易维护的方式。<br/><br/>我的现实方法就是都通过FMS 做管理和分组<br/>客户端&nbsp;&nbsp;&nbsp;&nbsp; 服务端：room(app)&nbsp;&nbsp;DDZ(用斗地主app举例)<br/>用客户端先去访问room，room有个数组，用来记录每场游戏的开始与否状态及人数。 room判断当前这个客户端该分配到哪一个房间 call回客户端，让客户端直接去连DDZapp 。 DDZapp每进入一个人向room call一次，当游戏开始也call&nbsp;&nbsp;为了让room更变记录的各房间的数组信息。&nbsp;&nbsp;一般来看逻辑是无问题，在实际应用中也没出现过问题。<br/><br/>但实际上这是种不良好的方式，这样主动权就变在客户端了。1 客户端一旦被破译反编，别人想建房就建。room起不到相应的作用。2&nbsp;&nbsp;room没有一个主导权做为维护和管理。 他只是被做为一个引路者的感觉。<br/><br/>经过考虑后，应该改为如下方式。<br/>room管理每个游戏APP，客户建房或分组先提交给room&nbsp;&nbsp;room去连接app（app限制初次连入者只许可room）。建房成功返回room&nbsp;&nbsp; room进行分组，或更变自身房间数组信息。假如是自动分组，所有的玩家在room中等待，由room直属分配给app。 <br/><br/>这样将来游戏是要建房机制 还是自动分组机制 更换起来比较方便。<br/>//=====================================<br/>//<br/>//转载请注明出处：羽柴 鬼铃-blog&nbsp;&nbsp;<br/>//&nbsp;&nbsp;&nbsp;&nbsp; www.ycflash.com/blog<br/>//<br/>//=====================================]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=78" /> 
	  <id>http://www.ycflash.com/default.asp?id=78</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[鬼铃的作品系列6]]></title>
	  <author>
		 <name>白夜鬼铃</name>
		 <uri>http://www.ycflash.com/</uri>
		 <email>yuchaiyuwei@163.com</email>
	  </author>
	  <category term="" scheme="http://www.ycflash.com/default.asp?cateID=11" label="CG插画" /> 
	  <updated>2007-10-15T14:31:44+08:00</updated>
	  <published>2007-10-15T14:31:44+08:00</published>
		  <summary type="html"><![CDATA[光一<br/><img src="http://www.ycflash.com/attachments/month_0710/72007101514323.jpg" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.ycflash.com/default.asp?id=76" /> 
	  <id>http://www.ycflash.com/default.asp?id=76</id> 
  </entry>	
		
</feed>