今天看到aw的blog上好象要翻译AS3 Tip of the Day 才想起来偶也看过这个,但是后来没坚持翻下去,也就没发出来,正好最近这一系列又更新了一些关于flash cs3相关的内容,所以还是打算继续把他看完,以下有些是简译,有些是直译,有些根本不是翻译,是摘录或是看完后用我自己的话组织的,方便我自己查看,想看完整翻译的还是等看aw的吧,偶的英语水平跟他差远了
General:
1. 动态改变帧频:
// change frame rate to 12 fps: stage.frameRate = 12;
2. Abstract Classes
as3不支持抽象类,但有几个内置的抽象类
DisplayObject InteractiveObject DisplayObjectContainer Graphics
as3中这意味着不能实例化这些类,也不能继承他们 ,以下为错误操作:
// 错误1
var myObj:InteractiveObject = new InteractiveObject(); // ERROR
// 错误2
package { import flash.display.DisplayObject; public class MyDisplay extends DisplayObject{ public function MyDisplay (){ // ERROR } } }
3. Deep Object Copies with ByteArray
as3中很容易使用(flash.utils.ByteArray)类来进行对象的深拷贝,深拷贝不只拷贝引用,而是拷贝整个相关对象,
例如一个array里包含一个object引用,这个object也将被拷贝
注意:这个方法通常用来拷贝一般的object
拷贝函数:
function clone(source:Object):* { var copier:ByteArray = new ByteArray(); copier.writeObject(source); copier.position = 0; return(copier.readObject()); }
使用方法:
newObjectCopy = clone(originalObject);
4. Determine Instance Class or Superclass
as3中可以很容易的获取某个实例所属的类和父类的类名,使用这两个方法
getQualifiedClassName (flash.utils.getQualifiedClassName). getQualifiedSuperclassName (flash.utils.getQualifiedSuperclassName) var sprite:Sprite = new Sprite(); trace(getQualifiedClassName(sprite)); // "flash.display::Sprite trace(getQualifiedSuperclassName(sprite)); // "flash.display::DisplayObjectContainer"
你甚至可以由字符串获得类的引用,使用这个方法
getDefinitionByName (flash.utils.getDefinitionByName). getDefinitionByName("flash.display::Sprite")); // [class Sprite]
5. Multiple Arguments in trace()
as3 trace(value1, value2, value3); as1,as2 trace([value1, value2, value3]);
6. Loading Text and XML with URLLoader
var loader:URLLoader; // ... loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded);
var request:URLRequest = new URLRequest("file.xml"); loader.load(request); //... function xmlLoaded(event:Event):void { var myXML:XML = new XML(loader.data); //... }
7.Get Sound Spectrum Information
(flash.media.SoundMixer)类的computeSpectrum静态方法可以把正在播放的声谱信息转成ByteArray,由此你可以想到办法把声谱可视化显示出来
// play sound... var spectrumInfo:ByteArray = new ByteArray(); SoundMixer.computeSpectrum(spectrumInfo); // spectrumInfo is now a byte array with sound spectrum info
具体可视化的方法可以看swfdong那里的教程 :)
8. Garbage Collection: Reference Counting & Mark and Sweep
垃圾回收机制包含两个关键:
(1)Reference Counting (引用数) :
引用数就是在内存中引用同一个object的变量多少,每增加一个变量引用该object,引用数就+1 var a:Object = new Object(); // new Object in memory given reference count of 1 var b:Object = a; // Object now has reference count of 2 无论什么时候,当没有变量引用该object的时候,垃圾回收就会把他们回收了 delete a; // Object has reference count of 1 delete b; // Object has reference count of 0, removed from memory 注意delete只能删除非成员变量,而且删除的是引用该object的变量而不是将object从内存中删除,那是垃圾回收器要做的事
|