Horidream’s Blog

have fun with ActionScript 3.0

This movie requires Flash Player 10

List_item_style
Flash IDE自带的组件List如何设置某个item的样式呢?目前有两种解决方式。
(一)通过点击触发ListEvent以取得被点击的item,例如以下代码:

1
2
3
4
5
6
7
8
9
10
import fl.controls.listClasses.*;
import fl.events.ListEvent;
list.addEventListener(ListEvent.ITEM_CLICK,clk);
function clk(e:ListEvent):void {
	var item:CellRenderer=list.itemToCellRenderer(e.item) as CellRenderer;
	trace(item);
	var format:TextFormat=new TextFormat(null,20);
	item.setStyle("textFormat",format);
	list.validateNow();
}

(二)通过itemToCellRenderer和dataProvider.getItemAt的组合取得item的CellRenderer,如以下代码:

11
12
13
14
15
16
17
import fl.controls.*;
var format:TextFormat=new TextFormat("黑体",16,0xFF0000);
format.bold = true;
list2.validateNow();
var item:CellRenderer=list2.itemToCellRenderer(list2.dataProvider.getItemAt(2)) as CellRenderer;
item.setStyle("textFormat",format);
item.setStyle("upSkin",new skin_red());//skin_red为自定义的皮肤样式

使用TweenMax可以轻松实现一组显示对象的动画效果,如下例:
textAnime

This movie requires Flash Player 10

源码如下,供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var str:String = '我爱北京天安门,天安门上太阳升~~\t伟大领袖毛主席,指引我们向前进!!\t\t生产队里养了一群小鸭子,\t我放学回来赶着它们到棚里去。\t小鸭子见着我嘎嘎嘎的叫,\t睡觉吧小鸭子,太阳下山了,\t睡觉吧小鸭子,太阳下山了。\t\tHoridream';
var arr:Array = str.match(/./g);
var len:int = arr.length;
var lettersArr:Array = [];
var canvas:Sprite = new Sprite();
canvas.x = 50;
canvas.y = 40;
addChild(canvas);
var format:TextFormat = new TextFormat("黑体",16);
var ypos:Number = 0;
var xpos:Number = 0;
var lineSpacing:Number = 8;
var letterSpacing:Number = 2;
var filter:GlowFilter = new GlowFilter(0x001122,1,2,2,10);
var filter2:DropShadowFilter = new DropShadowFilter(1,45,0,.5,2,2);
for(var i:int = 0;i<len;i++){
	if(arr[i]=="\t"){
		ypos+=(Number(format.size)+lineSpacing);
		xpos = 0;
		continue;
	}
 
	var tf:TextField = new TextField();
	tf.autoSize = "left";
	tf.text = arr[i];
	format.color = Math.random()*0xFFFFFF;
	tf.setTextFormat(format);
	var s:Sprite = new Sprite();
	s.addChild(tf);
	s.filters = [filter,filter2];
	s.y = ypos;
	s.x = xpos;
	xpos += (Number(format.size)+letterSpacing);
	lettersArr.push(s);
	canvas.addChild(s);
}
import com.greensock.*;
import com.greensock.easing.*;
TweenMax.allFrom(lettersArr, 1, {y:"30", alpha:0, ease:Elastic.easeOut, repeat:-1, yoyo:true, repeatDelay:12}, 0.1);

先新建一个Flex project,选择Application type为Desktop(runs in Adobe AIR)。next->next,把Main application file的扩展名改为.as,这样便建立了一个ActionScript的AIR项目。
changeFileType
不过先别急,还需要在构造函数中激活一下窗口,使用以下语句:

1
stage.nativeWindow.activate();

以下为测试时使用的Hello World源文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	[SWF(width=640,height=480)]
	public class HelloWorld extends Sprite
	{
		public function HelloWorld()
		{
			stage.nativeWindow.activate();
			var tf:TextField = new TextField();
			tf.text = "Hello World!!";
			addChild(tf);
		}
	}
}