My favorites
▼
|
Sign in
ghostcat
AS3的工具类库(AS3 library of generic tools)
Project Home
Downloads
Wiki
Issues
Source
Checkout
Browse
Changes
Source path:
svn
/
trunk
/
GhostCat
/
src
/
ghostcat
/
util
/
load
/
RootLoaderBase.as
‹r581
r1062
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
package ghostcat.util.load
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.errors.IllegalOperationError;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.utils.getDefinitionByName;
[Event(name="init",type="flash.events.Event")]
[Event(name="complete",type="flash.events.Event")]
[Event(name="progress",type="flash.events.ProgressEvent")]
/**
* 和FLEX类似的二帧自加载方法,可以自行实现立即显示的Loading进度条,即使是在一个全部由代码组成的SWF中。
* 这是一个抽象类,并没有提供进度条相关代码。请继承此类,并在构造函数里添加进度条,并监听progress事件修改进度,在complete事件里删除进度条。
*
* 此类必须在支持元标签的环境内使用。在入口类上加上元标签[Frame(factoryClass="ghostcat.ui.RootLoader")]即可。你也可以自己继承此类定义进度条。
*
* 由于层次的变化,原来的主类已经无法在构造函数内引用到stage了,这点要注意。
*
* @author flashyiyi
*
*/
public class RootLoaderBase extends MovieClip
{
/**
* 是否加载完成
*/
public var loadCompleted:Boolean = false;
public function RootLoaderBase()
{
if (this["constructor"] == RootLoaderBase)
throw new IllegalOperationError("RootLoaderBase 类为抽象类,不允许实例化!");
this.gotoAndStop(1);
root.loaderInfo.addEventListener(Event.INIT, initHandler);
}
protected function initHandler(event:Event):void
{
dispatchEvent(event);
root.loaderInfo.removeEventListener(Event.INIT, initHandler);
root.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
root.loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
root.loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}
//Complete事件失效时的备用处理
private function enterFrameHandler(event:Event):void
{
if (root.loaderInfo.bytesLoaded == root.loaderInfo.bytesTotal)
completeHandler(new Event(Event.COMPLETE));
}
protected function completeHandler(event:Event):void
{
if (loadCompleted)
return;
this.gotoAndStop(2);
root.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
root.loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
root.loaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
dispatchEvent(event);
loadComplete();
loadCompleted = true;
}
protected function progressHandler(event:ProgressEvent):void
{
dispatchEvent(event);
}
protected function ioErrorHandler(event:IOErrorEvent):void
{
dispatchEvent(event);
}
/**
* 获得主要SWF实例
* @return
*
*/
protected function getMainSWF():DisplayObject
{
var name:String = this.loaderInfo.loaderURL.match(/[^\/]*\.swf/i)[0];
var urlArr:Array = name.split(/\/+|\\+|\.|\?/ig);
name = decodeURI(urlArr[urlArr.length - 2]);
return new (getDefinitionByName(name) as Class);
}
/**
* 完成载入,实例化主场景时执行的方法。可以重写这个方法以显示一段进入主场景的动画。
*
*/
protected function loadComplete():void
{
stage.addChildAt(getMainSWF(),0);
stage.removeChild(this);
}
}
}
Show details
Hide details
Change log
r672
by yiyiflas...@163.com on Nov 23, 2010
Diff
[No log message]
Go to:
/trunk/GhostCat/bin/GhostCat.swc
...c/ghostcat/ui/controls/GImage.as
...tcat/util/load/RootLoaderBase.as
Sign in
to write a code review
Older revisions
r581
by yiyiflas...@163.com on Jun 20, 2010
Diff
[No log message]
r476
by yiyiflas...@163.com on Jan 12, 2010
Diff
[No log message]
r472
by yiyiflas...@163.com on Dec 25, 2009
Diff
[No log message]
All revisions of this file
File info
Size: 3554 bytes, 117 lines
View raw file
Powered by
Google Project Hosting