Flash中一个fla文件可以关联到一个as文件,这个有点类似于asp.net中的code behind.
注:
1.as文件的类名与文件名要求一样,并且默认情况下必须与fla处于同一目录。
2.所有as文件必须继承自flash.display.Sprite
下面这个是一个示例文件代码:
package
{
import
flash.display.Sprite;
import
fl.controls.Label;
import
fl.controls.Button;
import
fl.controls.List;
import
flash.text.TextFieldAutoSize;
import
flash.events.MouseEvent;
import
fl.data.DataProvider;
public
class
AddControlCode
extends
Sprite {
public
function
AddControlCode() {
//加一个label
var
_label:Label =
new
Label();
_label.text=
"来来,我是一个Label"
;
_label.width=
150
;
_label.autoSize=TextFieldAutoSize.CENTER;
_label.addEventListener(MouseEvent.CLICK,
function
(){
trace
(_label.text =
"文本被点击了"
)});
//象不象c#中的匿名函数?
this
.addChild(_label);
//加一个Button
var
_btn:Button =
new
Button();
_btn.
label
=
"来来,我是一个Button"
;
_btn.width=
150
;
this
.addChild(_btn);
//获取舞台尺寸
var
w:
int
=stage.stageWidth;
var
h:
int
=stage.stageHeight;
trace
(
"宽度:"
+ w +
",高度:"
+ h);
//将Label与Button移动到水平中心点
_label.move((w-_label.width)/
2
,
10
);
_btn.move((w-_btn.width)/
2
,
50
);
_btn.addEventListener(MouseEvent.CLICK,btnClick);
//给Button添加点击事件
//添加一个List控件
var
_lst:List =
new
List();
var
dp:
Array
=
new
Array
();
var
i:
uint
;
var
count:
uint
= _lst.rowCount *
2
;
for
(i=
0
;i<count;i++){
dp.push({
label
:
"元素"
+ i});
}
_lst.allowMultipleSelection =
true
;
//允许多选
_lst.dataProvider =
new
DataProvider(dp);
//绑定数据源
this
.addChild(_lst);
}
//鼠标点击处理函数
function
btnClick(e:MouseEvent) {
trace
(
"你点了我一下,这是证据:"
+ e);
}
}
}
默认情况下,如果您运行这段代码会发现根本没办法编译通过,通常会提示: 未发现fl.controls.Label之类,解决办法:
先在设计视图中,拖一个Label控件到舞台上,然后再删除就行了,其它组件类似处理
个人猜测:就好比Winform中,我们引用某命名空间时,通常光using ...后,还需要添加对某程序集的引用,类似的:fla默认可能没有添加fl.controls.Label的"程序集"引用,哪怕你在代码中import过了,但是运行时仍然找不到这个包,而手动拖一个到舞台上后,强迫flash自动添加了相关引用
最后一个问题:如果组件不全是动态添加的,比如在设计视图下直接把一个Label拖动舞台上,在对应的as文件中如何引用呢?
其实也很简单,只要在设计视图中给组件指定一个实例名(比如lbl123),然后就能在as文件中直接用lbl123.text = "..."来使用了