改变输出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); //true
trace(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或protected
super.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.screenResolutionX
flash.system.Capabilities.screenResolutionY

把弹出窗口居中的算法

X = (舞台宽/2)-(窗口宽/2)
Y = (舞台高/2)-(窗口高/2)

控制影片配合Player的方式,包括缩放问题

stage.scaleMode
可供选择值:flash.display.StageScaleMode

舞台的对齐方式

stage.align
可供选择值:flash.display.StageAlign

隐藏Flash Player的右键菜单

stage.showDefaultContextMenu = false;

检测系统是否具有音频功能

flash.system.Capabilities.hasAudio

检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行

flash.system.Capabilities.hasMP3

检测播放器能 (true) 还是不能 (false) 播放流式视频

flash.system.Capabilities.hasStreamingVideo

检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行

flash.system.Capabilities.hasEmbeddedVideo

外部.swf影片载入和互动

  1. 监听init事件;
  2. 透过content属性存取所载入的影片.
    当所载入的影片做好足够的初始化工作,使其方法和属性可以接受互动时,init事件就会被发起.只有在载入器发起init事件后,才能控制影片.所载入的影片还没初始化就试着与它互动,是会产生执行期间错误的.
_loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit); //当载入的.swf的属性和方法可用时
_loader.load(new URLRequest("ExternalMovie.swf"));
private function handleInit(event:Event):void {
     var movie:* = _loader.content;
     trace(movie.getColor());
     movie.setColor(0xFF0000);
}

TextField有两种类型:动态(dynamic)和输入(input),默认值为动态.改变TextField类型方法

field.type = TextFieldType.INPUT; //selectable属性默认值为true
flash.text.TextFieldType.INPUT和flash.text.TextFieldType.DYNAMIC

过滤文字输入

TextField.restrict = "此处为可输入的内容";
field.restrict = "^此处为禁止输入的内容";
restrict属性支持一些类似正则表达式的样式:
field.restrict = "a-zA-z"; //只允许大小字母
field.restrict = "a-zA-z "; //只允许字母和空格
field.restrict = "0-9"; //只允许数字
field.restrict = "^abcdefg"; //除了小写字母abcdefg不允许外,其它都允许
field.restrict = "^a-z"; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母
field.restrict = "0-9^5"; //只允许数字,但5例外
让restrict字符包含具有特殊意义的字母(例如-和^):
field.restrict = "0-9\-"; //允许数字和破折号
field.restrict = "0-9\^"; //允许数字和^
field.restrict = "0-9\\"; //允许数字和反斜杠
你也可以使用Unicode转义序列,指定允许的内容.例如:
field.restrict = "^u001A";
注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.

设定输入框的最大长度

TextField.maxChars:int

向TextField追加内容

TextField.appendText(text:String):void
与通过对 text 属性使用加法赋值来连接两个字符串(例如 field.text += moreText)相比,此方法的效率更高.

显示HTML格式的文字

TextField.htmlText = "<b>Html text</b>";
支 持的HTML标签集有: <b>,<i>,<u>,<font>(有face,size以及color属性),< p>,
,<a>,<li>,<img>以及<textformat>(有 leftmargin,rightmargin,blockindent,indent,leading以及tabstops属性,相应于 TextFormat类的同名属性)

缩减空白

TextField.condenseWhite = true;
删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.
注意: 在设置 htmlText 属性之前设置 condenseWhite 属性

自动大小调整和对齐

TextField.autoSize = TextFieldAutoSize.LEFT;
可选之值:
flash.text.TextFieldAutoSize.CENTER
flash.text.TextFieldAutoSize.LEFT
flash.text.TextFieldAutoSize.NONE
flash.text.TextFieldAutoSize.RIGHT

指示文本字段是否自动换行

TextField.wordWrap = true; //自动换行

用程序手段滚动文字

水平方向以像素为单位,而垂直方向以行做单位:
scrollV: 指出文字框可见区域的最顶行,可读写;
bottomScrollV: 指出文字框内最底端可见行,只读;
maxScrollV: scrollV的最大值,只读;
numLines: 定义多行文本字段中的文本行数,只读;
TextField.scrollV = field.maxScrollV; //滚动到最后一页

响应滚动事件

field.addEventListener(Event.SCROLL, onTextScroll);

样式化文字的方法

  1. 使用HTML标签进行样式化;
  2. 使用TextFormat对象;
  3. 使用CSS.
    例如: HTML是用<font>标签,TextFormat对象是设定font属性,而CSS是使用font-family属性的.

