在 AS3 中销毁加载的视频
Destroy loaded video in AS3
我正在 AS3 中开发一个显示 YouTube 视频的功能。它有效,但问题是如果我开始播放视频然后点击 'cacheNoir',它会删除视频,但我仍然可以听到它。我猜是因为视频没有真正销毁,那我该怎么做呢?
我的职能:
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);
}
我找到了解决方案。如果你这样做 loaderVideo.content
,你会得到一个有很多有用方法的对象,因为它是 youtube 的 API,其中一个函数是 destroy()。查看此页面以了解所有功能:
https://developers.google.com/youtube/flash_api_reference?csw=1#Functions
如果 var loaderVideo:Loader
负责视频,你能不能只使用 unload ..
在您的 函数 onQuitVideoYoutube 中类似这样的内容:loaderVideo.unload();
..
此外,您应该将 loaderVideo 设为任何函数之外的 public var loaderVideo:Loader;
,这样所有函数都可以重复使用它,而无需每次都创建一个新函数。对于加载,它会变得简单 loaderVideo = new Loader();
。
每次你创建一个 var ABC = new someThing
来在内存中创建一个新的实例,你以后的代码甚至可能不会谈论你认为你的 Flash 正在访问的 someThing
。因此,做一件事并始终重复使用它,然后您就知道在做什么。
示例设置...
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);
}
我正在 AS3 中开发一个显示 YouTube 视频的功能。它有效,但问题是如果我开始播放视频然后点击 'cacheNoir',它会删除视频,但我仍然可以听到它。我猜是因为视频没有真正销毁,那我该怎么做呢?
我的职能:
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);
}
我找到了解决方案。如果你这样做 loaderVideo.content
,你会得到一个有很多有用方法的对象,因为它是 youtube 的 API,其中一个函数是 destroy()。查看此页面以了解所有功能:
https://developers.google.com/youtube/flash_api_reference?csw=1#Functions
如果 var loaderVideo:Loader
负责视频,你能不能只使用 unload ..
在您的 函数 onQuitVideoYoutube 中类似这样的内容:loaderVideo.unload();
..
此外,您应该将 loaderVideo 设为任何函数之外的 public var loaderVideo:Loader;
,这样所有函数都可以重复使用它,而无需每次都创建一个新函数。对于加载,它会变得简单 loaderVideo = new Loader();
。
每次你创建一个 var ABC = new someThing
来在内存中创建一个新的实例,你以后的代码甚至可能不会谈论你认为你的 Flash 正在访问的 someThing
。因此,做一件事并始终重复使用它,然后您就知道在做什么。
示例设置...
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);
}