<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
  <channel>
    <title><![CDATA[小S吧 　 sunbright博客]]></title> 
    <link>http://www.xiaos8.com/</link> 
    <description><![CDATA[生活就像茶几，因为上面摆满了杯具！]]></description> 
    <language>en</language> 
    <copyright><![CDATA[Copyright 2010, 小S吧 　 sunbright博客]]></copyright> 
    <webMaster><![CDATA[iamsun1550@gmail.com (sunbright)]]></webMaster> 
    <generator>LBS v2.0.313</generator> 
    <pubDate>Wed, 10 Mar 2010 09:59:39 +0800</pubDate> 
    <ttl>60</ttl>
  
    <item>
      <title><![CDATA[星际争霸2的图形用户界面使用Flash搭建]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=541]]></link> 
      <category><![CDATA[AS相关资讯]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Thu, 04 Mar 2010 10:16:49 +0800</pubDate> 
      <description><![CDATA[国外一名玩家破解了星际2 Beta版的文件，发现其中不乏很多swf文件<br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201003/04_102738_goewc.png" alt="http://www.xiaos8.com/uploads/201003/04_102738_goewc.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201003/04_102738_goewc.png" target="_blank">http://www.xiaos8.com/uploads/201003/04_102738_goewc.png</a></div></td></tr></table><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201003/04_102722_7bldr.png" alt="http://www.xiaos8.com/uploads/201003/04_102722_7bldr.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201003/04_102722_7bldr.png" target="_blank">http://www.xiaos8.com/uploads/201003/04_102722_7bldr.png</a></div></td></tr></table><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201003/04_102733_atzef.png" alt="http://www.xiaos8.com/uploads/201003/04_102733_atzef.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201003/04_102733_atzef.png" target="_blank">http://www.xiaos8.com/uploads/201003/04_102733_atzef.png</a></div></td></tr></table><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201003/04_102728_31aer.png" alt="http://www.xiaos8.com/uploads/201003/04_102728_31aer.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201003/04_102728_31aer.png" target="_blank">http://www.xiaos8.com/uploads/201003/04_102728_31aer.png</a></div></td></tr></table><br />经证实，这些文件应该就是Flash文件，并不是说扩展名正好是.swf<br />有一个引擎叫做Scaleform GFx，其中就使用了Flash技术，而且还有一些XBox，PS3的游戏也用这套引擎，也就说也用了Flash相关技术，另外最后一张截图中gfx文件就是将Flash输出到Scaleform GFx Game Engine的相关文件。<br />Scaleform GFx相关介绍：<a href="http://www.scaleform.com/products/gfx" title="http://www.scaleform.com/products/gfx" target="_blank">http://www.scaleform.com/products/gfx</a><br />国外原文地址：<a href="http://www.reddit.com/comments/b41w1/flash_is_not_dead_starcraft_ii_uses_it/" title="http://www.reddit.com/comments/b41w1/flash_is_not_dead_starcraft_ii_uses_it/" target="_blank">http://www.reddit.com/comments/b41w1/flash_is_not_dead_starcraft_ii_uses_it/</a><br />无意中查看到这条消息后，经<a href="http://www.baidu.com" title="http://www.baidu.com" target="_blank">百度</a>查询资料，无意中发现国内最早转载应该是 <a href="http://swfever.com/?p=1071" title="http://swfever.com/?p=1071" target="_blank">http://swfever.com/?p=1071</a>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=541]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[一道AS3面试题的解答]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=537]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Wed, 24 Feb 2010 10:54:41 +0800</pubDate> 
      <description><![CDATA[最近在网上看到一个AS3面试题，感兴趣写了个答案，当然标不标准我就不知道了~<div class="quote"><div class="quote-title"> </div><div class="quote-content">题目：对一批编号为1-100全部开关朝上（开）的灯进行以下操作：<br />开关编号凡是1的倍数反方向拨一次开关；若该编号也是2的倍数反方向又拨一次开关；若该编号又是3的倍数反方向又拨一次开关……以此类推一直计算到100为止。<br />目的：请trace出经过反复开关操作后所有关闭的灯的开关编号。</div></div>这是我写给大家看的易懂版本：<div class="code">var n:int, m:int;<br />var range:int = 100;<br />for(var i:int = 1; i &lt;= range; i ++){<br />&nbsp;&nbsp;n = 1;<br />&nbsp;&nbsp;while(true){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(n &gt; i / n){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i % n == 0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i / n == n){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;结果&quot;,i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;n ++;<br />&nbsp;&nbsp;}<br />}</div>下面是写着玩的缩写版本，不过正常写项目代码，我不会这样干的，在这儿只是娱乐一下而以<br />下面这段代码想玩就看看，不想玩的看上面就行了，判断原理是一样，没区别！<div class="code">var n:int = 1, range:int = 1000;<br />for(var i:int = 1; i &lt;= range; i += n = 1){<br />&nbsp;&nbsp;while(n &gt; 0) n = n &gt; i / n ? 0 : !(i % n) ? i / n == n ? -1 : n + 1 : n + 1;<br />&nbsp;&nbsp;if(n == -1) trace(&quot;结果&quot;,i);<br />}</div>我将range都改成100000后，<br />第一种方法耗时7233毫秒<br />第二种缩减的写法耗时1840毫秒<br />对于易读易懂，你会选择那中方法呢？<p/><b>对于暗泪同学的回复，下面增加一点内容：</b><br />其实上面写的是正常算法，如果2亿次，通过分析题目，可以得出只要该数能被开平方时，就是关闭状态<br />因此这道题目如果是写在项目里面，可以这样写：<div class="code">var range:int = 1000000000;<br />var num:int = Math.pow(range,0.5);<br />for(var i:int = 1; i &lt;= num; i ++){<br />&nbsp;&nbsp;trace(&quot;结果&quot;,i * i)<br />}</div>我测试过10亿次的效率，仅需要6毫秒~何其快啊！]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=537]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[AS3难查的错误根源之强弱引用在作祟]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=531]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Tue, 26 Jan 2010 11:19:10 +0800</pubDate> 
      <description><![CDATA[<div class="quote"><div class="quote-title"> 引言</div><div class="quote-content">在2010年1月24日在上海举办的Flash开发者交流会中，我曾经在会场上讲了Tween，URLLoader等类，会因为使用弱引用侦听而导致错误，是什么原因出错呢？下面讲的就是错误的根源，也算是对于我那天所讲，做一个全面的补充。（另外：感谢李正民同学让我了解了&quot;引用计数&quot;这个专业词）</div></div>首先我们来看一个Flash和一段代码：<br />点击上方的黑色小按钮，点一次发现效果还不错，那么你在开始有间隔的狂点这个小按钮，点的次数多了，时间长了，BUG就出现了，会发现有些动画卡住了，显示对象有时候不会运动到四周。<br /><div class="ubb-obj-div"><input id="bShowobj5yvb" type="hidden" value="-1" /><a href="javascript:ubbShowObj('swf','obj5yvb','http://www.xiaos8.com/uploads/flash/testshow.swf','600','480');"><img src="http://www.xiaos8.com/styles/default/images/icon_media.gif" alt="Media" /> <b>点击播放/隐藏媒体</b></a><div id="obj5yvb"><a href="http://www.xiaos8.com/uploads/flash/testshow.swf" target="_blank">http://www.xiaos8.com/uploads/flash/testshow.swf</a></div></div>下面的代码就是这个Flash的源码，看过了BUG后，接下来谁能在代码中发现这个BUG是如何引发的呢？<div class="code">package<br />{<br />&nbsp;&nbsp;import fl.transitions.Tween;<br />&nbsp;&nbsp;import fl.transitions.easing.Bounce;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;import flash.display.Bitmap;<br />&nbsp;&nbsp;import flash.display.Sprite;<br />&nbsp;&nbsp;import flash.events.MouseEvent;<p/>&nbsp;&nbsp;public class TestShow extends Sprite<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;[Embed (source=&quot;1.jpg&quot;)]<br />&nbsp;&nbsp;&nbsp;&nbsp;private var Pic:Class;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;private var btn:Sprite;<br />&nbsp;&nbsp;&nbsp;&nbsp;private var centerX:int;<br />&nbsp;&nbsp;&nbsp;&nbsp;private var centerY:int;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public function TestShow()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;private function init():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centerX = stage.stageWidth / 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centerY = stage.stageHeight / 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn = new Sprite;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.graphics.beginFill(0,0.5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.graphics.drawRect(centerX - 10,0,20,10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.graphics.endFill();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.buttonMode = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage.addChild(btn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.addEventListener(MouseEvent.CLICK,clickHandle);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//点击创建<br />&nbsp;&nbsp;&nbsp;&nbsp;private function clickHandle(e:MouseEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var width:int = stage.stageWidth;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var height:int = stage.stageHeight;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var i:int = 0; i &lt;= 8; i ++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var x:int = centerX,y:int = centerY;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i == 4) continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i % 3 == 0) x = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(i % 3 == 2) x = width;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i &lt; 3) y = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(i &gt; 5) y = height;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;create(x,y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//创建一个<br />&nbsp;&nbsp;&nbsp;&nbsp;private function create(x:int,y:int):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var spr:Sprite = new Sprite;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var pic:Bitmap = new Pic;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pic.x = - pic.width / 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pic.y = - pic.height / 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spr.addChild(pic);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spr.x = centerX;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spr.y = centerY;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setAnimation(spr,x,y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addChild(spr);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//创建动画<br />&nbsp;&nbsp;&nbsp;&nbsp;private function setAnimation(spr:Sprite,x:int,y:int):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var tweenX:Tween = new Tween(spr,&quot;x&quot;,Bounce.easeOut,spr.x,x,50);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var tweenY:Tween = new Tween(spr,&quot;y&quot;,Bounce.easeOut,spr.y,y,50);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />}</div><p/>看到这儿，聪明的开发者不知道你有没有思考过呢？但下面来看看我分析的原因：<br />首先我们回顾一些知识点：<div class="quote"><div class="quote-title"> </div><div class="quote-content">Flash的自动内存回收分为两个方式，1是是否引用计数为0，2是是否存在Stage中。<br />我们现在来关心下第一个方式：<br />当一次强引用，该对象的引用计数加1；<br />当一次弱引用，该对象的引用计数不加；<br />当强引用侦听事件，引用计数加1，弱引用不加；</div></div><b><span style="color:red">问题：那么什么情况下是强引用，什么是弱引用呢？</span></b><br />当然这里有很多种情况，我这列举两条：<br />1、事件侦听时，addEventListener的第5个参数，为true表示弱引用侦听，为false反之（默认是false，即强引用侦听）；<br />2、在Function中的变量引用，虽然不能说他就是弱引用，但Function执行完毕后，该引用计数其实并没有加1<br />比如以下Code，就算调用了func，Sprite实例对象的引用计数还是只有1<div class="code">private var spr:Sprite = new Sprite;<br />private function func():void{<br />&nbsp;&nbsp;var a:Sprite = spr;<br />}</div>我们现在来看这段代码：<div class="code">//创建动画<br />private function setAnimation(spr:Sprite,x:int,y:int):void{<br />&nbsp;&nbsp;var tweenX:Tween = new Tween(spr,&quot;x&quot;,Bounce.easeOut,spr.x,x,50);<br />&nbsp;&nbsp;var tweenY:Tween = new Tween(spr,&quot;y&quot;,Bounce.easeOut,spr.y,y,50);<br />}</div>从这段代码不难理解，两个new Tween分别创建了两个Tween实例，并分别被tweenX和tweenY引用，但tweenX，tweenY它是局部引用，当这个Function执行完后，创建的两个Tween实例引用计数就是0，那么这时候如果启动了自动内存回收，理论上Tween类的两个实例都会被回收掉，结果也正是如此！所以上面问题出现了！<br /><b><span style="color:red">怎么解决呢？</span></b><br />首先，一个好好的动画在这儿它为什么会被自动回收掉呢？理论上动画的过程是不会被回收的！<br />我们来看看ADOBE官方Tween类中的一段代码：<div class="code">protected function startEnterFrame():void <br />{<br />&nbsp;&nbsp;if (isNaN(this._fps)) <br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;// original frame rate dependent way<br />&nbsp;&nbsp;&nbsp;&nbsp;_mc.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, false, 0, true);<br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;else <br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;// custom frame rate<br />&nbsp;&nbsp;&nbsp;&nbsp;var milliseconds:Number = 1000 / this._fps;<br />&nbsp;&nbsp;&nbsp;&nbsp;this._timer.delay = milliseconds;<br />&nbsp;&nbsp;this._timer.addEventListener(TimerEvent.TIMER, this.timerHandler, false, 0, true);<br />&nbsp;&nbsp;this._timer.start();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;this.isPlaying = true;<br />}</div>大家可以发现，addEventListener的第5个参数是使用的弱引用侦听，这也表示如果Tween类在外部没有引用计数，而内部也没引用计数，OK，内存回收时，它自然被干掉了！<br /><b><span style="color:red">那么如何解决呢？</span></b><br />1、将这个地方的侦听改成强引用侦听，这个问题这样的确解决了，但是Tween引用计数加1了，因此随后你也要记得将它移除，比如加个clear的方法，来移除事件侦听。否则会内存泄露！<br />2、将Tween实例在类中全局引用，比如push到某个类对象数组中，但同样的问题记得用完要删除！<br /><span style="color:blue">说了这么多，总感觉这个知识点还没说的很完整，如果谁没看懂，或者有问题问的，希望能跟帖询问，我会一一解答的！另外URLLoader等类也是存在同样的问题，如果使用弱引用侦听，而没有保存到类全局变量，如果在加载的过程中，突然碰到内存自动回收，那么这个对象也就不复存在，并且会报错，说数据不完整之类的</span><br /><span style="color:blue"><b>最后总结：<br />1、关于内存管理：一定是创建了就记得销毁，一定是侦听了就记得移除！不要太依靠弱引用来帮你做内存管理！<br />2、关于写代码习惯：有创建，就要有销毁！有addEventListener，就要有removeEventListener！<br />3、强弱引用是个好东西，但一定要弄清楚它的工作原理！当然任何知识点都要了解透彻！</b></span><p/>关于这个文章，大家也可以到天地会论坛中进行讨论：<a href="http://flash.9ria.com/thread-44077-1-1.html" title="http://flash.9ria.com/thread-44077-1-1.html" target="_blank">http://flash.9ria.com/thread-44077-1-1.html</a>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=531]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[AS3几个容易出错的地方]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=529]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Thu, 14 Jan 2010 10:54:50 +0800</pubDate> 
      <description><![CDATA[很久没写AS3的原创技术文章了，今天来一个总结性的文章。<p/><div class="quote"><div class="quote-title"> 引言</div><div class="quote-content">在写AS3代码的过程中，有些编译错误，或者运行错误，是很难检查。这儿我总结了一些曾经碰到过的问题。</div></div><b>1、TypeError: Error #1006: value 不是函数。</b><br />这是在运行时的报错，我们来看看是一段什么样的代码导致他报错的<br />大家先找找这段代码错在哪，为什么导致这个错误，然后在看看后面说的错误原因<div class="code">private function clickHandle(e:MouseEvent):void{<br />&nbsp;&nbsp;if(e.currentTarget is Sprite){<br />&nbsp;&nbsp;&nbsp;&nbsp;e.updateAfterEvent()<br />&nbsp;&nbsp;&nbsp;&nbsp;(e.currentTarget as Sprite).visible = false;<br />&nbsp;&nbsp;}<br />}</div>如果你是传统程序员，这个错误一般情况来说，你都不会犯的；如果你是AS2到AS3的，或者说你以前写asp等网页程序的，这个问题的引发几率就相对比较高了。<br />我们都知道AS3的代码，如果没有&quot;;&quot;的情况下也是可以编译、可以运行的。不过恰恰上述代码在e.updateAfterEvent()后因为没有&quot;;&quot;，导致他运行错误。因为这段代码在运行时，它是被当成了这样在运行<div class="code">e.updateAfterEvent()(e.currentTarget as Sprite).visible = false;</div>updateAfterEvent返回的是void类型，那么把他当成函数来调用，自然会报错 value 不是函数。<br /><span style="color:blue"><b>总结1：大家明白了吗？从上面这个例子可以看出，养成加&quot;;&quot;号的习惯还是非常重要的。</b></span><p/><b>2、TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::Event 转换为 MyEvent。</b><br />同样这也是一个运行错误，我们来看看是一段什么样的代码导致他报错的<br />大家也先找找他的错在哪<p/>首先先看一下这个MyEvent类<div class="code">package<br />{<br />&nbsp;&nbsp;import flash.events.Event;<p/>&nbsp;&nbsp;public class MyEvent extends Event<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;public static const MY:String = &quot;my&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(type, bubbles, cancelable);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />}</div>然后侦听这个事件，在得到它后转发到spr对象中<div class="code">addEventListener(MyEvent.MY,myHandle);<br />private function myHandle(e:MyEvent):void{<br />&nbsp;&nbsp;spr.dispatchEvent(e);<br />}</div>再就是，spr对象中侦听了这个事件<div class="code">spr.addEventListener(MyEvent.MY,myHandle);<br />private function myHandle(e:MyEvent):void{<br />&nbsp;&nbsp;trace(e);<br />}</div>最后在这个侦听的地方就报错了。<p/>在殿堂之路中，继承Event自定义事件举例中讲过这种问题的解决办法，但没有讲的很详细<br />很多新手在看高手的代码，都会看到自定义事件中都会重构clone这个方法，但是自己尝试后发现，不重构clone也不会出现什么问题，以至于有些人在写项目赶时间时，也不太喜欢100%模仿高手的写法，就会把重构clone这个看似很小，其实隐藏了秘密的东西给忽略掉。<br />在殿堂之路中有句原话：<div class="quote"><div class="quote-title"> 以下摘抄《殿堂之路》第300页原话</div><div class="quote-content">其中clone()方法最为重要，使用clone()方法可以返回当前事件对象的一个拷贝。这个clone()方法一般不需要我们手工调用，当我们将一个事件对象重复发送时，EventDispatcher类会自动调用clone()方法，产生这个事件的拷贝。</div></div>而上面的代码中就是在将MyEvent事件重复发送，好理解的说就是转发MyEvent事件，如果没有重构MyEvent事件，那么EventDispatcher在重复发送时，调用的clone是Event的clone方法，那么clone出来的事件自然就是Event类，而不是MyEvent，所以你在侦听时使用e:MyEvent类型接收时，自然就会报错无法将Event类转换成MyEvent类。<br /><span style="color:blue"><b>总结2：看书要仔细，看高手的代码一定要学习透彻，而不是拿来主义，或者是模仿主义！</b></span>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=529]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[用AIR学习写数据库底层（三）]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=526]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Wed, 06 Jan 2010 10:34:14 +0800</pubDate> 
      <description><![CDATA[<b>多尝试，多实践，才会学得快</b><br />现在发现，真的需要多实践多尝试才能学得快，呼吁大家多多实践啊，不管这个例子你会不会，只要以前没做过，都可以拿来练手<br />　<br />这次没啥Demo截图，做个笔记而已<br />我现在在做数据储存文件的关键字查询和模糊查询，遇到很多问题，主要是怎么去查询效率更高<br />让我发现了很多东西，真是不做不知道，一做全明了啊！<br />为什么标准的数据库语句中，不能用正则匹配，而最多是用like关键字，这次做了一次就知道了，如果要保证查询的执行效率高，那么根本无法达到使用正则的基本条件，当然不计执行效率问题，还是可以使用正则。<br />所以我现在想到的提高模糊查询执行效率最高的办法，正好也就是最多支持like关键字 <img src="http://www.xiaos8.com/styles/default/images/smilies/13.gif" border="0" alt="[表情13]" /> <br /><span style="color:red">小知识：对ByteArray读数据时最简单优化执行效率的办法就是尽可能少的去读ByteArray，尽量读一次就可以得到你要的信息，不要反复去创建ByteArray去写去读等等</span><br />　<br /><b>最后在呼吁一下所有想把AS3代码写好的，或者想更厉害的高人，碰到任何题目，最好多实践一下，只要是这个课题是以前你没接触过，或者有部分没接触过，都来实践一下，你会发现会学到很多东西的！</b>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=526]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[用AIR学习写数据库底层（二）]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=525]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Mon, 04 Jan 2010 17:59:11 +0800</pubDate> 
      <description><![CDATA[<b>多尝试，多实践，才会学得快</b><br />事隔一段时间了，今天对上次研究数据储存文件，今天加了个简单查询功能<br /><span style="color:red">注意：下面这些数据的显示，都是依据ByteArray中的字节对象进行操作的</span><br />　<br /><b>1、先是显示数据储存文件</b><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201001/04_180100_1.png" alt="http://www.xiaos8.com/uploads/201001/04_180100_1.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201001/04_180100_1.png" target="_blank">http://www.xiaos8.com/uploads/201001/04_180100_1.png</a></div></td></tr></table><br /><b>2、经过下面的代码，获取一下我要的内容</b><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201001/04_180104_2.png" alt="http://www.xiaos8.com/uploads/201001/04_180104_2.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201001/04_180104_2.png" target="_blank">http://www.xiaos8.com/uploads/201001/04_180104_2.png</a></div></td></tr></table><br /><b>3、于是得到下面数据，执行效率是1毫秒</b><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201001/04_180108_3.png" alt="http://www.xiaos8.com/uploads/201001/04_180108_3.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201001/04_180108_3.png" target="_blank">http://www.xiaos8.com/uploads/201001/04_180108_3.png</a></div></td></tr></table><br /><b>4、当然这个执行效率看上去挺不错，其实是初始化时，对数据储存文件的数据进行过缓存处理</b><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201001/04_180112_4.png" alt="http://www.xiaos8.com/uploads/201001/04_180112_4.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201001/04_180112_4.png" target="_blank">http://www.xiaos8.com/uploads/201001/04_180112_4.png</a></div></td></tr></table><br /><b>5、如果不进行缓存处理，OK，依然是可以工作的，不过花费的时间就稍微长了点</b><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/201001/04_180116_5.png" alt="http://www.xiaos8.com/uploads/201001/04_180116_5.png" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/201001/04_180116_5.png" target="_blank">http://www.xiaos8.com/uploads/201001/04_180116_5.png</a></div></td></tr></table>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=525]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[AIR小工具SimpleDay（开源代码）]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=520]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Fri, 18 Dec 2009 21:37:02 +0800</pubDate> 
      <description><![CDATA[回想一下，貌似我还没开源过什么Flex和AIR相关的源码，这次来开源早段时间写的<a href="http://www.xiaos8.com/article.asp?id=515" title="http://www.xiaos8.com/article.asp?id=515" target="_blank">SimpleDay</a>的代码<br />同样内附很多注释，因此也不做过多讲解了~<br />代码中使用到的<a href="http://www.xiaos8.com/article.asp?id=497" title="http://www.xiaos8.com/article.asp?id=497" target="_blank">MenuProxy</a>相关类是FireAS开源框架中的类，并且这儿附有讲解<br />在svn上，该类中有非常详尽的具体注释<br />　<br />MainWindow.mxml：主窗口类<div class="code">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;mx:Window xmlns:mx=&quot;http&#58;//www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot; creationComplete=&quot;init()&quot;<br />&nbsp;&nbsp;type=&quot;utility&quot; systemChrome=&quot;none&quot; showFlexChrome=&quot;false&quot; transparent=&quot;true&quot;<br />&nbsp;&nbsp;width=&quot;{main.width}&quot; height=&quot;{main.height}&quot; maximizable=&quot;false&quot; minimizable=&quot;false&quot; resizable=&quot;false&quot;<br />&nbsp;&nbsp;verticalScrollPolicy=&quot;off&quot; horizontalScrollPolicy=&quot;off&quot; xmlns:menu=&quot;fireas.air.menu.*&quot;<br />&nbsp;&nbsp;closing=&quot;checkClose(event)&quot;&gt;<br />&nbsp;&nbsp;&lt;mx:Script&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;![CDATA[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import flash.utils.getTimer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import fireas.air.menu.MenuProxyEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import fireas.air.menu.MenuProxy;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import mx.events.CollectionEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import mx.core.IUITextField;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import mx.collections.ArrayCollection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Embed (source=&quot;../source/16.png&quot;)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private var ICON:Class;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Bindable]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private var recordList:ArrayCollection = new ArrayCollection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private var tray:SystemTrayIcon;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function init():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tray = NativeApplication.nativeApplication.icon as SystemTrayIcon;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tray.addEventListener(ScreenMouseEvent.CLICK,showThis);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tray.tooltip = &quot;点击显示SimpleDay主窗口&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tray.bitmaps = [new ICON];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alwaysInFront = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setMainFieldFocus();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getData();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordList.addEventListener(CollectionEvent.COLLECTION_CHANGE,function():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateRecord();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage.addEventListener(KeyboardEvent.KEY_UP,function(event:KeyboardEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(event.keyCode == Keyboard.ENTER) addRecord();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示窗口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function showThis(e:ScreenMouseEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visible = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nativeWindow.activate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function getData():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var file:File = new File(File.applicationDirectory.resolvePath(&quot;data.sdb&quot;).nativePath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(file.exists){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileBytes:ByteArray = new ByteArray;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var source:Array = recordList.source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var stream:FileStream = new FileStream;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.open(file,FileMode.READ);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.readBytes(fileBytes);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileBytes.position = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(fileBytes.bytesAvailable){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source.push({label:readByteByLength(fileBytes)});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordList.source = source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateRecord();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文本焦点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function setMainFieldFocus(o:Object = null):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainField.setFocus();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//更新list的高度和布局<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function updateRecord():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var length:int = recordList.source.length;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordComp.height = length * recordComp.rowHeight + 10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordComp.includeInLayout = length &gt; 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightMenu.getForID(&quot;close&quot;).enabled = !Boolean(length)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//弹出右键菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function popupRightMenu(event:MouseEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var target:IUITextField = event.target as IUITextField;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(target) if(target.selectable) return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightMenu.menu.display(stage,event.stageX,event.stageY)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检查是否能关闭<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function checkClose(event:Event):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(recordList.source.length &gt; 0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.preventDefault();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//添加一个记录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function addRecord():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var text:String = mainField.text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(text){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var source:Array = recordList.source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source.push({label:text});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordList.source = source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainField.text = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//删除一个记录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function deleteRecord(index:int):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var source:Array = recordList.source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source.splice(index,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordList.source = source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordList.refresh();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存记录到本地<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function saveData():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var source:Array = recordList.source;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileBytes:ByteArray = new ByteArray;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var i:int = 0; i &lt; source.length; i ++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var bytes:ByteArray = getByteByString(source[i].label);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileBytes.writeBytes(bytes);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var file:File = new File(File.applicationDirectory.resolvePath(&quot;data.sdb&quot;).nativePath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var stream:FileStream = new FileStream;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.open(file,FileMode.WRITE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.writeBytes(fileBytes);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new HTMLLoader().window.alert(&quot;保存成功！&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按长度写字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function getByteByString(text:String):ByteArray{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var result:ByteArray = new ByteArray;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.writeShort(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.writeUTFBytes(text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.position = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.writeShort(result.length - 2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按长度读字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function readByteByLength(bytes:ByteArray):String{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var length:int = bytes.readUnsignedShort();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return bytes.readUTFBytes(length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//处理右键菜单<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function rightMenuSelectHandle(e:MenuProxyEvent):void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(e.mark){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &quot;lock&quot;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var b:Boolean = e.menu.checked;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.menu.checked = !b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordComp.mouseEnabled =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordComp.mouseChildren = b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &quot;close&quot;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NativeApplication.nativeApplication.exit();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &quot;save&quot;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveData();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &quot;hide&quot;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visible = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;<br />&nbsp;&nbsp;&lt;/mx:Script&gt;<br />&nbsp;&nbsp;&lt;menu:MenuProxy id=&quot;rightMenu&quot; mark=&quot;rightMenuSelectHandle(event)&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;menu:menuData&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:XML xmlns=&quot;&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;root&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item label=&quot;锁定日志&quot; select=&quot;lock&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item label=&quot;隐藏窗口&quot; select=&quot;hide&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item label=&quot;保存&quot; select=&quot;save&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item id=&quot;close&quot; label=&quot;关闭&quot; select=&quot;close&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/root&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/mx:XML&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/menu:menuData&gt;<br />&nbsp;&nbsp;&lt;/menu:MenuProxy&gt;<br />&nbsp;&nbsp;&lt;mx:VBox id=&quot;main&quot; verticalGap=&quot;0&quot; mouseDown=&quot;nativeWindow.startMove()&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;rightClick=&quot;popupRightMenu(event)&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:Panel width=&quot;300&quot; height=&quot;50&quot; borderColor=&quot;0&quot; borderAlpha=&quot;0.7&quot; cornerRadius=&quot;15&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headerHeight=&quot;10&quot; dropShadowEnabled=&quot;false&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:HBox width=&quot;100%&quot; height=&quot;100%&quot; horizontalGap=&quot;0&quot; borderStyle=&quot;solid&quot; borderColor=&quot;0x909090&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;borderThickness=&quot;2&quot; mouseDown=&quot;event.stopPropagation()&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:TextInput id=&quot;mainField&quot; width=&quot;100%&quot; height=&quot;100%&quot; fontSize=&quot;18&quot; fontWeight=&quot;bold&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;focusThickness=&quot;0&quot; focusOut=&quot;setMainFieldFocus()&quot; borderStyle=&quot;solid&quot; borderThickness=&quot;0&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:Canvas backgroundColor=&quot;0xcfdfff&quot; height=&quot;100%&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:LinkButton icon=&quot;@Embed(&#39;../source/add.png&#39;)&quot; height=&quot;100%&quot; cornerRadius=&quot;0&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;click=&quot;addRecord()&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/mx:Canvas&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/mx:HBox&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/mx:Panel&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:List id=&quot;recordComp&quot; width=&quot;100%&quot; dataProvider=&quot;{recordList}&quot; borderThickness=&quot;0&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backgroundColor=&quot;0&quot; color=&quot;0xffffff&quot; backgroundAlpha=&quot;0.7&quot; paddingLeft=&quot;10&quot; paddingRight=&quot;10&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change=&quot;recordComp.selectedIndex = -1&quot; itemClick=&quot;deleteRecord(event.rowIndex)&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragEnabled=&quot;true&quot; dragMoveEnabled=&quot;true&quot; dropEnabled=&quot;true&quot; mouseDown=&quot;event.stopPropagation()&quot;/&gt;<br />&nbsp;&nbsp;&lt;/mx:VBox&gt;<br />&lt;/mx:Window&gt;</div>主文件：（入口类）<div class="code">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;mx:WindowedApplication xmlns:mx=&quot;http&#58;//www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot;<br />&nbsp;&nbsp;applicationComplete=&quot;init()&quot;&gt;<br />&nbsp;&nbsp;&lt;mx:Style&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;Window{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fontFamily:&quot;宋体&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fontSize:12;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&lt;/mx:Style&gt;<br />&nbsp;&nbsp;&lt;mx:Script&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;![CDATA[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import code.MainWindow;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private function init():void{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nativeApplication.autoExit = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new MainWindow().open();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;]]&gt;<br />&nbsp;&nbsp;&lt;/mx:Script&gt;<br />&lt;/mx:WindowedApplication&gt;</div>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=520]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[AIR小工具——SimpleDay]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=515]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Wed, 09 Dec 2009 01:58:09 +0800</pubDate> 
      <description><![CDATA[<a href="http://www.xiaos8.com/uploads/air/SimpleDay.air" title="http://www.xiaos8.com/uploads/air/SimpleDay.air" target="_blank">http://www.xiaos8.com/uploads/air/SimpleDay.air</a><br />刚做好的小工具，先放上去给大家下载用用，有什么问题或建议请跟帖说<br />　<br />小工具简介：<br />记录一些日常日志，比如工作的时候，这个时候有人找你做什么事，以防万一忘记，那么你可以使用该工具记录一下，事后完成了，再将记录删除，这样就不会健忘了<ul class="ubb-list" ><li>点一下每个选项即删除该记录</li><li>文本框输入时可以用回车添加，也可以点击&quot;+&quot;号添加</li><li>鼠标右击，可以弹出一个建议菜单</li><li>当隐藏窗口后，点击托盘图标主窗口又将显示</li><li>如果在关闭工具前，还有记录的事情没做完，将无法关闭工具，这样一来是提醒你记录的事情还没做完，二来强制做完才能关闭，当然你直接消除记录，那我也没办法</li><li>…………</li></ul>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=515]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[技术文章集合贴]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=513]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Mon, 07 Dec 2009 09:38:02 +0800</pubDate> 
      <description><![CDATA[我在9RIA天地会论坛上发了一封技术文章集合贴<br /><a href="http://flash.9ria.com/thread-40746-1-1.html" title="http://flash.9ria.com/thread-40746-1-1.html" target="_blank">http://flash.9ria.com/thread-40746-1-1.html</a><br />不过这并不是全部，所以更多更好的文章，还是希望大家在我博客慢慢淘吧。。。<br />这个集合贴，我自己也淘了1-2个多小时额 - -]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=513]]></wfw:commentRss>
    </item>
      
    <item>
      <title><![CDATA[AIR 2 中部分API查看器]]></title> 
      <link><![CDATA[http://www.xiaos8.com/article.asp?id=510]]></link> 
      <category><![CDATA[ActionScript 3.0]]></category> 
      <author><![CDATA[sunbright <null@null.com>]]></author> 
      <pubDate>Thu, 03 Dec 2009 15:18:43 +0800</pubDate> 
      <description><![CDATA[刚做的小工具，本来只是自己用来了解一下AIR2有哪些API罢了，后来想想就稍微改了一下，分享上来给大家使用吧~~<br /><a href="http://www.xiaos8.com/uploads/air/AIR2Class.swf" title="http://www.xiaos8.com/uploads/air/AIR2Class.swf" target="_blank">点击在线观看AIR2的API查看器</a><b>【打开后需要加载一个较大的类配置文件，因此请等待一下】</b><br /><a href="http://www.xiaos8.com/uploads/air/AIR2Class.zip" title="http://www.xiaos8.com/uploads/air/AIR2Class.zip" target="_blank">下载下来看效果更佳——点击下载</a><br />下载的版本是exe的文件，即使没有flash 9以上播放器，也能直接观看。<br />　<br />如果您对本工具有什么疑问，或者建议，都可以直接跟帖询问，非常希望能听到您的评价。<br />　<br />为了让大家知道这东西怎么用，配了几张图片给大家看，如果还是不会用，可以跟帖询问，我会用最通俗的语句教大家的<br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/200912/03_161456_1.jpg" alt="http://www.xiaos8.com/uploads/200912/03_161456_1.jpg" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/200912/03_161456_1.jpg" target="_blank">http://www.xiaos8.com/uploads/200912/03_161456_1.jpg</a></div></td></tr></table><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/200912/03_161504_2.jpg" alt="http://www.xiaos8.com/uploads/200912/03_161504_2.jpg" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/200912/03_161504_2.jpg" target="_blank">http://www.xiaos8.com/uploads/200912/03_161504_2.jpg</a></div></td></tr></table><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/200912/03_161511_3.jpg" alt="http://www.xiaos8.com/uploads/200912/03_161511_3.jpg" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/200912/03_161511_3.jpg" target="_blank">http://www.xiaos8.com/uploads/200912/03_161511_3.jpg</a></div></td></tr></table><br /><table style="margin:10px 0px 10px 0px;padding:10px;border:2px solid #cccccc;background-color:#ffffff"><tr><td align="center"><img style="padding-bottom:5px" src="http://www.xiaos8.com/uploads/200912/03_161519_4.jpg" alt="http://www.xiaos8.com/uploads/200912/03_161519_4.jpg" /><br><div style="background-color:#F0F8FF">图片地址：<a href="http://www.xiaos8.com/uploads/200912/03_161519_4.jpg" target="_blank">http://www.xiaos8.com/uploads/200912/03_161519_4.jpg</a></div></td></tr></table>]]></description>
      <wfw:commentRss><![CDATA[http://www.xiaos8.com/feed.asp?q=comment&id=510]]></wfw:commentRss>
    </item>
      
  </channel>
</rss>