受支持的层叠样式表(CSS)属性和值,及其相应的ActionScript属性名称(小括号内):
color(color),display(display),font-family(fontFamily),font-size(fontSize),font-style(fontStyle),font-weight(fontWeight),kerning(kerning),leading(leading),letter-spacing(letterSpacing),margin-left(marginLeft),margin-right(marginRight),text-align(textAlign),text-decoration(textDecoration),text-indent(textIndent)
受支持的HTML实体: <(小于号: <), >(大于号: >), &(和: &), "(双引号: "), '(撇号,单引号: ')
其中样式对象的两种写法:
写法一:
var sampleStyle:Object = new Object();
sampleStyle.color = "#FFFFFF";
sampleStyle.textAlign = "center";
css.setStyle(".sample", sampleStyle);
写法二:
var sampleStyle:Object = {color: "#FFFFFF", textAlign: "center"};
css.setStyle(".sample", sampleStyle);

对用户输入的文字进行样式化

使用defaultTextFormat属性,样式会施加至用户键入输入框的文字身上:
var formatter:TextFormat = new TextFormat();
formatter.color = 0x0000FF; //把文字变成蓝色
field.defaultTextFormat = formatter;

对现有文字的一部分进行样式化

TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void

设定文字框的字体

例子:
HTML: field.htmlText = "<font face='Arial'>Formatted text</font>";
TextFormat: formatter.font = "Arial";
CSS: P{ font-family: Arial; }
也可以使用以逗号隔开的字体清单: formatter.font = "Arial, Verdana, Helvetica";
注意:
字体和字体群组不同.字体群组有三种: _sans,_serif以及_typewriter.
_sans群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier New这种字体.

嵌入字体

使用[Embed]后设标签.[Embed]后设标签应该出现在ActionScript文件中,处于类宣告之外.你可以内嵌TrueType字体或系统字体.内嵌TrueType字体时的语法:
[Embed(source="pathToTtfFile", fontName="FontName", mimeType="application/x-font-truetype")]
pathToTtfFile: ttf文件的路径,TrueType字体的路径可以是相对的,也可以是绝对的;
FontName: 字体名称;
内嵌系统字体的语法:
[Embed(systemFont="Times New Roman", fontName="Times New Roman", mimeType="application/x-font-truetype")]
fontName: 以相同名称作为实际系统字体名称.
注 意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替 embedFonts设为true的TextField使用设备字体,什么都不会显示.如果embedFonts设为true,就无法指定以逗号相隔的字 体清单.

建立可以旋转的文字

使用内嵌字体.当你旋转文字框时,设备字体就会消失.

显示Unicode文字

  1. 从外部来源载入Unicode文字;
  2. 假如你的编辑器支持Unicode(如 Flex Builder),则可以直接在ActionScript程序中使用该字符;
  3. 使用Unicode转义字符,ActionScript里所有Unicode转义字符都以u开头,后面再跟四位十六进制数字.
    注意: 如果你想取得Unicode字符,在Windows下使用: 开始>所有程序>附件>系统工具>字符映射表.

把Flash Player的焦点带给文字框

stage.focus = field;
把焦点移除:
stage.focus = null;
注意: 当.swf文件首次载入至网页浏览器时,并没有焦点.因此,以程序的方式把焦点指定给Flash应用程序的一个元素前,必须先把焦点移至Flash Player.

以ActionScript选取文字

使用TextField.setSelection(beginIndex:int, endIndex:int):void
为了可以正常选取文字,文字框必须具有焦点:
stage.focus = field; //把焦点设给文字框
field.text = "This is example text"; //设定文字
field.setSelection(0, 4); //把"This"这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.

在文字内设定安插点(游标位置)并访问游标位置的索引值

可以使用TextField.setSelection()把起始和结尾的索引参数都设成相同值,在文字内设定游标位置(假设具有焦点):
field.setSelection(0, 0); //在第一个字符前摆放安插点
trace(field.caretIndex); //输出游标位置的索引值

当文本字段受到选取或取消选取时给予响应

获得焦点时: FocusEvent.FOCUS_IN
失去焦点时: FocusEvent.FOCUS_OUT
通过键盘(Tab键)把焦点移除时: FocusEvent.KEY_FOCUS_CHANGE
通过鼠标把焦点移除时: FocusEvent.MOUSE_FOCUS_CHANGE
FocusEvent 类有一个relatedObject属性.就FOCUS_IN事件而言,relatedObject属性是刚才拥有焦点的对象的引用地址;对于 FOCUS_OUT,KEY_FOCUS_CHANGE以及MOUSE_FOCUS_CHANGE事件,relatedObject属性是刚接收到焦点的 对象的引用地址.
FOCUS_IN和FOCUS_OUT事件都是在焦点改变后发生的,所以两者都是不可取消的事件.对于KEY_FOCUS_CHANGE和MOUSE_FOCUS_CHANGE事件,可以使用FocusEvent.preventDefault()方法取消默认行为:
field.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);
private function onKeyFocus(event:FocusEvent):void {

 if(field.text == "") {
     event.preventDefault(); //当field没有任何文字前,不允许使用Tab键把焦点移除
 }
 //event.relatedObject就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址

}

标签: none

文章分类

归档