Kévin Duguay
Kévin Duguay

Reputation: 761

Destroy loaded video in AS3

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

Answers (2)

VC.One
VC.One

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

Kévin Duguay
Kévin Duguay

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

Related Questions