第一次有这个勇气做个教程出来,也许并不成熟,但希望各位能跟我分享~~~:) 这个flash播放控制的页面上其他的内容这里就不考虑了。
假设只有一个要被控制的flash动画和一个起控制作用的control.swf 首先你要准备一个flash动画。就是要被控制播放的那个
但要注明,如果这个动画是你自己做的,那一切都无所谓
但如果是类似闪吧性质的,要控制他人的flash播放的话,那你得确定这个flash不是那种单帧mc的
就是说整个动画应该是在主时间线上进行的,不能是只有一个mc,而所有的动画都在这个mc中,那样这个mc的实例名可能无法得知,所以不方便我们的控制。 好了准备工作完了,接下来开始我们的播放控制器的制作 用flash画出这些图标估计没什么难度吧?这里略去了,但要明确,需要几个控制按钮,我这里仅用了3个,play,pause,stop,以及一个带滑块的进度条。
首先说整个as的思路: 这个播放控制的原理其实利是用叶面中的js
控制用的flash用fscommand跟js交互,给它发送指令,被控制flash则接收js给它的信息,实现播放 ,停止,以及跳转。
复习一下fscommand的用法:
fscommand("command","parameters");
这里 command是一个字符串,parameters是一个变量
分别表示发送的命令和一个变量
在后面我们会看到他们的用处
play,pause,stop三个按钮很简单,没什么说的
main.playbut.onrelease = function() {
fscommand("play", "kevin");
};
main.pausebut.onrelease = function() {
fscommand("pause", "kevin");
};
main.stopbut.onrelease = function() {
fscommand("stop", "kevin");
};
这里"kevin"这个字符串没有任何用处,除了带给自己一点小小的成就感~~:)
因为我的所有的as都是写在主时间线上的,所以整个都是一个mc,名字叫main
进度条这里就稍微麻烦一点了
我嵌套了好几重mc
:(
整个进度条是一个mc,名字是line
里面有另外两个组件:bar跟timeline分别是滑块跟时间线
因为bar的宽度是30,timeline的宽度是250,所以为了今后的方便我在这里把他们的_x都设在-15
这样bar的正中就是0了
他的滑动范围是0到250
在主场景上写下as
main.line.bar.onpress = function() {
_root.onenterframe = undefined;
this.startdrag(false, 0, 0, 250, 0);
fscommand("pause", "kevin");
};//设置鼠标拖动,并且当按下鼠标的时候要保证被控制的flash在这时是暂停的,这个问题我们稍后再提到
main.line.bar.onrelease = function() {
this.stopdrag();
framejump();
};//鼠标左键松开时,滑块停止拖动,并调用控制帧跳转的framejump()函数
main.line.bar.onreleaseoutside = line.bar.onrelease;//这是为了避免一些不必要的麻烦出现~~
main.line.timeline.onpress = function() {
_root.onenterframe = undefined;
main.line.bar._x = this._xmouse;
framejump();
};//这是达到一个直接在timeline上点击就控制进度的效果,跟一般的mp3播放器之类的一样
//当在timeline上点击,设置bar的x坐标为这时鼠标的x坐标,并调用framejump()函数控制帧跳转
现在,整个control的结构和方法你应该已经大致清楚了吧?
在上面那些as的前面应该再加上这些 var totalframes;
var currentframe;//设置了两个变量,分别为flash总帧数和当前帧数
main.line.timeline.usehandcursor = false;
getframe = function () {
fscommand("totalframes", "kevin");
fscommand("currentframe", "kevin");
main.line.bar._x = currentframe/totalframes*250;
};//定义了一个得到当前帧的函数,并设置bar的位置
framejump = function () {
location = main.line.bar._x/250;
targetframe = math.round(location*totalframes);
fscommand("jump", targetframe);
_root.onenterframe = getframe;
};//定义了一个控制帧跳转的函数,按照bar在timeline上的位置来确定跳转的目标帧号,并将目标帧号发送给js
_root.onenterframe = getframe;
//时时获得flash的当前帧数,并设置bar的移动表示进度。这里就要回答前面main.line.bar.onpress里面的要设置flash在这时暂停的原因了。在flash播放的同时,会不停的为bar设置新的位置,使它移动,但如果在鼠标拖动bar的时候,flash仍继续播放,那么结果可想而知。还有这也就是为什么在设置进度条控制的时候总要加一个_root.onenterframe=undefined;了
最后再把完整的as贴上吧
var totalframes;
var currentframe;
main.line.timeline.usehandcursor = false;
getframe = function () {
fscommand("totalframes", "kevin");
fscommand("currentframe", "kevin");
main.line.bar._x = currentframe/totalframes*250;
};
framejump = function () {
location = main.line.bar._x/250;
targetframe = math.round(location*totalframes);
fscommand("jump", targetframe);
_root.onenterframe = getframe;
};
_root.onenterframe = getframe;
//init---------------------------------------------------------------------------------------------
main.playbut.onrelease = function() {
fscommand("play", "kevin");
};
main.pausebut.onrelease = function() {
fscommand("pause", "kevin");
};
main.stopbut.onrelease = function() {
fscommand("stop", "kevin");
};
//controlbutton----------------------------------------------------------------------------------------
main.line.bar.onpress = function() {
_root.onenterframe = undefined;
this.startdrag(false, 0, 0, 250, 0);
fscommand("pause", "kevin");
};
main.line.bar.onrelease = function() {
this.stopdrag();
framejump();
};
main.line.bar.onreleaseoutside = line.bar.onrelease;
main.line.timeline.onpress = function() {
_root.onenterframe = undefined;
main.line.bar._x = this._xmouse;
framejump();
};
发布这个flash为html格式,选择flash with fscommand
用dw编辑一下这个html文档
在合适的地方插入一个flash动画
为这个flash和播放控制的flash都分别添加id名
下面是js的内容:
因为本身导出的时候选择了 flash with fscommand
所以这时候已经是有js的框架了
你可以找到这个地方 //
// place your code here...
// 写入如下代码:
function control_dofscommand(command, args) {
var controlobj = inte.netexplorer ? control : document.control;
var movie = inte.netexplorer ?mymovie : document.mymovie; //注意这两句,其中有些东西是要调整的!!!
if (command == "totalframes") {
var totalframes = movie.totalframes;
controlobj.setvariable("/:totalframes",totalframes);
}
//这是得到flash的总针数,并将这个值传给播放控制的flash---control
if (command == "currentframe") {
var currentframe = movie.tcurrentframe("/");
controlobj.setvariable("/:currentframe",currentframe);
}
//这是得到flash的当前针号,并将这个值传给播放控制的flash---control
if(command=="play"){
movie.play();
}
if(command=="pause"){
movie.stopplay();
}
if(command=="stop"){
movie.gotoframe(0);
}
//相当于as中的gotoandstop(frame),但这里第一针的值是0!!
if(command=="jump"){
movie.gotoframe(args);
var currentframe=args;
movie.play();
}
//跳转到某一针并继续播放
ok,现在大功告成!!!
只要打开这个control.html观看flash吧,用下面的控制器可以达到播放控制的作用了~~
你再也不用为 错过某一个精彩的画面而重新等待了,我想看哪里就看哪里!!就象用播放器看电影~~~
好爽~~~ 如果你需要做一个类似闪吧的flash播放页面,把它加进去,不是为网页的浏览者提供了一个很大的方便么~~
这也就是我做这个的目的.嘻嘻~~~
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器