We Are Hugo & Jessie's Family
Flex
获取 Flash Builder 4 Beta 序列号
七 17th
Adobe Flash Builder 4 Beta Extension Request
https://freeriatools.adobe.com/flashbuilder4beta/ 在以上网址用Flex Builder 3的序列号申请即可。
Flex 3 Full Screen Mode
六 15th
如果你想让Flex应用全屏的话,可以这样做。
首先,当然是AS
<mx:Script> <![CDATA[
private var fullScreenListenerFlag:Boolean = true;
private function onFullScreen(e:FullScreenEvent):void { if (e.fullScreen) fullScreenLabel.label = "Exit Full Screen Mode"; else fullScreenLabel.label = "Full Screen Mode"; }
private function fullScreen():void { if (stage && fullScreenListenerFlag) { stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullScreen); fullScreenListenerFlag = false; }
if (stage.displayState == StageDisplayState.FULL_SCREEN) stage.displayState = StageDisplayState.NORMAL; else stage.displayState = StageDisplayState.FULL_SCREEN; } ]]> </mx:Script>
在Flex中使用嵌入字体
六 5th
在处理文本时,为了美观,有时会给文本选择一些特殊的字体,使得文本不那么单调,这就会引发一个问题:由于每个用户的系统有差异,当对方机器上没有安装你指定的字体时,Flash Player会自动选择一个合适的字体,无法保证文字的外观在控制之中,很可能会走样。如何避免出现这样的情况?解决方法有两种:使用设备字体和使用嵌入字体。设备字体的特性是用户机器上的所有字体都最大可能地模拟其外观,保持文本的样式不会出现较大变化;嵌入字体是指将字体文件编译进SWF文件中或者运行时加载到SWF文件中,供SWF文件使用。这样不管用户是否安装了该字体,都可以正常显示。使用嵌入字体的好处还有:文本具有抗锯齿,边缘更平滑,文本可以设置透明度,文本还可以旋转。当然也有缺点,首先便是增加了程序的文件大小,而且嵌入字体只支持TrueType(微软和Apple公司共同研制的字型标准)类型,当字体大小小于10时,文本会很难辨认。一般情况下,使用设备字体就足够了,Flash Player支持三种设备字体:_sans,_serif,_typewriter。所以在定义样式时,为保证效果,可以这样: Application{ fontSize:12; fontFamily: Arial, "_sans";}当用户的机器上没有Arial字体,Flash Player自动使用“_sans”设备字体。和系统字体的使用不同,设备字体必须用引号。有些情况要求必须使用嵌入字体,例如使用了动画效果中的部分效果如Fade(淡入淡出效果)、Rotate(旋转效果),Dissolve(溶解效果)。可以在样式在定义嵌入字体:<mx:Style> @font-face { src:local("Arial"); //嵌入本机字体 fontFamily: myFont; //字体的别名 fontStyle: normal; //默认normal,正常,可选值:italic | oblique | normal fontWeight: normal; //默认normal,正常,可选值:bold | heavy | normal flashType: true; //默认true,添加文本的额外信息,使得文本抗锯齿,平滑显示 } Application{ fontSize:12; fontFamily:myFont; //指定字体,使用嵌入字体的别名 } </mx:Style>在嵌入一些双字节型的字体,比如中文字体,日文字体时,字体信息复杂,字体文件大,为了减小程序的文件大小,可以对嵌入字体的字符范围进行限制,这样,没有使用的字符信息不会被包含在文件中。例如上面使用了英文字体,只能使用英文范围内的字符,如果使用了中文,将无法显示。在font-face中使用unicodeRange来指定字符范围,例如:@font-face { src:local("Arial"); fontFamily: myFont; flashType: true; unicodeRange: U+0041-U+005A, /* 大写字母 [A..Z] */ U+0061-U+007A, /* 小写字母 a-z */ U+0030-U+0039, /* 数字 [0..9] */ U+002E-U+002E; /* 点 [.] */ }必须使用字符的字符编码来定义字符范围,这里的字符编码采用Unicode(统一字符编码)标准。定义字符范围的另一种做法是在flex-config.xml中添加相关信息。用文本编辑器打开位于Flex Builder 2安装目录下的Flex SDK 2/frameworks/flex-config.xml文件,找到<fonts>标签。 <fonts> <languages> <language-range> <lang>englishRange</lang> <range>U+0020-U+007E</range> </language-range></fonts>按照以上格式添加字体的字符范围,在<lang>标签中设定标签的名称。这样,在程序中可以直接使用该名称来定义字符范围。例如:@font-face { src:local("Arial"); fontFamily: myFont; flashType: true; unicodeRange:” englishRange” //等同于U+0020-U+007E }在flex-config.xml的同目录下还有一个flash-unicode-table.xml文件,其中列出了绝大部分语言的Unicode的字符范围,供开发者参考,其中也有中文的资料:<language-range> <lang>Chinese (All)</lang> <range>U+3000-U+303F,U+3105-U+312C,U+31A0-U+31BF,U+4E00-U+9FAF,U+FF01-U+FF60,U+F900-U+FAFF,U+201C-U+201D,U+2018-U+2019,U+2014,U+2026,U+FFE5,U+00B7</range> </language-range> 嵌入字体的另一种方式是把字体放在外部的swf中,然后加载swf文件。例如:@font-face { src:url("./Arial.swf"); //指定文件地址 fontFamily: “myFont”; }这里不能使用flashType属性,该属性的值由SWF文件决定,无法再更改。在使用该字体之前,必须保证SWF文件已经加载完毕。要在程序中使用该字体:@font-face { src:url("./Arial.swf"); fontFamily: “myFont”; }.PlainText { fontFamily: "myFont "; fontSize: 12; } .BoldText { fontFamily: "myFont "; fontSize: 12; fontWeight: bold;}注意:在使用嵌入字体时,即使是同一字体,它的不同样式比如斜体和粗体要单独进行定义,互相独立,不能混在一起。使用脚本也可以嵌入字体:[Embed(mimeType='application/x-font', source='../assets/Arial.TTF', fontName='myArialFont')]private var myFont:Class; 定义样式:.PlainText { fontFamily: myArialFont; fontSize: 12; }如果嵌入的字体很大,生成的程序文件也会很大,导致加载时要花较长时间,要避免这个问题,可以把字体文件打包成SWF文件,然后加载到程序中。下次再说这个问题吧
Flex开发常用知识
五 25th
【改变输出swf的尺度,背景颜色或帧频】在"Navigator"窗框里右键你的项目>选中"Properties">选中"ActionScript Compiler">在"Additional compiler arguments"里输入你所需要的命令如想改变背景颜色,请输入: -default-background-color 0xffffff【鼠标坐标】mouseX mouseY【检查变量类型并返回布尔值】is【检查变量类型并返回类型】typeof【检查对象类型并返回该对象】as【是数字但不是有效数字问题】var quantity:Number = 15 – "rabbits";trace(typeof quantity); //显示: "number" , 但它是NaN (not a number)trace(quantity is Number); //truetrace(quantity != NaN); //false//使用isNaN()函数检测:isNaN(quantity); //true//检测变量是否内含有效数字:!isNaN(quantity); //false【取消默认的严格编译模式】在"Navigator"窗框里右键你的项目>选中"Properties">选中"ActionScript Compiler">取消"Enabel compile-time type checking"选项【基元数据类型和复杂数据类型好比"值类型"和"引用类型"】基元数据类型类似按值传递:var intOne:int = 1;var intTwo:int = 1;trace(intOne == intTwo); //true【复杂数据类型类似按引用传递】var arrayOne:Array = new Array("a", "b");var arrayTwo:Array = arrayOne;trace(arrayOne == arrayTwo); //true//———————————–var arrayOne:Array = new Array("a", "b");var arrayTwo:Array = new Array("a", "b");trace(arrayOne == arrayTwo); //false【优化逻辑AND(&&)和OR(||)的小知识】对于逻辑And(&&): 除非条件表达式的前半部分为真,否则,ActionScript不会再去求算逻辑AND运算符的后半部.如果前半部为假,整个条件表达式一定为假,所以再去求算后半部就没效率了.对于逻辑OR(||): 除非条件表达式前半部为假,否则,ActionScript不会再去求算逻辑OR运算符的后半部,如果前半部为真,整个条件表达式一定为真.总结:使用逻辑AND(&&)时,把结果最可能为false的表达式放到前面;使用逻辑OR(||)时,把结果最可能为true的表达式放到前面.【Timer类注意事项】不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.【private,protected,internal,public访问权限】private:只能在类本身内部访问,按惯例,命名私有成员时以下划线"_"开头;protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线"_"开头;internal:可以由类本身或者相同包内的任何类访问;public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.【一个函数具有未知个数的参数,用arguments对象或"…(rest)"符号访问它的参数】注意:使用"…(rest)"参数会使 arguments 对象不可用;private funciton average():void{ trace(arguments.length); //输出参数的个数 // arguments的类型是:object,但可以像访问数组一样去访问它 trace(arguments[1]); //输出第二个参数}private function average(…argu):void{ trace(argu[1]); //输出第二个参数,argu参数名是自定义的.}【错误处理try,catch,finally】private function tryError():void{ try { trace("测试开始-try"); throwError(); }catch(errObject:Error) { trace("错误信息:" + errObject.message); trace("测试结束-catch"); return; }finally{ trace("虽然catch里已经有return方法,但位于return方法后面的finally里的代码依然会被执行.其实无论return方法是在try里,还是catch里,finally里的代码始终会被执行"); } trace("前面已经有return了,此处是不会再执行的.除非没有抛出错误,以使catch里的代码没有被执行");}private function throwError():void{ throw new Error("抛出错误");}【for…in与for each…in的区别】与for…in循环不同的是,for each…in循环中的迭代变量包含属性所保存的值,而不包含属性的名称(或主键,索引).【命名包路径的小技巧】 使用相应于拥有者和相关项目的包名称会比较好.按惯例来讲,包名称的开头应该是逆向的网址名称.例如,如果Example Corp(examplecorp.com)写了一些ActionScript3.0类,就会把所有类放在com.examplecorp包内(或者 com.examplecorp的子包内).如此一来,如果英国有另一家Example Corp(examplecorp.co.uk)也写了一些ActionScript3.0类,只要使用包uk.co.examplecorp,就可确保 唯一性. 当类属于特定应用程序的一部分时,就应该放在该应用程序特定的子包内.例如,Example Corp可能有个应用程序名叫WidgetStore.如果WidgetStore应用程序使用一个名为ApplicationManager的类,则此 类就应该放在com.examplecorp.widgetstore包内,或者位于该包的子包内. 按惯例来说,包名称的开头是小写字母.【隐式的取出方法(getter)和设定方法(setter)】public function get count():uint { return _count;}public function set count(value:uint):uint { if(value < 100){ _count = value; }else { throw Error(); }}【确保类是绝不会有子类,使用final】final public class Example{}【super关键字的使用】super(); //父类的构造函数,只能在类实例构造函数内部使用super.propertyName; //调用父类的属性,属性需要声明为public或protectedsuper.methodName(); //调用父类的方法,方法需要声明为public或protected【建立常数,使用关键字const而不是var】static public const EXAMPLE:String = "example";【检测播放器版本】flash.system.Capabilities.version对于8.5版以前的任何Flash Player版本,这种方法都不适用.【判断客户端系统】flash.system.Capabilities.os【检测播放器类型】flash.system.Capabilities.playerType可能的值有:"StandAlone",用于独立的 Flash Player"External",用于外部的 Flash Player 或处于测试模式下"PlugIn",用于 Flash Player 浏览器插件"ActiveX",用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件【检测系统语言】flash.system.Capabilities.language【判断用户是否启用了IME(输入法编辑器)】flash.system.IME.enabled【检测屏幕的分辨率】flash.system.Capabilities.screenResolutionXflash.system.Capabilities.screenResolutionY【把弹出窗口居中