as3顺播倒播类

2010年1月06日, 没有评论

一个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);
		}
	}
}

Tagged: , , ,

说点什么?

欢迎光临

你正在阅读 “as3顺播倒播类” -- 破民.

摘要