From:http://www.xncat.com/2009/11/catflash/57.html
1. 嵌入式资源,Embed 标签
首先需要加入 flex sdk 才能支持编译 Embed 标签,flash 有默认的 Flex SDK 路径。
file=>publish seteeing=>actionscript settings=>library path
$(FlexSDK)/frameworks/libs/flex.swc
示例见:trainEmbedEmbed.fla
//Embed image
[Embed(source="image.png")]
var pic0:Class;
//Embed swf [Embed(source="baishi_car.swf")] var swf0:Class;
var pic:Bitmap = new pic0() as Bitmap;
addChild(pic);
var swf:Sprite = new swf0() as Sprite;
addChild(swf);
swf.x = pic.width+10;
2.链接资源库,linkage 类绑定
在库中右击需要链接的元件,进入 Propertiyes=>Linkage,勾选 Export forActionScript
并在 source 中浏览到这个 fla 文件,选择到这个链接的元件
这样就生成了一个绑定此元件的类文件,我们可以直接创建这个类的实例了。 在库中可以看到状态的变化
示例见:trainLinkageLinkage.fla var tudoulogo:Sprite = new logo(); addChild(tudoulogo);
//跑一个循环,生成三个土豆 logo 吧
for(var i:uint=0;i<3;i++){
var logomc:Sprite = new logo();
addChild(logomc);
logomc.y = logomc.height + 40 + i*logomc.height;
}
3.使用 swc 文件
swc 文件中可能包含一到多个类文件 我们先要导入 swc 文件,然后就可以创建其中包含的类实例
在 Library path 中导入具体的 swc 文件,也可以只导入包含 swc 文件的文件夹即可
示例见:trainSwcLibswcSource.fla
var anim:Sprite = new anim6() as Sprite;
addChild(anim);
anim.x = (stage.stageWidth - anim.width)/2;
anim.y = (stage.stageHeight – anim.height)/2;
//访问它的子对象,控制动画播放
var animMc:MovieClip = anim.getChildByName("ch") as MovieClip;
anim.addEventListener(MouseEvent.CLICK,animclick);
function animclick(e:MouseEvent):void{
animMc.gotoAndPlay(2);
4.访问 load 进来的 swf
一.直接访问 loader 对象就可以获得加载进来的 flash 文件的对象内容 示例见:trainGetLoadSwfgetLoadSwf.fla
var loader:Loader = new Loader();
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("baishi_car.swf"));
function completeHandler(evt:Event):void{
var _loaderInfo : LoaderInfo = evt.target as LoaderInfo;
var _content:DisplayObject = _loaderInfo.content;
trace(_content);
}
二.Embed 进来的资源如何访问呢?其实也是类似的
示例见:trainGetLoadSwfgetEmbed.fla
//Embed swf
[Embed(source="baishi_car.swf")]
var swf0:Class;
var swf:Sprite = new swf0() as Sprite;
addChild(swf);
//get Embed content
//需要访问 swf 对象的第一个子对象,它才是嵌入对象的 loader 对象 var loadObj:Object = swf.getChildAt(0); loadObj.contentLoaderInfo.addEventListener(Event.COMPLETE,loadSwfComplete);
function loadSwfComplete(evt:Event):void {
var _loaderInfo:LoaderInfo=evt.target as LoaderInfo;
var _content:DisplayObject=_loaderInfo.content;
trace(_content);
}
5.访问父对象与访问子对象
访问父对象使用属性 parent 即可,例如:
childMc.parent 即为 childMc 的父对象。 下面这样写是可以访问父对象的父对象的: childMc.parent.parent
访问子对象有两种方法
parentMc.getChildByName(“childName”)
parentMc.getChildAt(index)
childName为对象的实例名 对象的实例名可以在 flashide 中手动输入,
也可以用代码赋值:childMc.name = “child1”。
Index 为子对象的索引位置
在 flashide 中从库中往舞台或 mc 中拖元件即为增加舞台或 mc 的子对象,也可以用代码增加子对象:addChild(newChildMc);
往显示对象中增加子对象的时候,默认按增加的先后从 0 往上增加索引位置。
可以在增加的时候指定子对象到索引位置 addChildAt(index); 但这个 index 索引值不能大于该对象最大的索引位置+1, 并且这个 index 索引位置之后的子对象的索引值自动加 1。
可以在增加之后再设置子对象的索引 setChildIndex(chidlMc,index); 这个 index 索引值不能大于该对旬最大的索引位置, 并且这个 index 索引位置之后的子对象的索引值自动加 1。
示例见:trainParent_childparent_child.fla
mainChildBt.addEventListener(MouseEvent.CLICK,clickfunc);
mainParentBt.addEventListener(MouseEvent.CLICK,clickfunc);
function clickfunc(e:MouseEvent):void{
if(e.target == mainChildBt){
for(var i:uint=0;i<main.numChildren;i++){
var childMc:MovieClip = main.getChildAt(i) as MovieClip;
childMc.gotoAndStop(2);
}
}else if(e.target == mainParentBt){
var parentMc:MovieClip = main.parent as MovieClip;
parentMc.gotoAndStop(2);
}
}
6.访问 movieClip 与 sprite 对象的声音
movieClip 与 sprite 对象都有一个 soundTransform 属性,通过这个属性来控制声音。
示例见:trainSoundsound.fla
// _content 是一个 movieClip 或者 sprite
//new SoundTransform
var st:SoundTransform = new SoundTransform();
//静音按钮
sBt.addEventListener(MouseEvent.CLICK,sbtFunc);
sBt.buttonMode=true;
function sbtFunc(e:MouseEvent):void {
var tag:MovieClip=e.target as MovieClip;
if (sBt.currentFrame==1) {
st.volume=1;
_content.soundTransform=st;
sBt.gotoAndStop(2);
} else if (sBt.currentFrame == 2) {
st.volume=0;
_content.soundTransform=st;
sBt.gotoAndStop(1);
}
}
访问flash中的各种元素附件
1. 嵌入式资源,Embed 标签
首先需要加入 flex sdk 才能支持编译 Embed 标签,flash 有默认的 Flex SDK 路径。
file=>publish seteeing=>actionscript settings=>library path
$(FlexSDK)/frameworks/libs/flex.swc
示例见:trainEmbedEmbed.fla
//Embed image
[Embed(source="image.png")]
var pic0:Class;
//Embed swf [Embed(source="baishi_car.swf")] var swf0:Class;
var pic:Bitmap = new pic0() as Bitmap;
addChild(pic);
var swf:Sprite = new swf0() as Sprite;
addChild(swf);
swf.x = pic.width+10;
2.链接资源库,linkage 类绑定
在库中右击需要链接的元件,进入 Propertiyes=>Linkage,勾选 Export forActionScript
并在 source 中浏览到这个 fla 文件,选择到这个链接的元件
这样就生成了一个绑定此元件的类文件,我们可以直接创建这个类的实例了。 在库中可以看到状态的变化
示例见:trainLinkageLinkage.fla var tudoulogo:Sprite = new logo(); addChild(tudoulogo);
//跑一个循环,生成三个土豆 logo 吧
for(var i:uint=0;i<3;i++){
var logomc:Sprite = new logo();
addChild(logomc);
logomc.y = logomc.height + 40 + i*logomc.height;
}
3.使用 swc 文件
swc 文件中可能包含一到多个类文件 我们先要导入 swc 文件,然后就可以创建其中包含的类实例
在 Library path 中导入具体的 swc 文件,也可以只导入包含 swc 文件的文件夹即可
示例见:trainSwcLibswcSource.fla
var anim:Sprite = new anim6() as Sprite;
addChild(anim);
anim.x = (stage.stageWidth - anim.width)/2;
anim.y = (stage.stageHeight – anim.height)/2;
//访问它的子对象,控制动画播放
var animMc:MovieClip = anim.getChildByName("ch") as MovieClip;
anim.addEventListener(MouseEvent.CLICK,animclick);
function animclick(e:MouseEvent):void{
animMc.gotoAndPlay(2);
4.访问 load 进来的 swf
一.直接访问 loader 对象就可以获得加载进来的 flash 文件的对象内容 示例见:trainGetLoadSwfgetLoadSwf.fla
var loader:Loader = new Loader();
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("baishi_car.swf"));
function completeHandler(evt:Event):void{
var _loaderInfo : LoaderInfo = evt.target as LoaderInfo;
var _content:DisplayObject = _loaderInfo.content;
trace(_content);
}
二.Embed 进来的资源如何访问呢?其实也是类似的
示例见:trainGetLoadSwfgetEmbed.fla
//Embed swf
[Embed(source="baishi_car.swf")]
var swf0:Class;
var swf:Sprite = new swf0() as Sprite;
addChild(swf);
//get Embed content
//需要访问 swf 对象的第一个子对象,它才是嵌入对象的 loader 对象 var loadObj:Object = swf.getChildAt(0); loadObj.contentLoaderInfo.addEventListener(Event.COMPLETE,loadSwfComplete);
function loadSwfComplete(evt:Event):void {
var _loaderInfo:LoaderInfo=evt.target as LoaderInfo;
var _content:DisplayObject=_loaderInfo.content;
trace(_content);
}
5.访问父对象与访问子对象
访问父对象使用属性 parent 即可,例如:
childMc.parent 即为 childMc 的父对象。 下面这样写是可以访问父对象的父对象的: childMc.parent.parent
访问子对象有两种方法
parentMc.getChildByName(“childName”)
parentMc.getChildAt(index)
childName为对象的实例名 对象的实例名可以在 flashide 中手动输入,
也可以用代码赋值:childMc.name = “child1”。
Index 为子对象的索引位置
在 flashide 中从库中往舞台或 mc 中拖元件即为增加舞台或 mc 的子对象,也可以用代码增加子对象:addChild(newChildMc);
往显示对象中增加子对象的时候,默认按增加的先后从 0 往上增加索引位置。
可以在增加的时候指定子对象到索引位置 addChildAt(index); 但这个 index 索引值不能大于该对象最大的索引位置+1, 并且这个 index 索引位置之后的子对象的索引值自动加 1。
可以在增加之后再设置子对象的索引 setChildIndex(chidlMc,index); 这个 index 索引值不能大于该对旬最大的索引位置, 并且这个 index 索引位置之后的子对象的索引值自动加 1。
示例见:trainParent_childparent_child.fla
mainChildBt.addEventListener(MouseEvent.CLICK,clickfunc);
mainParentBt.addEventListener(MouseEvent.CLICK,clickfunc);
function clickfunc(e:MouseEvent):void{
if(e.target == mainChildBt){
for(var i:uint=0;i<main.numChildren;i++){
var childMc:MovieClip = main.getChildAt(i) as MovieClip;
childMc.gotoAndStop(2);
}
}else if(e.target == mainParentBt){
var parentMc:MovieClip = main.parent as MovieClip;
parentMc.gotoAndStop(2);
}
}
6.访问 movieClip 与 sprite 对象的声音
movieClip 与 sprite 对象都有一个 soundTransform 属性,通过这个属性来控制声音。
示例见:trainSoundsound.fla
// _content 是一个 movieClip 或者 sprite
//new SoundTransform
var st:SoundTransform = new SoundTransform();
//静音按钮
sBt.addEventListener(MouseEvent.CLICK,sbtFunc);
sBt.buttonMode=true;
function sbtFunc(e:MouseEvent):void {
var tag:MovieClip=e.target as MovieClip;
if (sBt.currentFrame==1) {
st.volume=1;
_content.soundTransform=st;
sBt.gotoAndStop(2);
} else if (sBt.currentFrame == 2) {
st.volume=0;
_content.soundTransform=st;
sBt.gotoAndStop(1);
}
}
访问flash中的各种元素附件