Reputation: 761
I'm working in AS3 on a fonction that disply a youtube video. It works, but the problem is that if I start the video and than click on the 'cacheNoir', it remove the video, but I can still ear it. I guest it's because the video wasn't really destroy, so how do I do that?
My functions:
public function openVideoYoutube(url:String, largeur:int=640, hauteur:int=390):void
{
//Charge la vidéo
var loaderVideo:Loader=new Loader();
loaderVideo.load(new URLRequest(url));
//Va chercher le stage
var stage:Stage = _app._root.stage;
//Conteneur de la vidéo et du cache
var conteneurVideo:MovieClip = new MovieClip;
//Cache noir
var cacheNoir:MovieClip = new MovieClip();
cacheNoir.graphics.beginFill(0x000000);
cacheNoir.graphics.drawRect(0, 0, stage.width, stage.height);
cacheNoir.graphics.endFill();
cacheNoir.alpha = 0.7;
//Positionne la video
loaderVideo.x = (stage.stageWidth-largeur)/2;
loaderVideo.y = (stage.stageHeight - hauteur) / 2;
//Ajoute du cache et de la vidéo
conteneurVideo.addChild(cacheNoir);
conteneurVideo.addChild(loaderVideo);
//Ajoute sur le stage
stage.addChild(conteneurVideo);
//Change le curseur lorsque que le cache est survolé
cacheNoir.buttonMode = true;
//Évènement pour retirer la vidéo
cacheNoir.addEventListener(MouseEvent.CLICK, onQuitVideoYoutube);
}
private function onQuitVideoYoutube(pEvt:MouseEvent):void
{
//Va chercher le stage
var stage:Stage = _app._root.stage;
//Retire la vidéo
stage.removeChildAt(stage.numChildren-1);
}
Upvotes: 0
Views: 109
Reputation: 15881
If var loaderVideo:Loader
is responsible for video can you not just use unload ..
something like this in your function onQuitVideoYoutube : loaderVideo.unload();
..
Also you should make loaderVideo into a public var loaderVideo:Loader;
outside of any function then all functions can re-use it without making a new one everytime. For loading it would become simply loaderVideo = new Loader();
.
Everytime you make a var ABC = new someThing
that creates a new instance in memory and your later code may not even be talking about the someThing
you think you Flash is accessing. So make one thing and always re-use it then you know what's doing what.
Example setup...
public var _stage : Stage = _app._root.stage;
public var loaderVideo : Loader;
public var cacheNoir : MovieClip;
public var conteneurVideo : MovieClip = new MovieClip(); //make NEW here only after that its always re-used
public function openVideoYoutube(url:String, largeur:int=640, hauteur:int=390) : void
{
//Charge la vidéo
loaderVideo = new Loader();
loaderVideo.load(new URLRequest(url));
//Va chercher le stage
///var stage:Stage = _app._root.stage;
//Conteneur de la vidéo et du cache
///var conteneurVideo:MovieClip = new MovieClip;
//Cache noir
cacheNoir = new MovieClip();
cacheNoir.graphics.beginFill(0x000000);
cacheNoir.graphics.drawRect(0, 0, stage.width, stage.height);
cacheNoir.graphics.endFill();
cacheNoir.alpha = 0.7;
//Positionne la video
loaderVideo.x = (stage.stageWidth-largeur)/2;
loaderVideo.y = (stage.stageHeight - hauteur) / 2;
//Ajoute du cache et de la vidéo
conteneurVideo.addChild(cacheNoir);
conteneurVideo.addChild(loaderVideo);
//Ajoute sur le stage
_stage.addChild(conteneurVideo);
//Change le curseur lorsque que le cache est survolé
cacheNoir.buttonMode = true;
//Évènement pour retirer la vidéo
cacheNoir.addEventListener(MouseEvent.CLICK, onQuitVideoYoutube);
}
private function onQuitVideoYoutube(pEvt:MouseEvent) : void
{
//Va chercher le stage
///var stage:Stage = _app._root.stage;
//Retire la vidéo
loaderVideo.unload();
_stage.removeChildAt(_stage.numChildren-1);
}
Upvotes: 0
Reputation: 761
I found the solution. If you do loaderVideo.content
, you get an object that have alot of usefull method since it's the API of youtube and one of those fucntion is destroy(). Check out this page for all the function:
https://developers.google.com/youtube/flash_api_reference?csw=1#Functions
Upvotes: 1