Flash中如何实现点击工作区停止导入至MovieClip的FLV视频?
嘿,这个需求其实很好实现,不管你用的是ActionScript 2还是3,我给你分情况讲清楚具体操作:
针对ActionScript 3.0的解决方案
在AS3里,FLV的播放控制核心是NetStream对象,Video只是负责显示的容器。你只需要给目标点击区域(比如整个舞台,或者你指定的工作区范围)添加点击事件,然后在事件回调里调用NetStream的停止方法就行。
具体步骤:
- 确保你已经初始化好
NetStream实例(也就是已经完成了NetConnection连接、FLV加载这些前置操作) - 给舞台或者目标区域添加鼠标点击监听器
示例代码(点击整个舞台停止视频):
// 假设你已经初始化了NetStream对象,命名为ns var ns:NetStream; // 这里省略NetConnection初始化、FLV加载的代码,比如: // var nc:NetConnection = new NetConnection(); // nc.connect(null); // ns = new NetStream(nc); // var video:Video = new Video(); // video.attachVideo(ns); // addChild(video); // ns.play("your_flv_file.flv"); // 给舞台添加点击事件 stage.addEventListener(MouseEvent.CLICK, stopVideoHandler); function stopVideoHandler(e:MouseEvent):void { if (ns != null) { ns.stop(); // 直接停止视频,回到开头 // 如果需要实现「点击切换播放/暂停」,可以改成: // if (ns.playing) { // ns.pause(); // } else { // ns.resume(); // } } }
只点击指定工作区域的情况:
如果不想让整个舞台都响应点击,只想限制在视频所在的工作区范围,你可以给视频的容器MovieClip添加点击事件。但要注意:如果容器里的空白区域是透明的,默认不会响应鼠标事件,这时候需要给容器加一个透明的点击区域:
// 假设你的视频容器MovieClip名叫flvContainer_mc var hitArea:Sprite = new Sprite(); hitArea.graphics.beginFill(0x000000, 0); // 完全透明的填充 hitArea.graphics.drawRect(0, 0, flvContainer_mc.width, flvContainer_mc.height); hitArea.graphics.endFill(); flvContainer_mc.addChild(hitArea); flvContainer_mc.hitArea = hitArea; // 设置这个Sprite为容器的点击区域 // 给容器添加点击事件 flvContainer_mc.addEventListener(MouseEvent.CLICK, stopVideoHandler);
针对ActionScript 2.0的解决方案
AS2里的操作更简单,如果你用的是官方的FLVPlayback组件,直接调用组件的控制方法就行;如果是手动用NetStream控制,逻辑也类似。
用FLVPlayback组件的情况:
假设你的组件实例名叫flvPlayback,直接给舞台或者按钮添加点击事件:
// 点击整个舞台停止视频 onMouseDown = function() { flvPlayback.stop(); // 停止播放 // 要实现播放/暂停切换的话: // if (flvPlayback.isPlaying) { // flvPlayback.pause(); // } else { // flvPlayback.play(); // } };
手动用NetStream控制的情况:
// 初始化NetStream和Video var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); var video:Video = new Video(); video.attachVideo(ns); addChild(video); ns.play("your_flv_file.flv"); // 点击舞台暂停视频(AS2里NetStream的pause()是暂停,stop()是停止并回到开头) onMouseDown = function() { ns.pause(); };
指定点击区域的情况:
如果只想让特定区域响应点击,你可以在库中创建一个透明按钮元件(弹起、指针经过、按下帧都用透明填充或者留空),然后把这个按钮拖到工作区的目标位置,覆盖你想要点击的范围,再给按钮加事件:
// 假设你的透明按钮实例名叫stopArea_btn stopArea_btn.onRelease = function() { flvPlayback.stop(); };
内容的提问来源于stack exchange,提问作者Candyse
相关产品推荐
相关产品推荐

