2009-06-04 10 views
1

私は1つのmovieClipインスタンス( "mc")の上にあるが、別のmovieClipインスタンス( "mc_top")の下にビデオオブジェクトを配置したいと考えています。Flash Videoの深度(レイヤーの位置)を制御するにはどうすればよいですか?

"New Video ..."をライブラリからステージにドラッグし、インスタンス名を "flashVid"として_root.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); 

答えて

0

この答えはAS2でquip.net

のデビッド・スティラーからで、ビデオクラスには、ムービークリップで、例えば、このコントラスト(任意の深関連のプロパティ またはmoethodsを備えていません。 swapDepths() メソッド)。このため、AS2でビデオの深度を変更する場合は、 を使用すると、ビデオオブジェクトをムービークリップ内にラップする必要があります。そのラッパーのムービークリップにインスタンス名を指定すると にする必要があります。そのため、swapDepths()で深さを変更することができます。 これにより、attachVideo() メソッドの参照も変更されます。

「wrapperMCは」あなたが ラッパームービークリップを与えてくれたものは何でもインスタンス名を表します

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

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

...。それは理にかなっていますか?注意すべき

他のものは、低い常に 手動でステージにドラッグし、そのムービークリップであり、深さ方向、ムービークリップは に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; 

その後ビデオのインスタンスは、両方の方法が利用可能になります... 変数のコンパイラエラーが厳密にと入力されていない場合、ビデオ、その後、から両方swapDepthsgetDepthの宣言をコピー...ちょうどあなたのハードディスク上Video.asを検索し、あなたがそれらを見つける必要があります - あなたはフラッシュIDEパスに(あなたの組み込み関数を更新する必要がありますMovieClip.asVideo.as)...

私は説明のために詳細を掘り下げません。あなたは

greetz ...クラス機能呼び出し方法を見て、プロトタイプがASおよびAS2(とJSとAS3少し)でどのように機能するかについてお読みください

back2dos

1

あなたがしなければならないのは、空のムービークリップ(上記のように)の中にビデオを置いて、そのムービークリップを深さの面で操作することだけです。非常に簡単です。

関連する問題