2009-06-04 79 views
1

我想将一个视频对象放在一个movieClip实例(“mc”)上面,但在另一个movieClip实例(“mc_top”)下面。如何控制Flash视频的深度(图层位置)?

我通过将“New Video ...”从库中拖到舞台上,并为其指定实例名称“flashVid”来实例化_root.flashVid对象。

我创建mc,然后绘制一个蓝色框,然后创建mc_top并绘制一个黄色框。 flashVid实例从一开始就位于舞台(_root)上。现在我如何获得“mc”以上但“mc_top”以下的flashVid?

// 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); 

回答

0

这个答案是从大卫·斯蒂勒的quip.net

在AS2中,视频类不提供任何深度相关的属性 或moethods(此对比,例如,与MovieClip。 swapDepths() 方法)。因此,如果您想用AS2, 更改视频的深度,则必须将视频对象包装到影片剪辑中。您必须 为该包装影片剪辑指定一个实例名称,因此您可以使用swapDepths()更改其深度 。这也会改变您对attachVideo()方法的参考。

例如

// 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"); 
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.asVideo.as)...

我不会详细解释。你应该看看在类功能呼叫方法和了解原型在AS和AS2(和JS和AS3一点)是如何工作的?

格尔茨

back2dos

1

所有你需要做的就是把视频放在一个空的movieclip中(如上面所建议的那样),并在深度方面操纵该movieclip。很简单。