与影片剪辑相关的 事件 属性 方法(二)
attachAudio() | 从麦克风硬件中捕获并播放本地音频 |
attachMovie() | 附加库中的SWF文件 |
creatEmptyMovieClip() | 创建一个空的影片剪辑 |
createTextField() | 创建一个空的文体字段 |
duplicateMovieClip() | 复制指定的影片剪辑 |
getBounds() | 返回SWF文件在指定坐标空间中的最小和最大的x、y坐标 |
getBytesLoaded() | 返回为指定影片剪辑加载的字节数 |
getBytesTotal() | 以字节为单位返回影片剪辑的大小 |
getDepth() | 返回影片剪辑的深度 |
getInstanceAtDepth() | 指定某特定深度是否已被影片剪辑所占用 |
getNextHighestDepth() | 指定一个深度值,用户可以将该值传递给其他方法,以确保Flash将该影片剪辑呈现当前影片剪辑所有其他对象面前 |
getSWFVersion() | 返回一个整数,该整数指示所发布的影片剪辑的FlashPlayer版本 |
getTextSnapshot() | 返回指定影片剪辑TextSnapshot对象 |
getURL() | 从一个URL获取文档 |
globalToLocal() | 将点对象的坐标从场景坐标转换为指定影片剪辑的本地坐标 |
gotoAndPlay() | 将播放头转到影片剪辑中的特定帧并播放SWF文件 |
gotoAndStop() | 将播放头转到影片剪辑中的特定帧并停止SWF文件 |
hitTest() | 如果指定影片剪辑的边框与目标影片剪辑的边框交叉,则返回true |
loadMovie() | 将指定的SWF文件加载到影片剪辑中 |
loadVariables() | 将来自URL或其他位置的变量加载到影片剪辑中 |
localToGlovbal() | 将点对象的坐标从影片剪辑的本地坐标转换为全局场景坐标 |
nextFrame() | 将播放头转到影片剪辑的下一帧 |
play() | 播放指定的影片剪辑 |
prevFrame() | 瘵播放头转到影片剪辑的上一帧 |
removeMovieClip() | 如果影片剪辑是用CreateEmptyMovieClip(),duplicateMovieClip()或attachMovie()创建的,则将其从时间轴中删除 |
setMask() | 将影片剪辑指定为另一个影片剪辑的遮罩 |
startDrag() | 将影片剪辑指定为可拖动的并开始拖动该影片剪辑 |
stop() | 停止当前播放的SWF文件 |
stopDrag() | 停止拖动任何正在被拖动的影片剪辑 |
swapDepths() |
交换两个SWF文件的深度级别 |
unloadMovie() | 删除用loadMovie()加载的SWF文件 |
以上表格列举的是:与控制影片剪辑相关的方法及其功能
1)attachAudio()的应用,请把以下程序写在时间轴的第一帧。
var active_mic:Microphone = Microphone.get();
this.createEmptyMovieClip("audio_mc", this.getNextHighestDepth());
audio_mc.attachAudio(active_mic);
这是一段很经典及很有实用性的程序,其功能是:可以直接接收来自于邮寄麦克风的声音,并直接输出,这样一来,本程序充当了音频输入、输出开关,用来做课件,辅助教师声音的扩大有积极的作用,这样就不必要使用胸麦了,当然也省了接收器。
2)attachMovie的应用
this.createEmptyMovieClip("audio_mc", this.getNextHighestDepth());
audio_mc.attachAudio(active_mic);
这是一段很经典及很有实用性的程序,其功能是:可以直接接收来自于邮寄麦克风的声音,并直接输出,这样一来,本程序充当了音频输入、输出开关,用来做课件,辅助教师声音的扩大有积极的作用,这样就不必要使用胸麦了,当然也省了接收器。
2)attachMovie的应用
mc.attachMovie(id:String, name:String, depth:Number, [initObject:Object])
从库中取得一个元件并将其附加到影片剪辑中。
使用
MovieClip.removeMovieClip()
或 MovieClip.unloadMovie()
删除通过 attachMovie
()
方法附加的 SWF 文件。参数解析:
id
:String
- 库中要附加到舞台上某影片剪辑的影片剪辑元件的链接名称。这是在"链接属性"对话框中的"标识符"字段中输入的名称。name
:String
- 附加到该影片剪辑的影片剪辑实例的唯一名称。depth
:Number
- 一个整数,指定 SWF 文件所放位置的深度级别。initObject
:Object
[可选] - (Flash Player 6 和更高版本支持)包含要用来填充新附加的影片剪辑的属性的对象(如大小、位置等)。此参数使动态创建的影片剪辑能够接收剪辑参数。如果 initObject
不是对象,则忽略它。initObject
的所有属性都已复制到新实例中。使用 initObject
指定的属性对于构造函数是可用的。示例
下面的示例将链接标识符为
circle
的元件附加到位于 SWF 文件舞台上的影片剪辑实例中。this.attachMovie("circle", "circle_mc", this.getNextHighestDepth());
其中,circle是一个元件,这是它的链接名称。而circle_mc则是场景中的一个影片剪辑,它的名称是circle_mc,这样全部的代码应写为(写在circle_mc上)
其中,circle是一个元件,这是它的链接名称。而circle_mc则是场景中的一个影片剪辑,它的名称是circle_mc,这样全部的代码应写为(写在circle_mc上)
onClipEvent(mouseDown){
this.attachMovie("circle", "circle_mc", this.getNextHighestDepth());
}
3)creatEmptyMovieClip的应用,用来创建一个空的影片剪辑
}
3)creatEmptyMovieClip的应用,用来创建一个空的影片剪辑
4)createTextField的应用参见实例10
5)duplicateMovieClip的应用。
先看下面的一段代码:
var container:MovieClip = setUpContainer();
//把自定义的setUpContainer()类用于实际,建立一个影片剪辑container
var ln:Number = 10;
var ln:Number = 10;
//用于循环的计数器
var spacer:Number = 1;
var spacer:Number = 1;
//用于间隔各复制影片剪辑的位置
var duplicate:MovieClip;
var duplicate:MovieClip;
//用以接收每一次复制成功的影片剪辑
for(var i:Number = 1; i < ln; i++) {
var newY:Number = i * (container._height + spacer);
duplicate = container.duplicateMovieClip("clip-" + i, i, {_y:newY});
for(var i:Number = 1; i < ln; i++) {
var newY:Number = i * (container._height + spacer);
duplicate = container.duplicateMovieClip("clip-" + i, i, {_y:newY});
//通过循环复制十个相同的影片剪辑,但位置X相同,Y却不同
trace(duplicate); // _level0.clip-[number]
trace(duplicate); // _level0.clip-[number]
//输出信息
}
}
//建立一个自定义函数setUpContainer,目的便是用来做一个长方形的影片剪辑
function setUpContainer():MovieClip {
//为新建立的影片剪辑类函数命名
var mc:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var mc:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
//新建影片剪辑mc
var w:Number = 100;
var h:Number = 20;
//W和H用来定位mc的内容
var w:Number = 100;
var h:Number = 20;
//W和H用来定位mc的内容
mc.beginFill(0x333333);
mc.lineTo(w, 0);
mc.lineTo(w, h);
mc.lineTo(0, h);
mc.lineTo(0, 0);
mc.endFill();
return mc;
mc.lineTo(w, 0);
mc.lineTo(w, h);
mc.lineTo(0, h);
mc.lineTo(0, 0);
mc.endFill();
return mc;
//beginFill、endFill分别为画框活动的开始和结尾
}
}
运行效果:
![](/images/cnblogs_com/cooolbin/4a317cc802000cfk_0.png)
![](/images/cnblogs_com/cooolbin/4a317cc802000cfk_0.png)
输出面板内容为:
_level0.clip-1
_level0.clip-2
_level0.clip-3
_level0.clip-4
_level0.clip-5
_level0.clip-6
_level0.clip-7
_level0.clip-8
_level0.clip-9
_level0.clip-2
_level0.clip-3
_level0.clip-4
_level0.clip-5
_level0.clip-6
_level0.clip-7
_level0.clip-8
_level0.clip-9
_level0.clip-10
6)getBounds的应用。
影片剪辑在场景中一般会有以下四个位置属性:
xMin
、xMax
、yMin
和 yMax
。这四个属性可以用一个方法getBounds来探测,如果想输出则需要将其存放在一个数组当中下面的示例创建一个名为
square_mc
的影片剪辑。代码为该影片剪辑绘制一个正方形,并使用 MovieClip.getBounds()
在"输出"面板中显示实例的坐标值。this.createEmptyMovieClip("square_mc", 1);
square_mc._x = 10;
square_mc._y = 10;
square_mc.beginFill(0xFF0000);
square_mc.moveTo(0, 0);
square_mc.lineTo(100, 0);
square_mc.lineTo(100, 100);
square_mc.lineTo(0, 100);
square_mc.lineTo(0, 0);
square_mc.endFill();
var bounds_obj:Object = square_mc.getBounds(this);
square_mc._x = 10;
square_mc._y = 10;
square_mc.beginFill(0xFF0000);
square_mc.moveTo(0, 0);
square_mc.lineTo(100, 0);
square_mc.lineTo(100, 100);
square_mc.lineTo(0, 100);
square_mc.lineTo(0, 0);
square_mc.endFill();
var bounds_obj:Object = square_mc.getBounds(this);
//把xMin、
for (var i in bounds_obj) {
xMax
、yMin
和 yMax四个属性存放到数组bounds_obj中
for (var i in bounds_obj) {
//分别取bounds_obj的四个值当中的一个
trace(i+" --> "+bounds_obj[i]);
trace(i+" --> "+bounds_obj[i]);
/*输出bounds_obj各项的值(如i=1时会输出yMax,依次类推,分别为:yMin、xMax、xMin。而bounds_obj[1]代表的是最y的最大值110,之后依次是:10、110、10*/
}
运行后的效果为:
![](/images/cnblogs_com/cooolbin/4a317cc802000cfl_0.png)
![](/images/cnblogs_com/cooolbin/4a317cc802000cfl_0.png)
7)getBytesLoaded的应用
返回已加载(流处理)的影片剪辑的字节数。您可以将此值与
MovieClip.getBytesTotal()
返回的值进行比较以确定已加载影片剪辑的百分比。(这本身就是一项重要应用)8)getBytesTotal的应用以字节为单位返回影片剪辑的大小。
9)getDepth的应用
在场景中的第一帧输入以下代码,作用是测试场景中所有元件,如果该元件是影片剪辑(别的不测试)则输出它的名称及它所处的深度。
for (var i in this) {
//this代表在这一场景当中,i代表场景中的某一个元件,有可能是影片剪辑
if (typeof (this[i]) == "movieclip") {
//typeof是用来测试数据类型的,即:如果场景中的这个元件是影片剪辑
trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth());
//输出movie clip 名称 它的深度是***
}
}
//this代表在这一场景当中,i代表场景中的某一个元件,有可能是影片剪辑
if (typeof (this[i]) == "movieclip") {
//typeof是用来测试数据类型的,即:如果场景中的这个元件是影片剪辑
trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth());
//输出movie clip 名称 它的深度是***
}
}
运行后的结果:
![](https://www.cnblogs.com/images/cnblogs_com/cooolbin/4a317cc802000cfm_0.png)
![](https://www.cnblogs.com/images/cnblogs_com/cooolbin/4a317cc802000cfm_0.png)
10)getNextHighestDepth的应用。
下列示例使用
getNextHighestDepth
()
方法作为 createEmptyMovieClip()
方法的 depth
参数绘制三个影片剪辑实例,并使用每个影片剪辑的深度作为各自的标签:场景第一帧的代码如下:
//利用循环方式绘制出三个影片剪辑
for (i = 0; i < 3; i++) {
drawClip(i);
}
for (i = 0; i < 3; i++) {
drawClip(i);
}
function drawClip(n:Number):Void {
//void 运算符计算表达式,然后放弃其值,返回 undefined,在这里指每一次使用完n值时将其放弃
this.createEmptyMovieClip("triangle" + n, this.getNextHighestDepth());
//新建一个影片剪辑triangle+n,深度为最上层。
var mc:MovieClip = eval("triangle" + n);
//把该影片剪辑赋值给mc
//以下用来绘制该影片剪辑
mc.beginFill(0x00aaFF, 100);
mc.lineStyle(4, 0xFF0000, 100);
mc.moveTo(0, 0);
mc.lineTo(100, 100);
mc.lineTo(0, 100);
mc.lineTo(0, 0);
mc._x = n * 30;
mc._y = n * 50
mc.createTextField("label", this.getNextHighestDepth(), 20, 50, 200, 200)
//为mc影片剪辑创建一个用以显示信息的文本字段label,并设置它的深度及显示的大小范围
mc.label.text = mc.getDepth();
//为刚创建的label文本区赋深度值,这样该深度值就可以在影片剪辑上显示出来
}
//void 运算符计算表达式,然后放弃其值,返回 undefined,在这里指每一次使用完n值时将其放弃
this.createEmptyMovieClip("triangle" + n, this.getNextHighestDepth());
//新建一个影片剪辑triangle+n,深度为最上层。
var mc:MovieClip = eval("triangle" + n);
//把该影片剪辑赋值给mc
//以下用来绘制该影片剪辑
mc.beginFill(0x00aaFF, 100);
mc.lineStyle(4, 0xFF0000, 100);
mc.moveTo(0, 0);
mc.lineTo(100, 100);
mc.lineTo(0, 100);
mc.lineTo(0, 0);
mc._x = n * 30;
mc._y = n * 50
mc.createTextField("label", this.getNextHighestDepth(), 20, 50, 200, 200)
//为mc影片剪辑创建一个用以显示信息的文本字段label,并设置它的深度及显示的大小范围
mc.label.text = mc.getDepth();
//为刚创建的label文本区赋深度值,这样该深度值就可以在影片剪辑上显示出来
}
运行后结果如下:
![](/images/cnblogs_com/cooolbin/4a317cc802000cfn_0.png)
![](/images/cnblogs_com/cooolbin/4a317cc802000cfn_0.png)
11)getURL的应用
假设场景中有一个影片剪辑为mc,现在要实现的代码为:
_root.mc.getURL("http://www.baidu.com","_blank");
则功能为:当运行时只要场景中存在mc,则就会弹出百度的首页来。
12)gotoAndPlay() gotoAndStop() stop() play() nextFrame() prevFrame() 的应用易掌握,在这里不赘述。
13)loadMovie()的应用
使用方式一:以下示例从同一目录加载 SWF 文件 circle.swf,并替换舞台上已存在的名为
mySquare
的影片剪辑:loadMovie("circle.swf", mySquare);
使用方式二:下面的示例从同一目录加载 SWF 文件 circle.swf,但替换主影片剪辑而不是
mySquare
影片剪辑:loadMovie("circle.swf", this);
注:这时circle.swf文件的加载位置将会是对齐左角,也就是(0,0)。
使用方式三:下面的
loadMovie("sub.swf", logo_mc);
loadMovie
()
语句将 SWF 文件 sub.swf 从同一目录加载到使用 createEmptyMovieClip()
创建的名为 logo_mc
的新影片剪辑中:this.createEmptyMovieClip("logo_mc", 999);loadMovie("sub.swf", logo_mc);
使用方式四:您可以添加以下代码,以从加载 sub.swf 的 SWF 文件所在的同一目录加载名为 image1.jpg 的 JPEG 图像。当您单击名为
myBtn_btn.onRelease = function(){
loadMovie("image1.jpg", logo_mc);
};
注:图片会占据影片剪辑logo_mc的位置,如果该图片很大,那么场景的大小会限制图片的显示范围,但logo_mc影片剪辑并无法限制图片的显示范围。
myBtn_btn
的按钮时,将加载该 JPEG。此代码将 JPEG 加载到 logo_mc
中。因此,它将 sub.swf 替换为 JPEG 图像。myBtn_btn.onRelease = function(){
loadMovie("image1.jpg", logo_mc);
};
注:图片会占据影片剪辑logo_mc的位置,如果该图片很大,那么场景的大小会限制图片的显示范围,但logo_mc影片剪辑并无法限制图片的显示范围。
14)startDrag()及stopDrag()的应用
假设场景中有一个影片剪辑mm,想拖在按下左键拖动时让该影片剪辑随之而移动,当释放左键时影片剪辑停止拖动,代码如下:(写在第一帧)
mm.onPress = function () {
startDrag(this);
}
startDrag(this);
}
mm.onRelease = function() {
stopDrag();
}
注:startDrag(this)内的this不能忘,忘了之后就不起作用并全出现问题。
stopDrag();
}
注:startDrag(this)内的this不能忘,忘了之后就不起作用并全出现问题。