一个as3的顺播倒播类,同时支持播放到帧或者帧标签。
使用办法如下:
1.open方法:
1 2 3 4 5 6 7 8 | import flash.utils.TimeLineManger; //open方法:顺播,要求目标帧(目标帧支持帧标签)必须大于当前帧。否则,无效果。 //15 为目标帧 //p1 为目标帧标签 //1 为前进速度 TimeLineManger.open(mc, 15, 1); //TimeLineManger.open(mc, "p1", 1); |
2.close方法:
1 2 3 4 5 6 7 8 | import flash.utils.TimeLineManger; //close方法:倒播,要求目标帧(目标帧支持帧标签)必须小于当前帧。否则,无效果。 TimeLineManger.close(mc, 15, 1); //TimeLineManger.close(mc, "p1", 1); //15 为目标帧 //p1 为目标帧标签 //1 为倒退速度 |
3.gotoFrame方法:
1 2 3 4 5 6 | import flash.utils.TimeLineManger; //gotoFrame:播放至某帧。根据目标帧,判断播放方向。 TimeLineManger.gotoFrame(mc, 15, 1); //15 为目标帧 //1 为前进或者倒退速度 |
4.gotoFrameLabel方法:
1 2 3 4 5 6 | import flash.utils.TimeLineManger; //gotoFrameLabel:播放至某帧。根据目标帧,判断播放方向。 TimeLineManger.gotoFrameLabel(mc, "p1", 1); //p1 为目标帧标签 //1 为前进或者倒退速度 |
整个类文件如下:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | 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); } } } |