Как я могу контролировать глубину (положение слоя) Flash Video? - PullRequest
1 голос
/ 04 июня 2009

Я хотел бы поместить видеообъект выше одного экземпляра 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 ]

1 голос
/ 05 июня 2009

Все, что вам нужно сделать, это поместить видео в пустой мувиклип (как предложено выше) и манипулировать этим мувиклипом с точки зрения глубины. Очень просто.

0 голосов
/ 05 июня 2009

более короткий подход будет

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

Чтобы решить проблему, попробуйте следующий код:

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

После этого Video будут доступны оба метода ... чтобы не было ошибок компилятора для переменных, строго типизированных как Video , вам необходимо обновить встроенные функции (по пути IDE для флэш-памяти - просто найдите Video.as на жестком диске и вы должны их найти ... затем скопируйте объявления swapDepths и getDepth из MovieClip.as в Video.as ). ..

я не буду вдаваться в детали для объяснения. вам следует взглянуть на метод call класса Function и прочитать о том, как прототипы работают в AS и AS2 (и немного в JS и AS3) ...

Greetz

back2dos

0 голосов
/ 04 июня 2009

Этот ответ от Дэвида Стиллера из quip.net

В AS2 класс Video не имеет свойств, связанных с глубиной или 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");
...