一个as3的顺播倒播类,同时支持播放到帧或者帧标签。
使用办法如下:
1.open方法:
import flash.utils.TimeLineManger;
//open方法:顺播,要求目标帧(目标帧支持帧标签)必须大于当前帧。否则,无效果。
//15 为目标帧
//p1 为目标帧标签
//1 为前进速度
TimeLineManger.open(mc, 15, 1);
//TimeLineManger.open(mc, "p1", 1);
2.close方法:
import flash.utils.TimeLineManger;
//close方法:倒播,要求目标帧(目标帧支持帧标签)必须小于当前帧。否则,无效果。
TimeLineManger.close(mc, 15, 1);
//TimeLineManger.close(mc, "p1", 1);
//15 为目标帧
//p1 为目标帧标签
//1 为倒退速度
3.gotoFrame方法:
import flash.utils.TimeLineManger;
//gotoFrame:播放至某帧。根据目标帧,判断播放方向。
TimeLineManger.gotoFrame(mc, 15, 1);
//15 为目标帧
//1 为前进或者倒退速度
4.gotoFrameLabel方法:
import flash.utils.TimeLineManger;
//gotoFrameLabel:播放至某帧。根据目标帧,判断播放方向。
TimeLineManger.gotoFrameLabel(mc, "p1", 1);
//p1 为目标帧标签
//1 为前进或者倒退速度
整个类文件如下:
package utils {
import flash.display.MovieClip;
import flash.display.FrameLabel;
import flash.events.Event;
/**
* @author Hank
* MovieClip 顺播、倒播类
* 2009-10-7
*
* 2009-10-28 update
* 加入帧标签支持
*
*/
public class TimeLineManger
{
/*
* open方法:顺播,要求目标帧(目标帧支持帧标签)必须大于当前帧。否则,无效果。
* TimeLineManger.open(mc, 15, 1);
* TimeLineManger.open(mc, "p1", 1);
* 15 为目标帧
* p1 为目标帧标签
* 1 为前进速度
*/
static public function open(display : MovieClip, target : * = null, speed : Number = 1) : void
{
display.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
display.target = (target == null) ? display.totalFrames : (target is Number) ? target : targetFrameFromeLabel(display, target, "open");
display.labels = display.currentLabels;
display.speed = speed;
display.dir = "open";
display.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
/*
* close方法:倒播,要求目标帧(目标帧支持帧标签)必须小于当前帧。否则,无效果。
* TimeLineManger.close(mc, 15, 1);
* TimeLineManger.close(mc, "p1", 1);
* 15 为目标帧
* p1 为目标帧标签
* 1 为倒退速度
*
*/
static public function close(display : MovieClip, target : * = null, speed : Number = 1) : void
{
display.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
display.target = (target == null) ? 1 : (target is Number) ? target : targetFrameFromeLabel(display, target, "close");
display.speed = speed;
display.dir = "close";
display.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
/*
* gotoFrame:播放至某帧。根据目标帧,判断播放方向。
* TimeLineManger.gotoFrame(mc, 15, 1);
* 15 为目标帧
* 1 为前进或者倒退速度
*/
static public function gotoFrame(display : MovieClip, frmae : int, speed : Number = 1) : void
{
display.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
display.target = frmae;
display.dir = frmae > display.currentFrame ? "open" : "close";
display.speed = speed;
display.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
/*
* gotoFrameLabel:播放至某帧。根据目标帧,判断播放方向。
* TimeLineManger.gotoFrameLabel(mc, "p1", 1);
* p1 为目标帧标签
* 1 为前进或者倒退速度
*/
static public function gotoFrameLabel(display : MovieClip, label : String, speed : Number = 1) : void
{
display.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
display.target = targetFrameFromeLabel(display, label);
display.dir = display.target > display.currentFrame ? "open" : "close";
display.speed = speed;
display.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
static private function onEnterFrameHandler(e : Event) : void
{
var display : MovieClip = e.currentTarget as MovieClip;
var frame : Number;
if(display.dir == "open") {
frame = display.currentFrame + display.speed;
if(frame >= display.target) {
display.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
display.gotoAndStop(display.target);
} else {
display.gotoAndStop(frame);
}
} else if(display.dir == "close") {
frame = display.currentFrame - display.speed;
if(frame <= display.target) {
display.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
display.gotoAndStop(display.target);
} else {
display.gotoAndStop(frame);
}
}
}
static private function targetFrameFromeLabel(display : MovieClip, traget : String, dir : String = "open") : uint
{
var labels : Array = display.currentLabels;
for(var i:String in labels) {
var label : FrameLabel = labels[i];
if(label.name == traget) {
return label.frame;
}
}
return ((dir == "close") ? 1 : display.totalFrames);
}
}
}