<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[oncebet's 记忆碎片]]></title> 
<link>http://www.lionar.com/index.php</link> 
<description><![CDATA[我的记忆碎片]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[oncebet's 记忆碎片]]></copyright>
<item>
<link>http://www.lionar.com/read.php?151</link>
<title><![CDATA[终于赶在08年把抢车位发布了。]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Wed, 31 Dec 2008 11:03:21 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?151</guid> 
<description>
<![CDATA[ 
	<a href="http://www.lionar.com/attachment.php?fid=31" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=31" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?150</link>
<title><![CDATA[08年最后一天，回顾以下吧。]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Wed, 31 Dec 2008 09:08:58 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?150</guid> 
<description>
<![CDATA[ 
	今天好像特别的不太平。发生在自己身上的事情也特别多。8月份以前的生活跟前面的几年一模一样，上班，下班，玩游戏，和同学呆一起玩。8月应该是个转折点。同学去了上海，这边也没什么朋友了。工作，从tx的创新中心转到了qzone 。明显这边也忙了很多，压力也大了很多。还好的是公司给了转正的机会。<br/>可是。。。。。。。。。。。。。。。<br/>突然就生病了。转正的事情也就泡汤了。回家休息了3个月。在家的感觉很好，一切都那么的熟悉和亲切。而在深圳，始终感觉是外来人口。虽然来了2年多了，好像还很陌生。<br/>塞翁失马焉知非福。生病让我和认识了2年的女孩走到了一起。就是现在的女朋友。用她的话来形容她“试问，从那里还能找到这么好的老婆？”<br/>病痛，爱情，工作。。。都变化好大。<br/>09年希望身体可以快快好起来。努力工作，打起精神。
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?149</link>
<title><![CDATA[这是不是bug ？]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Tue, 30 Dec 2008 03:56:46 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?149</guid> 
<description>
<![CDATA[ 
	在论坛看到<br/><a href="attachment.php?fid=30">点击这里下载文件</a>&nbsp;&nbsp;<br/>最后一帧元件trace不出来。但是把第一帧的东西随便写个名字就可以trace出来。<br/>或者 第一帧和最后一帧 用不同的元件就可以trace出来。<br/>why？<br/>不知道原因， 以后做东西的时候还是要注意。
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?148</link>
<title><![CDATA[qq抢车位马上就上线了。]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Mon, 29 Dec 2008 09:29:02 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?148</guid> 
<description>
<![CDATA[ 
	最近一直在忙这个。车是超级的华丽。贴个靓图。<br/><br/><a href="http://www.lionar.com/attachment.php?fid=25" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=25" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=28" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=28" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=29" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=29" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?147</link>
<title><![CDATA[UserAgent的历史变迁[转]]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[分享Share]]></category>
<pubDate>Thu, 25 Dec 2008 02:40:27 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?147</guid> 
<description>
<![CDATA[ 
	Google推出的Chrome让大家热议纷纷，只有专业用户才会注意到用Chrome访问网页时发出的“Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13”UserAgent字符串，貌似天书，它到底是怎么回事儿代表什么呢？我们来看看吧.<br/><br/>最早的时候有一个浏览器叫NCSA Mosaic，把自己标称为NCSA_Mosaic/2.0 (Windows 3.1)，它支持文字显示的同时还支持图片，于是Web开始好玩起来。<br/><br/>然后出现了一个新的网页浏览器，“Mozilla”，其实就是“Mosaic终结者”的意思，这搞的Mosaic很不爽，(毕竟Mosaic出道早，江湖老)，新浏览器最后正式公布的名称是Netscape，它把自己标称为Mozilla/1.0 (Win3.1)，更好玩了。Netscape支持框架显示，后来框架在大家中间流行起来了，但Mosaic不支持框架啊，于是伟大的“用户代理人探测”技术出现了，如果是“Mozilla”，那就发给支持框架的页面，至于其他的浏览器，则发给不含框架的页面。<br/><br/>Netscape想逗Microsoft玩儿，把Windows叫做“几乎不曾做过调试的设备驱动器”，后者很恼火。Microsoft于是推出了自己的网页浏览器，叫做Internet Explorer，希望它能成为“Netscape终结者”。Internet Explorer也支持框架，但它不是Mozilla啊，所以没人给它发送带有框架的页面。Microsoft慢慢烦躁起来，不再寄希望于网站管理员逐渐认识IE并给它发框架，而是宣称自己是“兼容Mozilla”的，开始模仿Netscape，把自己标称为Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)，这样Internet Explorer也能收到框架了，整个Microsoft狂喜，但网站管理员开始有点被搞糊涂了。<br/><br/>Microsoft把IE和Windows一起卖，并且把产品也弄得比Netscape更好了，拉开了第一场浏览器之战。结果和大家知道的一样，Netscape被干掉了，Microsoft大胜、大喜。但是后来Netscape以Mozilla的新名称重生了，构造了Gecko，标称其为Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826，Gecko属于渲染引擎，表现优异。Mozilla开发了Firefox，标称为Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0，并且Firefox表现也非常优秀。Gecko扩张迅速，一些浏览器使用了它的代码并标称为Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1 ，这是一个，还有Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0，另一个，它们都伪装成Mozilla，同时也都是基于Gecko支持的。<br/><br/>Gecko表现优秀，IE则很差劲，于是身份甄别再次发生，输送给Gecko的是设计良好的网页代码，其他浏览器就没有这个待遇了。Linux的跟随者很伤心，因为他们创建了基于KHTML引擎支持的Konqueror，但却不会被输送好代码，虽然他们自己认为KHTML和Gecko一样优秀，于是Konquerer开始伪装自己“像Gecko”那样以得到好的网页，并标称自己为Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)，这个世界更让人困惑了.<br/><br/>后来出现了Opera这样的主儿，宣称“允许用户自己决定让浏览器装成谁”，它的菜单中提供了Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51， Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51，Opera/9.51 (Windows NT 5.1; U; en)供大家来选择，选谁是谁。<br/><br/>Apple开发了Safari，使用了KHTML，同时也增加了很多新特性，后来干脆一锅煮，另起炉灶叫了WebKit，但是它有希望能够得到那些为KHTML编写的网页，于是Safari标称自己为Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5，这个世界更混乱了。<br/><br/>Microsoft越来越担心Firefox的发展，重新启动了Internet Explorer的开发，标称自己为Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ，可以很好的渲染代码，但那要看网站管理员是否指示它这么做。<br/><br/>Google也开发了自己的浏览器Chrome，使用了Webkit，有点像Safari，希望能得到为Safari编写的网页，于是决定装成Safari。这样啊，Chrome使用了WebKit渲染引擎，想装成Safari，而WebKit呢又伪装自己是KHTML，KHTML呢又是伪装成Gecko的，同时所有的浏览器又都宣称自己是Mozilla，于是，Chrome宣称自己是Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13,，UserAgent字符串彻底混乱了，也几乎不再发挥任何作用，每个人都宣称自己是别人，混乱充斥人间啊。<br/><br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?146</link>
<title><![CDATA[网上搜索的 as3 一些注意事项]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Sun, 21 Dec 2008 09:50:14 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?146</guid> 
<description>
<![CDATA[ 
	1. 动态改变帧频：<br/>// change frame rate to 12 fps:<br/>stage.frameRate = 12;<br/><br/>2. Abstract Classes<br/><br/>as3不支持抽象类，但有几个内置的抽象类<br/><br/>DisplayObject<br/>InteractiveObject<br/>DisplayObjectContainer<br/>Graphics<br/><br/>as3中这意味着不能实例化这些类，也不能继承他们 ,以下为错误操作：<br/>// 错误1<br/><br/>var myObj:InteractiveObject = new InteractiveObject(); // ERROR<br/>// 错误2<br/><br/>package &#123;<br/>import flash.display.DisplayObject;<br/>public class MyDisplay extends DisplayObject&#123;<br/>public function MyDisplay ()&#123;<br/>// ERROR<br/>&#125;<br/>&#125;<br/>&#125;<br/><br/>3. Deep Object Copies with ByteArray<br/><br/>as3中很容易使用(flash.utils.ByteArray)类来进行对象的深拷贝，深拷贝不只拷贝引用，而是拷贝整个相关对象，<br/><br/>例如一个array里包含一个object引用，这个object也将被拷贝<br/><br/>注意：这个方法通常用来拷贝一般的object<br/><br/>拷贝函数：<br/>function clone(source:Object):* &#123;<br/>var copier:ByteArray = new ByteArray();<br/>copier.writeObject(source);<br/>copier.position = 0;<br/>return(copier.readObject());<br/>&#125;<br/><br/>使用方法：<br/>newObjectCopy = clone(originalObject);<br/><br/>4. Determine Instance Class or Superclass<br/><br/>as3中可以很容易的获取某个实例所属的类和父类的类名，使用这两个方法<br/><br/>getQualifiedClassName (flash.utils.getQualifiedClassName).<br/>getQualifiedSuperclassName (flash.utils.getQualifiedSuperclassName)<br/>var sprite:Sprite = new Sprite();<br/>trace(getQualifiedClassName(sprite)); // "flash.display::Sprite<br/>trace(getQualifiedSuperclassName(sprite)); // "flash.display::DisplayObjectContainer"<br/><br/>你甚至可以由字符串获得类的引用，使用这个方法<br/><br/>getDefinitionByName (flash.utils.getDefinitionByName).<br/>getDefinitionByName("flash.display::Sprite")); // [class Sprite]<br/><br/>5. Multiple Arguments in trace()<br/><br/>as3<br/>trace(value1, value2, value3);<br/>as1,as2<br/>trace([value1, value2, value3]);<br/><br/>6. Loading Text and XML with URLLoader<br/>var loader:URLLoader;<br/>// ...<br/>loader = new URLLoader();<br/>loader.addEventListener(Event.COMPLETE, xmlLoaded);<br/><br/>var request:URLRequest = new URLRequest("file.xml");<br/>loader.load(request);<br/>//...<br/>function xmlLoaded(event:Event):void &#123;<br/>var myXML:XML = new XML(loader.data);<br/>//...<br/>&#125;<br/><br/>7.Get Sound Spectrum Information<br/><br/><br/>(flash.media.SoundMixer)类的computeSpectrum静态方法可以把正在播放的声谱信息转成ByteArray，由此你可以想到办法把声谱可视化显示出来<br/>// play sound...<br/>var spectrumInfo:ByteArray = new ByteArray();<br/>SoundMixer.computeSpectrum(spectrumInfo);<br/>// spectrumInfo is now a byte array with sound spectrum info<br/><br/>具体可视化的方法可以看swfdong那里的教程 ：）<br/><br/>8. Garbage Collection: Reference Counting & Mark and Sweep<br/><br/>垃圾回收机制包含两个关键：<br/><br/>（1）Reference Counting （引用数） ：<br/><br/>引用数就是在内存中引用同一个object的变量多少，每增加一个变量引用该object，引用数就+1<br/>var a:Object = new Object(); // new Object in memory given reference count of 1<br/>var b:Object = a; // Object now has reference count of 2<br/>无论什么时候，当没有变量引用该object的时候，垃圾回收就会把他们回收了<br/>delete a; // Object has reference count of 1<br/>delete b; // Object has reference count of 0, removed from memory<br/>注意delete只能删除非成员变量，而且删除的是引用该object的变量而不是将object从内存中删除，那是垃圾回收器要做的事<br/>看下边这种情况：<br/>var a:Object = new Object(); // reference(a) count 1<br/>var b:Object = new Object(); // reference(b) count 1<br/>a.b = b; // reference(b) count 2<br/>b.a = a; // reference(a) count 2<br/>delete a; // reference(a) count 1<br/>delete b; // reference(b) count 1<br/>虽然a和b变量被删除了，而且我们再也不能用程序访问到他们了，但他们仍然存留在内存中~这种情况下垃圾回首器就没有办法了吗？错！这是记号清理要做的！<br/><br/>（2）Mark and Sweep （记号清理）：<br/><br/>Mark and Sweep简单来说就是一种扫描机制，如下图，从root开始，扫到对象就mark一下，并扫描这个对象，等待全扫描完了，没有mark的自然是没有用的了，就会被从内存中删掉了.<br/>[root] <- scan...<br/>[objectRef (marked)] <- scan...<br/>[objectRef (marked)] <- scan...<br/>[objectRef (marked)] <- scan...<br/>[objectRef (marked)] <- scan...<br/>[objectRef (marked)] <- scan...<br/>...<br/>[delete all objects not marked]<br/>当然这种扫描是昂贵的，需要很长时间才能发生一次，所以不要指望他了，编程的时候多注意引用数就可以了<br/><br/>9. Weak References<br/><br/>使用弱引用来引用对象，不会被垃圾回收器视为有效的引用数。这样可以帮助垃圾回收器的工作<br/>所以使用弱引用这是一种比较好的编程习惯，使你不会在不经意间错误的引用到了某个object导致这个object不能被从内存中卸载~~~<br/>但不是哪里都可以使用弱引用的，as3中有两处可以使用：<br/>（1）在Directionary类的构造函数中传入true<br/>var dict:Dictionary = new Dictionary(true); // use weak references as keys<br/>var obj:Object = new Object();<br/>dict[obj] = true;<br/>delete obj; // 虽然dict中有引用到obj，但并不是一个有效引用，所以obj仍然会被垃圾回收<br/><br/>（2）在EventDispatcher的addEventListener 的第5个参数指定true<br/>// addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void<br/>addEventListener(MouseEvent.CLICK, clickHandler, false, 0 true); // use weak references<br/><br/>10. MXMLC: SWF Metadata Tag<br/><br/>如果你用mxmlc编译swf的话，可以使用swf metadata tag来指定swf的一些属性<br/><br/>支持以下属性：<br/><br/>width<br/>height<br/>frameRate<br/>backgroundColor<br/><br/>例子：<br/>package &#123;<br/>[SWF(width="500", height="450", frameRate="24", backgroundColor="#FFFFFF")]<br/>public class MyApp extends Sprite &#123;<br/><br/>&#125;<br/>&#125;<br/><br/>11.TextField.appendText()<br/><br/>(flash.text.TextField)类多了一个appendText()方法<br/><br/>var my_tf = new TextField();<br/>my_tf.text = "Hello";<br/>my_tf.appendText(" world!"); // my_tf.text == "Hello world!"<br/><br/>相当于以前的my_tf.text+=" world!" ,只是效率提高了<br/><br/>12. Access to stage and root<br/><br/>* 在as3中，当swf被loaded到player中时 stage object 是最顶端的容器，所有其他东西都在它里边，包括root在内<br/><br/>* 一个application中只有一个stage，却可以有若干个 root ，比如有外部内容被Loader类加载近来的时候<br/><br/>* 所有的DisplayObject (flash.display.DisplayObject)都有 stage 和 root 属性，但只有当他们被直接或间接的加入到display list 中的时候才有值，否则他们都为 null 。<br/><br/>* stage 属性 如果有值，那么他一直指向 stage 对象 ， root 却不同 ，具体哪不同，下边懒得翻引用原话 - -b<br/><br/>引用<br/>For the stage, root always references the stage<br/>For the main timeline of the SWF and all display objects within it, root references the main timeline<br/>If an object is added directly to the stage from any timeline, the root property for it and its children references the stage<br/>For display objects in loaded SWF files, root references the main timeline of that SWF file<br/>For loaded bitmap images, root references the Bitmap instance of the image loaded<br/>Loader objects used to load external SWFs and images follow the rules of all other display objects within the SWF it is being used<br/>* 在as1 ,as 2中所有类都是在时间轴上创建的，这使的所有东东都能访问_root ，在as3中就不同了，如果你不是DisplayObject的话，访问root(或stage)会很困难，你需要一些技巧<br/><br/>技巧1： 写一个TopLevel类，让Document类继承它，通过TopLevel类访问stage<br/>package &#123;<br/><br/>import flash.display.DisplayObject;<br/>import flash.display.MovieClip;<br/>import flash.display.Stage;<br/><br/>public class TopLevel extends MovieClip &#123;<br/><br/>public static var stage:Stage;<br/>public static var root:DisplayObject;<br/><br/>public function TopLevel() &#123;<br/>TopLevel.stage = this.stage;<br/>TopLevel.root = this;<br/>&#125;<br/>&#125;<br/>&#125;<br/>package &#123;<br/><br/>public class MyDocumentClass extends TopLevel &#123;<br/><br/>public function MyDocumentClass() &#123;<br/>// code<br/>&#125;<br/>&#125;<br/>&#125;<br/>package &#123;<br/><br/>public class RandomClass &#123;<br/><br/>public function RandomClass() &#123;<br/>trace(TopLevel.stage); // [object Stage]<br/>&#125;<br/>&#125;<br/>&#125;<br/><br/>当然这很不oo也很不雅观~~~如果别人的Document类没继承TopLevel类就会有问题出现<br/><br/>技巧2 ： 传递引用<br/><br/>类似这样通过构造函数将stage传进去<br/>package &#123;<br/><br/>import flash.display.Stage;<br/><br/>public class CustomObject &#123;<br/><br/>private var stage:Stage;<br/><br/>public function CustomObject(stageRef:Stage) &#123;<br/><br/>// stage access through<br/>// constructor argument<br/>stage = stageRef;<br/>&#125;<br/>&#125;<br/>&#125;<br/><br/>作者给了一个 StageDetection 类<br/>地址：http://www.senocular.com/flash/actionscript.php?file=ActionScript_3.0/com/senocular/events/StageDetection.as<br/><br/>好象是用于检测某个display object 的 stage 或 root 属性是否存在，然后才能把stage的引用传给非display object<br/><br/>[exclaim] （注：作者可能用的老版本flex？貌似现在的版本只要监听DisplayObject 的 addedToStage 或removedFromStage 事件就可以检查是stage和root的存在，不需要这个自定义的StageDetection 类吧...还请明人指点）<br/><br/>13. No More Color Class; Use ColorTransform<br/><br/>as3 中彻底没了flash8就不推荐使用了的 Color类 改用 ColorTransform类<br/><br/>注意ColorTransform 的rgb属性已经改名为color<br/>// creates a red square<br/>var square:Shape = new Shape();<br/>square.graphics.beginFill(0x000000);<br/>square.graphics.drawRect(0, 0, 100, 100);<br/><br/>var colorTransform:ColorTransform = square.transform.colorTransform;<br/>colorTransform.color = 0xFF0000;<br/>square.transform.colorTransform = colorTransform;<br/><br/>addChild(square);<br/><br/>14. Array.indexOf (Array.lastIndexOf())<br/><br/>Array类多了两个方法 indexOf 和 lastIndexOf<br/>AS3 function indexOf(searchElement:*, fromIndex:int = 0):int<br/>AS3 function lastIndexOf(searchElement:*, fromIndex:int = 0x7fffffff):int<br/><br/>跟String类的同名方法差不多 ，返回指定元素位置，如果没有返回 -1<br/>var sprite:Sprite = new Sprite();<br/>var object:Object = new Object();<br/>var boolean:Boolean = true;<br/>var number:Number = 10;<br/><br/>var array:Array = new Array(sprite, object, number);<br/>trace(array.indexOf(sprite)); // 0<br/>trace(array.indexOf(number)); // 2<br/>trace(array.indexOf(boolean)); // -1<br/><br/>15. System.totalMemory<br/><br/>System 类 (flash.system.System) 有一个新属性叫做 totalMemory，返回当前flash player占用的内存<br/>var o:Object = new Object();<br/>trace(System.totalMemory); // 4960256<br/>var o:MovieClip = new MovieClip();<br/>trace(System.totalMemory); // 4964352<br/><br/>16. Closing Net Connections<br/><br/>as1,2时候，当loading开始后，你就不能关闭这个连接了，在as3世界里，即使loading开始了，你也可以停止它<br/>var loader:Loader = new Loader();<br/>var request:URLRequest = new URLRequest("image.jpg");<br/>loader.load(request);<br/>addChild(loader);<br/><br/>// 如果3秒钟还没loading完，就关闭连接<br/>var abortID:uint = setTimeout(abortLoader, 3000);<br/><br/>// abort the abort when loaded<br/>loader.contentLoaderInfo.addEventListener(Event.COMPLETE, abortAbort);<br/><br/>function abortLoader()&#123;<br/>try &#123;<br/>loader.close();<br/>&#125;catch(error:Error) &#123;&#125; //注意这里有可能抛出IOError<br/>&#125;<br/>function abortAbort(event:Event)&#123;<br/>clearTimeout(abortID);<br/>&#125;<br/><br/>17. AVM2 (AS3) to AVM1 (AS2/AS1) Communication via LocalConnection<br/><br/>由于as3与as1,2虚拟机的不同导致as1,2 与as3不能直接沟通，如果需要的话必须要间接的使用<br/><br/>LocalConnection AS2<br/>http://livedocs.macromedia.com/flash/8/main/00002338.html<br/><br/>LocalConnection AS3 (flash.net.LocalConnection)<br/>http://livedocs.macromedia.com/flex/2/langref/flash/net/LocalConnection.html<br/><br/>在as2中<br/>// ActionScript 2 file, AS2animation.fla<br/>// one movie clip animation named animation_mc on the timeline<br/><br/>// local connection instance to receive events<br/>var AVM_lc:LocalConnection = new LocalConnection();<br/><br/>// stopAnimation event handler<br/>AVM_lc.stopAnimation = function()&#123;<br/>animation_mc.stop();<br/>&#125;<br/><br/>// listen for events for "AVM2toAVM1"<br/>AVM_lc.connect("AVM2toAVM1");<br/><br/>as3中<br/>// ActionScript 3 file, AS3Loader.fla<br/><br/>// local connection instance to communicate to AVM1 movie<br/>var AVM_lc:LocalConnection = new LocalConnection();<br/><br/>// loader loads AVM1 movie<br/>var loader:Loader = new Loader();<br/>loader.load(new URLRequest("AS2animation.swf"));<br/>addChild(loader);<br/><br/>// when AVM1 movie is clicked, call stopPlayback<br/>loader.addEventListener(MouseEvent.CLICK, stopPlayback);<br/><br/>function stopPlayback(event:MouseEvent):void &#123;<br/>// send stopAnimation event to "AVM2toAVM1" connection<br/>AVM_lc.send("AVM2toAVM1", "stopAnimation");<br/>&#125;<br/><br/>as3 movie把as2的movie加载进来然后调用as2的stopAnimation<br/><br/>18. Class member enumeration<br/><br/>as3中只有dynamic class 中的dynamic definitions才可以被枚举（就是for in ），例如下边的class就没有可枚举的成员<br/>package &#123;<br/><br/>public class EnumerateClass &#123;<br/><br/>public var variable:String = "value";<br/>public function method():void &#123;&#125;<br/>&#125;<br/>&#125;<br/>var example:EnumerateClass = new EnumerateClass();<br/>for (var key:String in example) &#123;<br/>trace(key + ": " + example[key]); // 没有输出<br/>&#125;<br/><br/>即使上边的class改成dynamic的，也是没有输出，为什么呢？<br/><br/>因为里边的变量和方法是他们自己的，而并不是动态（dynamic）填加的，只有动态填加的属性可以被for in<br/><br/>Object类有个 setPropertyIsEnumerable方法，可以控制某个属性是否可枚举，但它只对dynamic属性有效<br/>package &#123;<br/><br/>public dynamic class EnumerateClass &#123;<br/><br/>public var variable:String = "value";<br/>public function method():void &#123;&#125;<br/><br/>public function EnumerateClass()&#123;<br/>this.dynamicVar = 1;<br/>this.dynamicVar2 = 2;<br/>this.setPropertyIsEnumerable("dynamicVar2", false);<br/>&#125;<br/>&#125;<br/>&#125;<br/><br/>上边的dynamic类有两个dynamic属性， dynamicVar 和 dynamicVar2 ，满足条件，都应该是可枚举的<br/><br/>但调用 setPropertyIsEnumerable("dynamicVar2", false);阻止了枚举 dynamicVar2<br/>var example:EnumerateClass = new EnumerateClass();<br/>for (var key:String in example) &#123;<br/>trace(key + ": " + example[key]); // dynamicVar: 1<br/>&#125;<br/><br/>propertyIsEnumerable方法可以测试某一属性是否可枚举<br/>trace(example.propertyIsEnumerable("variable")); // false<br/>trace(example.propertyIsEnumerable("dynamicVar")); // true<br/>trace(example.propertyIsEnumerable("dynamicVar2")); // false<br/><br/>19. Key.isDown in AS3<br/><br/>在as1，2时代，尤其是游戏中经常会用到 Key.isDown ，但到了as3，Key类已经不存在了，但我们可以通过些技巧实现这个类<br/><br/>package &#123;<br/><br/>import flash.display.Stage;<br/>import flash.events.Event;<br/>import flash.events.KeyboardEvent;<br/><br/>/**<br/>* The Key class recreates functionality of<br/>* Key.isDown of ActionScript 1 and 2. Before using<br/>* Key.isDown, you first need to initialize the<br/>* Key class with a reference to the stage using<br/>* its Key.initialize() method. For key<br/>* codes use the flash.ui.Keyboard class.<br/>*<br/>* Usage:<br/>* Key.initialize(stage);<br/>* if (Key.isDown(Keyboard.LEFT)) &#123;<br/>* // Left key is being pressed<br/>* &#125;<br/>*/<br/>public class Key &#123;<br/><br/>private static var initialized:Boolean = false; // marks whether or not the class has been initialized<br/>private static var keysDown:Object = new Object(); // stores key codes of all keys pressed<br/><br/>/**<br/>* Initializes the key class creating assigning event<br/>* handlers to capture necessary key events from the stage<br/>*/<br/>public static function initialize(stage:Stage) &#123;<br/>if (!initialized) &#123;<br/>// assign listeners for key presses and deactivation of the player<br/>stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);<br/>stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);<br/>stage.addEventListener(Event.DEACTIVATE, clearKeys);<br/><br/>// mark initialization as true so redundant<br/>// calls do not reassign the event handlers<br/>initialized = true;<br/>&#125;<br/>&#125;<br/><br/>/**<br/>* Returns true or false if the key represented by the<br/>* keyCode passed is being pressed<br/>*/<br/>public static function isDown(keyCode:uint):Boolean &#123;<br/>if (!initialized) &#123;<br/>// throw an error if isDown is used<br/>// prior to Key class initialization<br/>throw new Error("Key class has yet been initialized.");<br/>&#125;<br/>return Boolean(keyCode in keysDown);<br/>&#125;<br/><br/>/**<br/>* Event handler for capturing keys being pressed<br/>*/<br/>private static function keyPressed(event:KeyboardEvent):void &#123;<br/>// create a property in keysDown with the name of the keyCode<br/>keysDown[event.keyCode] = true;<br/>&#125;<br/><br/>/**<br/>* Event handler for capturing keys being released<br/>*/<br/>private static function keyReleased(event:KeyboardEvent):void &#123;<br/>if (event.keyCode in keysDown) &#123;<br/>// delete the property in keysDown if it exists<br/>delete keysDown[event.keyCode];<br/>&#125;<br/>&#125;<br/><br/>/**<br/>* Event handler for Flash Player deactivation<br/>*/<br/>private static function clearKeys(event:Event):void &#123;<br/>// clear all keys in keysDown since the player cannot<br/>// detect keys being pressed or released when not focused<br/>keysDown = new Object();<br/>&#125;<br/>&#125;<br/>&#125;<br/><br/>20.Scale and Alpha Ranges<br/><br/>值得注意一下的是，as3中好多属性值的范围变化了，有些值原来范围是0 到 100 ，现在变成了0 到 1 ，例如下边几个，要留心一下<br/>ActionScript 2.0 &#124; ActionScript 3.0<br/>_xscale: 0 - 100 &#124; scaleX: 0 - 1<br/>_yscale: 0 - 100 &#124; scaleY: 0 - 1<br/>_alpha: 0 - 100 &#124; alpha: 0 - 1<br/><br/>21. Available ActionScript packages<br/><br/>AS3 package 概要<br/><br/>* flash 包 (player的核心类包，永远可用)<br/>* mx 包 (flex 专用类包，flex 的组件们需要)<br/>* fl 包 (flash 专用类包，flash组件等)<br/>* adobe 包 (flash 专用类包，绘图工具扩展等)<br/><br/>更多详细包内容，看文档<br/><br/>Flex: http://livedocs.adobe.com/flex/201/langref/<br/>Flash: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/<br/>Apollo: http://livedocs.adobe.com/apollo/1.0/aslr/<br/><br/>注意： Apollo相关的类在 flash和mx包里<br/><br/>22. Numeric Calculations: Number vs. int Speed<br/><br/>比较Number类型和新出现的int类型速度<br/><br/>*只有在用到 bitwise operations (<<, >>, &, ^, and &#124;) 的时候 int 类型比较快，例如<br/>var valueN:Number = 10;<br/>result = valueN << 2; // not so fast<br/><br/>var valueI:int = 10;<br/>reesult = valueI << 2; // Fast!<br/><br/>*其他情况下声明为Number比较快<br/><br/>23. Getting Around globally accessible _root and _global<br/><br/>as1 ,2中任何地方都能访问到_root ,_global ，这样可以很简单的保存变量或函数到这里，但在as3中已经没有_global了，root 也只有Disobject在显示列表里时才会得到，如果你非要这么做的话，应该自己写一个glo类，里边用一个静态变量bal指向一个Object，下边是代码<br/>package &#123;<br/>public class glo &#123;<br/>public static var bal:Object = new Object();<br/>&#125;<br/>&#125;<br/><br/>现在可以把 gol.bal 当成以前的_root或_global用了<br/>trace(glo.bal.foo); // undefined<br/>glo.bal.foo = "bar";<br/>trace(glo.bal.foo); // bar<br/><br/><br/>24. ActionScript 2 to ActionScript 3 Converter<br/><br/>Patrick Mineault（http://www.5etdemi.com/blog/） 用php写了一个as2 -->as3 转换器，不是百分之百准确但也不错<br/><br/>online 版本 ：http://www.5etdemi.com/convert<br/><br/>下载 ：http://www.5etdemi.com/convert/convert.zip<br/><br/>25. Accessing FlashVars and HTML Parameters<br/><br/>你可以用HTML中的 object/embed 代码向镶入的SWF传递变量。<br/><br/>有两种方法：<br/><br/>1。在swf的url后边加变量（query string）<br/><!-- URL Variables --><br/><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="640" height="500" align="middle"><br/>&nbsp;&nbsp; <param name="allowScriptAccess" value="sameDomain" /><br/>&nbsp;&nbsp; <param name="movie" value="flashMovie.swf?myVar=1" /><br/>&nbsp;&nbsp; <param name="quality" value="high" /><br/>&nbsp;&nbsp; <param name="bgcolor" value="#EFF7F6" /><br/>&nbsp;&nbsp; <embed src="flashMovie.swf?myVar=1" quality="high" bgcolor="#EFF7F6" width="640" height="500" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br/></object><br/><br/>2.使用FlashVars<br/><!-- FlashVars --><br/><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" align="middle"><br/>&nbsp;&nbsp; <param name="allowScriptAccess" value="sameDomain" /><br/>&nbsp;&nbsp; <param name="movie" value="flashMovie.swf" /><br/>&nbsp;&nbsp; <param name="quality" value="high" /><br/>&nbsp;&nbsp; <param name="bgcolor" value="#FFFFFF" /><br/>&nbsp;&nbsp; <param name="FlashVars" value="myVar=1" /> <br/>&nbsp;&nbsp; <embed src="flashMovie.swf" FlashVars="myVar=1" quality="high" bgcolor="#FFFFFF" width="550" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br/></object><br/><br/>在as2中这些变量会被简单的声明到_root上，但在as3中有所改变。现在这些变量被放到了root下的parameters对象下，上边HTML传的值可以这样访问：<br/>root.loaderInfo.parameters.myVar;<br/><br/>26. ActionScript Speed Through Typing<br/><br/>考虑到效率，尽量把你的变量声明类型，如果可能的话避免使用dynamic class<br/><br/>27. LivePreview and the LivePreviewParent class<br/><br/>as2 的组件使用_global下的isLivePreview属性来判断是否是在Flash IDE中预览，as3中这个属性不见了，取而代之的是你可以检查这个组件的parent是否为 LivePreviewParent 类的实例<br/>var isLivePreview:Boolean = (parent != null && getQualifiedClassName(parent) == "fl.livepreview::LivePreviewParent");<br/><br/>（ [exclaim] 注：as2时代的isLivePreview这个属性偶也没用过，不清楚这个翻译的对不对 - -b ）<br/><br/>28. Flex Component Kit for Flash CS3<br/><br/>Flex Component Kit for Flash CS3（在Adobe Labs里） 允许把flash中做的交互内容，在Flex中当成Flex comonnet来用<br/><br/>现在可以很容易的使Flash symbol继承我们的新 UIMovieClip 类<br/>从而使<br/>* flash 组件放在一个Flex container里，所有layout会很好的工作<br/>* flash 的帧标签被完全转换为 Flex 的state和 transition<br/>* 只要简单的填加个 SWC 到 library path里Flex Builder就可以有flash组件的语法提示了<br/>* Simple JSFL commands are available to set up new documents as well as publish the Flex-enabled SWC （这句没看明白- -b）<br/><br/>29. Loading URL encoded Variables<br/><br/>URLLoader类(flash.net.URLLoader) 在as3中用来读外部文本文件.当一个外部文件被load后，它的内容会被存储在URLLoader实例的data属性里，一般情况下无论外部文件是什么格式，都会被以raw text形似读取，如果读变量可能需要改一下dataFormat属性<br/><br/>URLLoader类的dataFormat属性决定被加载数据的格式。 dataFormat属性的可选值在 URLLoaderDataFormat 类中(flash.net.URLLoaderDataFormat)<br/><br/>可选值为:<br/><br/>BINARY - 指定按2禁止数据接受<br/>TEXT - 指定当成文本接受<br/>VARIABLES - 指定当作 URL-encoded变量接受<br/><br/>指定URLLoaderDataFormat.VARIABLES 作为 URLLoader的 dataFormat属性, 被加载的数据将被当作一组变量，而不是字符串<br/>data属性将为包含被加载变量的一个 URLVariables 类 (flash.net.URLVariables)的实例<br/><br/>ActionScript 代码:<br/>var loader:URLLoader = new URLLoader();<br/><br/>// specify format as being variables<br/>loader.dataFormat = URLLoaderDataFormat.VARIABLES;<br/><br/>loader.addEventListener(Event.COMPLETE, varsLoaded);<br/><br/>// vars.txt contents: foo=bar&foo2=bar2<br/>loader.load(new URLRequest("vars.txt"));<br/><br/>function varsLoaded (event:Event):void &#123;<br/>trace(loader.data is URLVariables); // true<br/>trace(loader.data.foo); // bar<br/>trace(loader.data.foo2); // bar2<br/>&#125;<br/><br/>30. Interactive Masks<br/><br/>默认情况下，当一个对象 mask 另一个对象的时候，前者（这个遮照）将失去它的交互性，例如，一个sprite有一个 click事件，但当这个sprite成为一个遮照的时候，这个click事件就不起作用了<br/><br/>如果你想让一个对象作为遮照的时候也拥有交互性，就指定它的buttonMode属性为true<br/><br/>ActionScript Code:<br/>maskInstance.buttonMode = true;<br/><br/>31. No _lockroot<br/><br/>ActionScript 3 没有 _lockroot属性了.<br/>_lockroot 属性是在Flash Player 7 引入近来的，_lockroot属性原本用来确保被load进来的movie的_root属性始终引用它自己而不是主swf在 ActionScript 3 中, 所有的root引用永远指向文件本身的root 就像_lockroot已经在那了一样。
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?145</link>
<title><![CDATA[暴力游戏。。。]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[分享Share]]></category>
<pubDate>Fri, 05 Dec 2008 01:20:11 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?145</guid> 
<description>
<![CDATA[ 
	<br/>此处包含一个多媒体文件，请用网页方式查看。<br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?144</link>
<title><![CDATA[金融危机对你有影响吗？]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Fri, 05 Dec 2008 01:15:54 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?144</guid> 
<description>
<![CDATA[ 
	假设去年您有1000美元——<br/>如果买了达美航空的股票,现在还能剩下49美元;<br/>如果买了AIG的股票,剩下约12美元;<br/>如果买了房地美股票,剩下约2.5美元;<br/>如果买1000美元的啤酒,喝光后再把易拉罐送去回收站,还能换回214美元。<br/><br/>假设去年您有1000元人民币——<br/>如果买了招商银行的股票,现在还能剩下250元;<br/>如果买了江西铜业的股票,剩下约166元;<br/>如果买了中国船舶股票,剩下约120元;<br/>如果买1000元的三鹿奶粉,喝光后再把空罐送回经销商,还能换回1000元! <br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?143</link>
<title><![CDATA[上帝的微笑]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Wed, 03 Dec 2008 02:18:17 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?143</guid> 
<description>
<![CDATA[ 
	<a href="http://www.lionar.com/attachment.php?fid=22" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=22" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=23" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=23" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=24" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=24" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?142</link>
<title><![CDATA[朋友的结婚照]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Fri, 28 Nov 2008 06:32:24 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?142</guid> 
<description>
<![CDATA[ 
	好朋友都来齐了，不容易啊。我结婚不知道能来几个人。<br/><a href="http://www.lionar.com/attachment.php?fid=21" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=21" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?141</link>
<title><![CDATA[收藏]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[分享Share]]></category>
<pubDate>Thu, 20 Nov 2008 11:20:27 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?141</guid> 
<description>
<![CDATA[ 
	在收藏夹发现了好久以前常看的2个连接，都是好久没有更新了。当时怎么找到的都已经忘记了。<br/>怕以后找不到，或者忘记了。记录一下。<br/><br/>我是一棵等待春天的树<br/><br/><a href="http://drifter.tianyablog.com/blogger/view_blog.asp?idWriter=0&Key=0&BlogName=drifter&CategoryID=0&page=1&b=1&r=1&nid=88888888" target="_blank">http://drifter.tianyablog.com/blogger/view_blog.asp?idWriter=0&Key=0&BlogName=drifter&CategoryID=0&page=1&b=1&r=1&nid=88888888</a><br/><br/>蚊子的文字<br/><a href="http://ppwenzi.spaces.live.com/blog/" target="_blank">http://ppwenzi.spaces.live.com/blog/</a><br/><br/>以前还有一个站，我经常去的 " 离别的车站 "&nbsp;&nbsp;可惜好久以前就关闭了，后来好像又找到了新站，也没记住。<br/><br/>这是百度的快照 怀念一下吧<br/><a href="http://203.208.33.101/search?q=cache:SPBpTfvIibgJ:blog.22floor.com/llfll/5911.html+%E7%A6%BB%E5%88%AB%E7%9A%84%E8%BD%A6%E7%AB%99+%E6%B3%95%E8%AF%AD&hl=zh-CN&ct=clnk&cd=3&gl=cn&client=aff-os-maxthon&st_usg=ALhdy2-TpVOBujPt8T61AHgwBhE7ahPQsw" target="_blank">http://203.208.33.101/search?q=cache:SPBpTfvIibgJ:blog.22floor.com/llfll/5911.html+%E7%A6%BB%E5%88%AB%E7%9A%84%E8%BD%A6%E7%AB%99+%E6%B3%95%E8%AF%AD&hl=zh-CN&ct=clnk&cd=3&gl=cn&client=aff-os-maxthon&st_usg=ALhdy2-TpVOBujPt8T61AHgwBhE7ahPQsw</a>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?140</link>
<title><![CDATA[adoble flash platform and web technologies]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Tue, 18 Nov 2008 09:21:16 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?140</guid> 
<description>
<![CDATA[ 
	<a href="http://www.lionar.com/attachment.php?fid=20" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=20" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?139</link>
<title><![CDATA[为MXML和ActionScript文件插入元标签]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Tue, 18 Nov 2008 07:10:20 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?139</guid> 
<description>
<![CDATA[ 
	Flex 开发工作中, 组件的开发是比不可少的环节, 在你的自定义组件中合理地应用元标签可以使组件更容易, 更方便, 更友好地被引入到应用中.<br/><br/>你可以为MXML和ActionScript文件插入元标签，以便为Flex编译器提供信息。可执行代码中的元标签不会被编译，但会为控制如何编译元标签所标识的代码提供信息。<br/><br/>下表列出了 Flex 中可以应用于 ActionScript 类的元标签.<br/><br/>标签&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/><br/>[ArrayElementType]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在数组中定义所有允许的数据类型。<br/>[Bindable]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;声明一个属性可以在代码中使用数据绑定表达式。<br/>[DefaultProperty]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义组件在MXML中使用时的默认属性的名称。<br/>[Deprecated]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标识一个类或类的元素是不推荐使用的，这样编译器能认出他并在被调用时给出一个警告信息。<br/>[Effect]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义MXML的特效属性名称。<br/>[Embed]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在编译时导入 JPED,PNG,SVG 或 SWF文件。也会导入SWC文件的图片资源。他的功能等同于MXML中的 @Embe 语法。<br/>[Event]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义MXML的事件属性的名称和类型。<br/>[Exclude]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使 Flex Builder 的标签检查器忽略类元素。语法类似 [Exclude(name="label",&nbsp;&nbsp;&nbsp;&nbsp; kind="property")]<br/>[ExcludeClass]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是 Flex Builder 标签检查器忽略类。这相当于ASDoc中的 @private 标签。<br/>[IconFile]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义一个图标文件，使组件在Adobe Flex Builder的插入面板中以该图标显示。<br/>[Inspectable]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义一个属性的列表，供组件使用者在 Flex&nbsp;&nbsp;&nbsp;&nbsp; Builder 的的属性提示和标签检查中使用。同时也定义了属性的可用值。<br/>[InstanceType]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定了 IDeferredInstance 中的，属性接受的数据类型。<br/>[NonCommittingChangeEvent]&nbsp;&nbsp;定义一个事件过渡触发器。<br/>[RemoteClass]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把一个ActionScript对象映射到Java对象。<br/>[Style]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为组件的样式属性定义一个MXML标签属性。<br/>[Transient]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当一个 ActionScript 对象被映射到Java对象后，被该标签标识的属性，会从发送到服务端的数据中忽略掉。
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?138</link>
<title><![CDATA[ Writingcomponents in Flex 自定义flex组件]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Tue, 18 Nov 2008 02:33:10 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?138</guid> 
<description>
<![CDATA[ 
	完整的说明了制作一个组件需要的步骤，包括事件和风格。<br/>第1步：<br/><a href="http://labs.flexperiments.nl/writing-components-in-flex-part-1/" target="_blank">http://labs.flexperiments.nl/writing-components-in-flex-part-1/</a><br/>第2步：<br/><a href="http://labs.flexperiments.nl/writing-components-in-flex-part-2/" target="_blank">http://labs.flexperiments.nl/writing-components-in-flex-part-2/</a><br/>第3步：<br/><a href="http://labs.flexperiments.nl/writing-components-in-flex-part-3/" target="_blank">http://labs.flexperiments.nl/writing-components-in-flex-part-3/</a><br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?137</link>
<title><![CDATA[Flex加入svn ]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Fri, 14 Nov 2008 07:08:04 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?137</guid> 
<description>
<![CDATA[ 
	1. 打开Adobe FlexBuilder3, 选择Help-Find and Install…<br/>2.选择Search for new features to install<br/>3.选择New Remote Site，输入站点名称(任意)和URL: http://subclipse.tigris.org/update_1.4.x<br/>4.选择Subclipse Plugin，注意不要选择Integrations 和Revison Graph 。<br/>5.安装重启后-windows-other view .<br/>6.找到面板，右键 新建资源库。<br/>7.检出--可以作为新项目<br/>8.自己研究吧
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?136</link>
<title><![CDATA[[转]如何直接调试线上页面的JavaScript和CSS]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Mon, 10 Nov 2008 07:39:19 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?136</guid> 
<description>
<![CDATA[ 
	<div class="post-content"><p>作为一名前端工程师，除了开发新项目，还有一个重要任务是线上网站的日常维护。一个典型的工作场景是：线上的某个页面出现了bugs，需要紧急修复。这时候有个简单的传统做法是，将问题页面<strong>另存为本地html</strong>文件，然后疯狂的寻找并修复bugs，等弄好了，再将修改后的js和css上传到线上并检查校验bugs是否已修正。</p><p>上面的方法，对于简单页面，是够用的。但是对于稍微复杂的页面，IE的另存为经常不保真，如果页面中涉及Ajax等bugs，保存到本地更是难以调试。这时有个很自然的做法是，<strong>将开发环境Run起来，当时怎么开发的，现在就怎么调试</strong>。这样做肯定能解决问题，但要调动很多资源，后台开发工程师、前台开发工程师等等都要参与。对于小团队来说，也许是可行的，对于大团队来说，如此大动干戈，除非到了最后，是不会这样做的。那我们应该怎么做呢？先来看一个工具：</p><blockquote><p>Web开发中有个大名鼎鼎的工具：<a href="http://www.fiddlertool.com/fiddler/">Fiddler</a>. Fiddler是一个http调试代理，它能够记录你电脑和互联网之间的所有http通讯。Fiddler可以让你检查所有的http通讯，设置断点，以及Fiddle（Fiddle的英文意思是胡乱修改，很幽默的表达Fiddler的用途）所有&ldquo;进出&rdquo;的数据（指cookie,html,js,css等数据）。</p></blockquote><p>嘿嘿，是否从上面的介绍中嗅探到了某种解决方案？<strong>Fiddler可以让我们Fiddle所有&rdquo;进出&ldquo;的数据！</strong>我们要调试线上页面的bugs时，可以先分析是什么文件引起的，找出这些嫌疑文件，下载到本地，然后利用Fiddler将线上的请求Fiddle到本地的对应文件。这样我们就可以随心所欲的修改这些嫌疑文件了，直接刷新线上的页面就可以看到效果，烦人的环境问题根本就不用考虑，而且一切都是高保真的。</p><p>上面说的是思路，下面我会举个例子来说明。</p><p>举例子之前，请先安装Fiddler（怎么下载安装就不多了，一路Next）。安装好后，在IE的工具条上会出现Fiddler2图标，点击启动Fiddler. 启动后，通过IE访问任何网站时，所有http进出数据都会在Fiddler上显示出来。但是等等，怎么老说IE呢？虽然在IE上能通过IE Developer Toolbar和Companion.JS来调试CSS和JS，但被firebug宠坏了的我们，总期望着Firefox上能搞定的问题绝不通过IE去调试。为了我们的美好期望，根据Fiddler的官方说明，我们只要简单的进行以下操作即可：</p><p>首先，找到BrowserPAC.js这个文件，默认放在</p><ul><li>c:&#92;Documents and Settings&#92;Your Name&#92;My Documents&#92;Fiddler2&#92;Scripts&#92;BrowserPAC.js </li></ul><p>Vista下在User的对等目录里。</p><p>接着，打开亲爱的Firefox3，Tools - Options - Advanced - Network:</p><p><img class="alignnone size-full wp-image-31" src="http://lifesinger.org/blog/wp-content/uploads/2008/08/firefox_conn_settings.png" border="0" title="firefox_conn_settings" width="500" height="171" /></p><p>点击Settings&hellip;:</p><p><img class="alignnone size-full wp-image-32" src="http://lifesinger.org/blog/wp-content/uploads/2008/08/firefox_conn_settings_auto_proxy.png" border="0" title="firefox_conn_settings_auto_proxy" width="427" height="411" /></p><p>选中自动代理配置URL，将BrowserPAC.js的绝对路径复制过去，确定。如果想让Fiddler监听其他浏览器，同上设置即可。</p><p>至此准备工作完毕，我们进入正题（才进入正题？各位看官稍安毋躁，喝杯茶，养养神，再接着往下看）。</p><p>在我的淘宝 - 已卖出的宝贝页面，有个修改价格的功能：</p><p><img class="alignnone size-full wp-image-35" src="http://lifesinger.org/blog/wp-content/uploads/2008/08/modify_price.png" border="0" title="modify_price" width="482" height="268" /></p><p>前些天发现一个bug，当点击修改价格按钮之后，主页面上的价格没有更新。</p><p>初步分析后，觉得以下js文件有问题：</p><ul><li>http://assets.taobaocdn.com/js/app/trade/trade.js </li><li>http://assets.taobaocdn.com/js/app/trade/trade_business.js </li></ul><p>因为涉及Ajax调用，保存为HTML本地调试不了。这时想起Fiddler，问题迎刃而解。</p><p>首先将上面两个文件下载到本地，启动Fiddler，在AutoResponder栏添加替换规则：</p><p><a href="http://lifesinger.org/blog/wp-content/uploads/2008/08/fidder_1.png"><img class="alignnone size-medium wp-image-36" src="http://lifesinger.org/blog/wp-content/uploads/2008/08/fidder_1-300x153.png" border="0" title="fidder_1" width="300" height="153" /></a></p><p><a href="http://lifesinger.org/blog/wp-content/uploads/2008/08/fidder_2.png"><img class="alignnone size-medium wp-image-37" src="http://lifesinger.org/blog/wp-content/uploads/2008/08/fidder_2-300x153.png" border="0" title="fidder_2" width="300" height="153" /></a></p><p>如上图添加两条规则后，在Firefox中刷新页面，上面两个js文件就从本地获取了，嘿嘿。接下来，用喜欢的文本编辑器加Firebug尽情的调试吧，就像当初开发时一样。等把bugs解决了，压缩并上传相应的js文件，并通知后台开发者修改vm中js文件的时间戳，然后等着发布就行。</p><p>CSS也是一样的调试，不赘述。在IE、Safari、Opera中的的使用方法类似，不多说。</p><p>希望本文能对你有所帮助。<br /><a href="http://lifesinger.org/blog/?p=40">http://lifesinger.org/blog/?p=40</a></p></div>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?135</link>
<title><![CDATA[什么是RTMFP？ ]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[工作Work]]></category>
<pubDate>Fri, 07 Nov 2008 06:55:32 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?135</guid> 
<description>
<![CDATA[ 
	什么是RTMFP？ <br/><br/>&nbsp;&nbsp;RTMFP 是 Real‐Time Media Flow Protocol的缩写，是Adobe准备推出的一种新的通信协议，这种通信协议可以让 Flash 客户端直接和另外一个Flash 客户端之间进行数据通信，也就是常说的p2p的方式进行通信。 <br/><br/>什么时候能用上RTMFP？需要什么技术支持？ <br/><br/>只有下一个版本的播放器：Flash Player10 才支持RTMFP 协议，同时服务器端还需要下一个版本的 Flash Media Server，估计就是FMS4了，（我博客之前的一篇文章：http://www.weni.cn/index.php?play=reply&id=115没猜错）。 <br/>目前虽然Flash Player10的预览版本已经出来了，但是FMS4发布日期还没有定下来。所以目前RTMFP还体验不了。 <br/><br/>RTMFP有哪些新的功能？ <br/><br/>&nbsp;&nbsp;使用RTMFP，一些使用即时通讯技术的Flash应用，例如在线聊天，在线多人游戏等应用的通信效率将会大大提高，因为RTMFP支持客户端之间直接通信，包括麦克风、摄像头的共享等。（目前Flash客户端之间的通信都是要先经过服务器中转的，所以效率不高，服务器压力比较大，RTMFP技术出现后这些问题将会迎刃而解）。 <br/>不过RTMFP不支持文件的传输和共享。 <br/><br/>RTMFP给我们带来什么好处？ <br/><br/>&nbsp;&nbsp;RTMFP将会大大地减少音视频直播、点播、多人在线游戏等应用的网络带宽的消耗，减轻服务器的负担。因为很多数据都是客户端之间直接传输了，无须再经过服务器中转了。 <br/>RTMFP由于使用了UDP网络协议，所以相对之前的TCP协议在数据传输效率上也会大大提高，这种优势在音视频数据传输方面是非常明显的。 <br/>关于TCP和UDP网络通信协议之间的区别以及各自的优缺点大家可以去网上搜索相关的介绍，这里就不再做过多的介绍了。 <br/><br/>RTMFP和RTMP有哪些区别？ <br/><br/>&nbsp;&nbsp;从本质上的区别就是网络通信的协议不一样，RTMFP是使用User Datagram Protocol (UDP)协议，而RTMP是使用Transmission Control Protocol (TCP)协议。 <br/>UDP协议对比TCP协议最大的优点就是传输流媒体数据的时候效率非常高，网络延迟少，增强音视频的传输质量，以及网络连接的可靠性增强。 <br/>RTMP的客户端之间要进行数据通信，必须先将数据发送到FMS等服务器端，然后服务器端再转发到另外一个用户，而RTMFP则支持客户端直接发送数据到另外一个客户端，无需经过服务器的中转。此时你也许会问，居然客户端之间的数据可以之间通信，还要FMS服务器做什么？其实此时的FMS服务器只起到桥梁作用，因为客户端之间要创建通信会话就必须要知道对方客户端的相关信息，就相当于你找对象要先经过媒婆介绍一样的道理，哈哈。 <br/>下面的示意图表现了RTMFP和RTMP的不同之处： <br/><br/> <a href="http://www.lionar.com/attachment.php?fid=18" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=18" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>&nbsp;&nbsp;<a href="http://www.lionar.com/attachment.php?fid=19" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=19" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/> <br/><br/>RTMFP适合用于哪些类型的应用？ <br/><br/>&nbsp;&nbsp;RTMFP比较适合用于网络通信数据量比较大，通信即时性要求比较强的应用，例如VoIP，音视频即时沟通工具（IM），多人网络游戏等等。 <br/><br/>Adobe以后还会丰富RTMFP相关技术吗？ <br/><br/>&nbsp;&nbsp;会的，Adobe以后还会一如既往地对RTMFP进行进一步增强、优化以适合市场发展的需求，不过目前还没有进一步的相关声明。 <br/><br/>本文翻译自：http://download.macromedia.com/pub/labs/flashplayer10/flashplayer10_rtmfp_faq_070208.pdf <br/>转载"www.weni.cn" <br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?134</link>
<title><![CDATA[新生活]]></title> 
<author>oncebet &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Wed, 05 Nov 2008 02:12:43 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?134</guid> 
<description>
<![CDATA[ 
	来深圳了，开始新的生活。和女朋友住在一起。结束了单身生活。<br/>努力赚钱，开心生活。<br/>加油。<br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?133</link>
<title><![CDATA[好想去这里]]></title> 
<author>kxw9c &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Fri, 19 Sep 2008 06:27:44 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?133</guid> 
<description>
<![CDATA[ 
	最近身体很差，疼的厉害。但疼只是表面，精神上给人的折磨实在是坚持不了。<br/>好想去这里玩，但是身体不行。撑下去。准备一下，一定要去。<br/><br/>发一些其他人拍回来的照片。死也要死在那里。<br/><br/><a href="http://www.lionar.com/attachment.php?fid=13" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=13" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=14" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=14" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=15" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=15" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=16" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=16" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://www.lionar.com/attachment.php?fid=17" target="_blank"><img src="http://www.lionar.com/attachment.php?fid=17" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>
]]>
</description>
</item><item>
<link>http://www.lionar.com/read.php?132</link>
<title><![CDATA[好像有严查]]></title> 
<author>kxw9c &lt;oncebet@126.com&gt;</author>
<category><![CDATA[生活Life]]></category>
<pubDate>Thu, 18 Sep 2008 12:36:29 +0000</pubDate> 
<guid>http://www.lionar.com/read.php?132</guid> 
<description>
<![CDATA[ 
	Blog挂在朋友的服务器上，关了几天。<br/>好久没写东西。空落落的。<br/><br/>努力，看病。相信身体的自愈能力。
]]>
</description>
</item>
</channel>
</rss>