2009-06-04 3 views
1

Je voudrais placer un objet vidéo au-dessus d'une occurrence de movieClip ("mc"), mais en dessous d'une autre occurrence de movieClip ("mc_top").Comment puis-je contrôler la profondeur (position de la couche) d'une vidéo Flash?

J'ai instancié l'objet _root.flashVid en faisant glisser une "nouvelle vidéo ..." de la bibliothèque sur la scène, et en lui donnant le nom d'instance "flashVid".

Je crée mc, puis je peins une boîte bleue, puis je crée mc_top et je peins une boîte jaune. L'occurrence flashVid est sur la scène (_root) depuis le début. Maintenant, comment puis-je obtenir le flashVid ci-dessus "mc" mais en dessous de "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); 

Répondre

0

Cette réponse est de David Stiller quip.net

En AS2, la classe vidéo ne comporte pas de propriétés liées à la profondeur ou moethods (contraste cela, par exemple, avec le MovieClip. swapDepths() méthode). Pour cette raison, si vous voulez changer la profondeur d'une vidéo avec AS2, vous devrez envelopper l'objet vidéo dans un clip. Vous devrez donner à ce clip d'emballage un nom d'occurrence, vous pouvez donc modifier sa profondeur avec swapDepths(). Cela changera également votre référence pour la méthode attachVideo() .

par exemple.

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

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

... où « wrapperMC » signifie quel que soit le nom par exemple que vous avez donné le clip d'emballage . Cela a-t-il du sens?

L'autre chose à noter est que les clips vidéo déposés sur la scène par main sont toujours plus bas, sage profondeur, que les clips associés à la scène par attachMovie() ou createEmptyMovieClip(). Assurez-vous donc de les attacher tous avec le code ou faites-les glisser à la main à la main. Sinon, vous devrez "forcer" le clip vidéo déplacé manuellement dans les profondeurs supérieures des clips attachés/créés en utilisant d'abord 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

une approche plus courte serait

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

pour fixer généralement le problème, essayez ce code:

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

après les instances de vidéo auront les deux méthodes disponibles ... pour ne pas avoir d'erreurs de compilation sur les variables strictement tapées à vidéo, vous devez mettre à jour votre intrinsics (dans le chemin IDE flash - recherche juste pour Video.as sur votre disque dur, et vous devriez les trouver ... puis copiez les déclarations des deux swapDepths et getDepth de MovieClip.as à Video.as) ...

Je ne vais pas plonger dans les détails pour l'explication.vous devriez regarder la méthode d'appelde la classe Fonction et lire sur la façon dont les prototypes fonctionnent dans AS et AS2 (et JS et AS3 un peu) ...

greetz

back2dos

1

Tout ce que vous avez à faire est de mettre la vidéo dans un MovieClip vide (comme suggéré ci-dessus) et de manipuler ce MovieClip en termes de profondeur. Très simple.

Questions connexes