载入中。。。
载入中。。。
2008-11-29 10:45:00
>>flash cs3的应用(十一) 超级播放条之影片剪辑播放控制条

首先感谢金鹰教程的老师,我是在聆听AS2视频影片剪辑播放控制条和AS3声音下载播放控制进度条的基础上经多次试验才总结出AS3视频影片剪辑播放控制条的脚本,与AS2的也差不大,先新建一个叫滑块(hk_mc)的影片剪辑,再新建一个叫滑道 (hd_mc)的影片剪辑,把滑块放在滑道的左端,用对齐面板对齐,如果你想把这个控制条做成个影片剪辑,那么把滑块和滑道放在这个影片剪辑里,代码如下:

var shang=hk_mc.y;

//声明 =滑块的Y坐标

var zuo=hd_mc.x;

//声明 =滑道的X坐标

var xia=0;

//声明 =0

var you=hd_mc.width-hk_mc.width;

//声明 =滑道的宽-滑块的宽

var fk:Rectangle=new Rectangle(zuo,shang,you,xia);

//声明 方块的位置是一个新的位置:左上右下

var hdzc:Number = hd_mc.width-hk_mc.width;

//声明 实际滑道的总长的数值= 滑道的宽-滑块的宽

var td:Boolean = true;

//声明 加一个布尔运算 拖动的布尔运算为真

hk_mc.buttonMode=true;

//滑块的按钮显示模式为真,即显示为手型

hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax);

//添加鼠标在滑块按下hkax的侦听事件

hk_mc.addEventListener(MouseEvent.MOUSE_UP, hksk);

//添加鼠标在滑块松开hksk的侦听事件

stage.addEventListener(Event.ENTER_FRAME,cfzx);

//添加舞台影片剪辑进入帧(重复执行cfzx)的侦听事件

function hkax(event:MouseEvent):void {

       td = false;

       //拖动的布尔运算为假

       hk_mc.startDrag(false,fk);

       //光标不锁定中心,滑块开始在FK范围内拖动

       stage.addEventListener(MouseEvent.MOUSE_UP,hklk);

       //添加鼠标在舞台松开(离开滑块hklk)的侦听事件

       stage.removeEventListener(MouseEvent.MOUSE_DOWN,MainTimeline(stage.getChildAt(0)).lineBegin);

       //清除鼠标按下根目录舞台开始画线lineBegin函数的侦听事件

       MainTimeline(stage.getChildAt(0)).lines.graphics.clear();

       //清除画的线

}

function hksk(event:MouseEvent):void {

MainTimeline(stage.getChildAt(0)).jiewen.gotoAndPlay(int(MainTimeline(stage.getChildAt(0)).jiewen.totalFrames*(hk_mc.x-hd_mc.x)/(hd_mc.width-hk_mc.width)));

       //根目录MainTimeline(stage.getChildAt(0))jiewen跳转到jiewen的总帧数*(滑块的X坐标-滑道的X坐标)/(滑道的宽-滑块的宽)这个百分比中播放,int是取整数

       td = true;

       //拖动的布尔运算为真

       hk_mc.stopDrag();

       //滑块停止拖动

       stage.addEventListener(MouseEvent.MOUSE_DOWN,MainTimeline(stage.getChildAt(0)).lineBegin);

       //添加鼠标按下根目录舞台开始画线lineBegin函数的侦听事件

       MainTimeline(stage.getChildAt(0)).lines.graphics.clear();

       //清除画的线

}

function hklk(event:MouseEvent):void {

MainTimeline(stage.getChildAt(0)).jiewen.gotoAndPlay(int(MainTimeline(stage.getChildAt(0)).jiewen.totalFrames*(hk_mc.x-hd_mc.x)/(hd_mc.width-hk_mc.width)));

       //根目录MainTimeline(stage.getChildAt(0))jiewen跳转到jiewen的总帧数*(滑块的X坐标-滑道的X坐标)/(滑道的宽-滑块的宽)这个百分比中播放,int是取整数

       td = true;

       //拖动的布尔运算为真

       hk_mc.stopDrag();

       //滑块停止拖动

       stage.addEventListener(MouseEvent.MOUSE_DOWN,MainTimeline(stage.getChildAt(0)).lineBegin);

       //添加鼠标按下根目录舞台开始画线lineBegin函数的侦听事件

       stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);

       //清除鼠标在舞台松开(离开滑块hklk)的侦听事件

       MainTimeline(stage.getChildAt(0)).lines.graphics.clear();

       //清除画的线

}

function cfzx(event:Event) {

       if (td) {

              //假如td为真

              hk_mc.x = hd_mc.x+(hdzc)*MainTimeline(stage.getChildAt(0)).jiewen.currentFrame/MainTimeline(stage.getChildAt(0)).jiewen.totalFrames;

              //滑块的X坐标=滑道的X坐标+滑道实际总长*根目录下的影片剪辑jiewen的当前帧数/根目录下的影片剪辑jiewen的总帧数

       } else {

              //否则

       MainTimeline(stage.getChildAt(0)).jiewen.gotoAndPlay(int(MainTimeline(stage.getChildAt(0)).jiewen.totalFrames*(hk_mc.x-hd_mc.x)/hdzc));

              //根目录下的影片剪辑jiewen跳转到根目录下的影片剪辑jiewen的总帧数*(滑块的X坐标-滑道的X坐标)/滑道总长

       }

}

如果你不想做成一个影片剪辑,只想把滑块滑道拖放在舞台上直接控制视频播放,那么把上面的代码中的MainTimeline(stage.getChildAt(0)).去掉。

如果还有画线的程序, MainTimeline(stage.getChildAt(0)).lines.graphics.clear();

正好清除画的线

在这个播放控制条中用了类似于AS2的onReleaseOutside,即离开后释放,这个在AS3中已经没有了,那么怎么做它呢?请看其中的这几处代码:

hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax);

//添加鼠标在滑块按下hkax的侦听事件

......

stage.addEventListener(MouseEvent.MOUSE_UP,hklk);

//添加鼠标在舞台松开(离开滑块hklk)的侦听事件

......

function hkax(event:MouseEvent):void {

......

stage.addEventListener(MouseEvent.MOUSE_UP,hklk);

       //再次添加鼠标在舞台松开(离开滑块hklk)的侦听事件

......

function hklk(event:MouseEvent):void {

......

stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);

       //清除鼠标在舞台松开(离开滑块hklk)的侦听事件

在滑块添加滑块松开hksk的侦听事件,在舞台上添加鼠标松开(离开滑块hklk)的侦听事件,当在舞台上添加鼠标松开时,用removeEventListener 卸载了hklk 事件,这样,在舞台是单击鼠标时就不会影响其它事件,而当再次在滑块点击拖动时,又再次添加了鼠标在舞台松开(离开滑块hklk)的侦听事件,从而模拟了onReleaseOutside事件。在AS3中,removeEventListener 是值得学习,好好研究的。

壮志凌云 | 阅读全文 | 回复(0) | 引用通告 | 编辑
发表评论:
载入中。。。
用户公告
载入中。。。
时间记忆
<<  < 2009 - 11 >  >>
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
我的相册
最新日志
载入中。。。
最新评论
载入中。。。
最新回复
载入中。。。
我的好友
站点信息
载入中。。。
   http://blog.ddedu.com.cn/user1/2377/index.shtml