AS3.0编程的100个小技巧(4)数组和文本框

【向数组尾端添加元素】

var array:Array = new Array();

array.push("a", "b");

//向数组尾端添加单一元素也可以这样:

array[array.length] = "c";

//如果以索引设定的元素不存在,数组本身会自动扩展以包含足够的元素数目.介于中间的元素会被设为undefined:

array[5] = "e";

trace(array[4]); //输出: undefined

 
【向数组开端添加元素】

var array:Array = ["a", "b"];

array.unshift("c", "d");

trace(array); //输出: c,d,a,b

 
【删除数组中第一个元素并返回该元素,使用shift()方法】

var letters:Array = new Array("a", "b", "c");

var firstLetter:String = letters.shift();

trace(letters); //输出: b,c

trace(firstLetter); //输出: a

 
【删除数组中最后一个元素并返回该元素的值,使用pop()方法】

var letters:Array = new Array("a", "b", "c");

trace(letters); //输出: a,b,c

var letter:String = letters.pop();

trace(letters); //输出: a,b

trace(letter); //输出: c

 
【删除数组中的元素,给数组添加新元素并返回删除的元素,使用splice()方法】

splice(startIndex:int, deleteCount:uint, ... values):Array

startIndex: 一个整数,它指定数组中开始进行插入或删除的位置处的元素的索引;

deleteCount: 一个整数,它指定要删除的元素数量;

... values: 用逗号分隔的一个或多个值的可选列表或数组,此列表或数组将插入到此数组中由 startIndex 参数指定的位置.

 
【查找数组中第一个相匹配的元素】

var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];

var match:String = "b";

for(var i:int = 0; i < array.length; i++) {

    if(array[i] == match) {

        trace("Element with index " + i + " found to match " + match);

        //输出: Element with index 1 found to match b

        break;

    }

}

 
【查找数组中最后一个相匹配的元素】

var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];

var match:String = "b";

for(var i:int = array.length - 1; i >= 0; i--) {

    if(array[i] == match) {

        trace("Element with index " + i + " found to match " + match);

        //输出: Element with index 5 found to match b

        break;

    }

}

 
【把字符串转成数组】

使用String.split()方法:

var list:String = "I am YoungBoy.";

var words:Array = list.split(" "); //以空格作为分隔符将字符串切割

trace(words); //输出: I,am,YoungBoy.

 
【把数组转成字符串】

使用String.join()方法:

var myArr:Array = new Array("one", "two", "three");

var myStr:String = myArr.join(" and ");

trace(myArr); //输出: one,two,three

trace(myStr); //输出: one and two and three

 
【使用对象数组处理相关数据】

var cars:Array = new Array();

cars.push({make:"Mike", year:1997, color:"blue"});

cars.push({make:"Kelly", year:1986, color:"red"});

for(var i:int = 0; i < cars.length; i++) {

    trace(cars[i].make + " - " + cars[i].year + " - " + cars[i].color);

}

//输出:

//     Mike - 1997 - blue

//     Kelly - 1986 - red

 
【在数组中获取最小或最大值】

var scores:Array = [10, 4, 15, 8];

scores.sort(Array.NUMERIC);

trace("Minimum: " + scores[0]);

trace("Maximum: " + scores[scores.length - 1]);

 
【使用for ... in语句读取关联数组元素】

var myObject:Object = new Object();

myObject.name = "YoungBoy";

myObject.age = 20;

for(var i:String in myObject) {

    trace(i + ": " + myObject[i]);

}

//输出: name: YoungBoy

//      age: 20

注意: for ... in循环不会显示对象所有的内建属性.例如,循环会显示执行期间新增的特殊属性,但是,不会列出内建对象的方法,即使都是储存在对象属性内.

 
【AVM(ActionScript Virtual Machine,虚拟机)和渲染引擎(Rendering Engine)】

AVM负责执行ActionScript程序,而渲染引擎则是把对象绘制在显示器上.

 
【指出容器的显示清单中有多少显示对象】

每个容器都有numChildren属性.

 
【把项目新增至显示清单】

addChild(child:DisplayObject)

addChildAt(child:DisplayObject, index:int)

index: 添加该子项的索引位置.如果指定当前占用的索引位置,则该位置以及所有更高位置上的子对象会在子级列表中上移一个位置.

 
【从显示清单中移除项目】

removeChild(child:DisplayObject)

removeChildAt(index:int)

index: 要删除的 DisplayObject 的子索引,该子项之上的任何显示对象的索引位置都减去1.

如果想移除窗口所有子元件,可以结合removeChildAt(),numChildren属性以及for循环.因为每次一个子元件被移除时,索引位置都会变化,所以,有两种方法可以处理所有子元件的移除:

1. 总是移除位置0的子元件;

2. 倒过来移除子元件,也就是从尾端开始.

 
【更改现有子项在显示对象容器中的位置】

setChildIndex(child:DisplayObject, index:int):void

可能用到的方法:

返回 DisplayObject 的 child 实例的索引位置: getChildIndex(child:DisplayObject):int

返回位于指定索引处的子显示对象实例: getChildAt(index:int):DisplayObject

注意: 当子元件移到低于它现在所在位置的索引时,那么,从标的索引起,直到子元件索引前面的那个索引的所有子元件都会令其索引增加1,而该子元件就会指定至标的索引.当子元件移到较高索引时,从该子元件索引之上的那个索引起,直到标的索引的所有子元件都会令其索引往下减1,而该子元件就会指定至标的索引值.

 
【关于TextField以垂直方式把文字摆在按钮表面中心点的小技巧】

textField.y = (_height - textField.textHeight) / 2;

textField.y -= 2; //减2个像素以调整偏移量

 
【外部.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>,<br>,<a>,<li>,<img>以及<textformat>(有leftmargin,rightmargin,blockindent,indent,leading以及tabstops属性,相应于TextFormat类的同名属性)

 
【缩减空白】

TextField.condenseWhite = true;

删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.

注意: 在设置 htmlText 属性之前设置 condenseWhite 属性

你可能感兴趣的:(as3)