如何控制Flash视频的深度(图层位置)?

时间:2009-06-04 15:15:59

标签: flash actionscript video actionscript-2

我想将视频对象放在一个movieClip实例(“mc”)上方,但在另一个movieClip实例(“mc_top”)下面。

我通过将“新视频...”从库中拖到舞台上来实例化_root.flashVid对象,并为其提供实例名称“flashVid”。

我创建mc,然后绘制一个蓝色框,然后创建mc_top,并绘制一个黄色框。 flashVid实例从头开始在舞台(_root)上。现在我如何将flashVid设置为“mc”以上但“mc_top”以下?

// Create movieclips and paint boxes.
var mc:MovieClip = _root.createEmptyMovieClip("test", 
                                              _root.getNextHighestDepth());

mc.beginFill(0x0000ff, 50);
mc.lineStyle(2, 0x0000ff, 100);
mc.moveTo(0,0);
mc.lineTo(400, 0);
mc.lineTo(400,400);
mc.lineTo(0,400);
mc.lineTo(0,0);
mc.endFill();

var mc_top:MovieClip = mc.createEmptyMovieClip("test_top", 
                                               mc.getNextHighestDepth());
mc_top._x = 200;
mc_top.beginFill(0xffff00, 50);
mc_top.lineStyle(2, 0xffff00, 100);
mc_top.moveTo(0,0);
mc_top.lineTo(400, 0);
mc_top.lineTo(400,400);
mc_top.lineTo(0,400);
mc_top.lineTo(0,0);
mc_top.endFill();

// Flash video code (using Video object on stage, no components)
var nc = new NetConnection();
nc.connect(null);
var ns = new NetStream(nc);
ns.play("http://dl.getdropbox.com/u/295386/Stormpulse/my.flv");

// Tell flashVid to play what's coming through the netstream.
_root.flashVid.attachVideo(ns);

3 个答案:

答案 0 :(得分:1)

您所要做的就是将视频放在一个空的动画片段中(如上所述)并根据深度操纵该动画片段。非常简单。

答案 1 :(得分:0)

此答案来自quip.net

的David Stiller

在AS2中,Video类没有任何与深度相关的属性 或者moethods(例如,与MovieClip.swapDepths()对比 方法)。因此,如果您想使用AS2更改视频的深度, 你必须将视频对象包装在影片剪辑中。你必须这样做 给那个包装器影片剪辑一个实例名称,这样你就可以改变它的深度 使用swapDepths()。这也将改变你对attachVideo()的引用 方法

e.g。

// instead of this ...
_root.flashVid.attachVideo(ns);

// ... you'll have to use this ...
_root.wrapperMC.flashVid.attachVideo(ns);

...其中“wrapperMC”代表您给出的任何实例名称 包装器电影剪辑。这有意义吗?

另外需要注意的是,影片剪辑被拖到了舞台上 手的长度总是低于舞台上的电影剪辑 attachMovie()或createEmptyMovieClip()。所以一定要把它们全部附上 使用代码,或者将它们全部拖到舞台上。否则,你必须 “强制”将手动拖动的影片剪辑放入更高的深度 首先使用swapDepths()附加/创建剪辑。

// Declare a reusable variable to manage the
// attachment of three movie clips

// Here's the first usage (note the depth of 3)
var mc:MovieClip = this.attachMovie("contentAbove", "upperSquare", 3);

// Here's the second (the video wrapper, depth of 2)
mc = this.attachMovie("wrapper", "videoWrapper", 2);
// move this one down a tad
mc._y = 80;

// Here's the third (depth of 2)
mc = this.attachMovie("contentBelow", "lowerSquare", 1);
// move this one down even more
mc._y = 160;

// Now wire up the video
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
videoWrapper.flashVid.attachVideo(ns);
ns.play("http://dl.getdropbox.com/u/295386/Stormpulse/my.flv");

答案 2 :(得分:0)

更短的方法是

MovieClip.prototype.swapDepths.call(_root.flashVid,_root.getNextHighestDepth());

通常可以解决问题,请尝试以下代码:

Video.prototype.swapDepths = MovieClip.prototype.swapDepths;
Video.prototype.getDepth = MovieClip.prototype.getDepth;

之后视频的实例将同时提供两种方法...... 要在严格键入视频的变量上没有编译器错误,您需要更新内部函数(在Flash IDE路径中 - 只需在硬盘上搜索 Video.as ,你应该找到它们......然后将 swapDepths getDepth 的声明从 MovieClip.as 复制到 Video.as )...

我不会深入了解细节。你应该看一下函数类的调用方法,并阅读原型在AS和AS2(以及JS和AS3中)的工作方式......

格尔茨

back2dos