root/lang/actionscript/tinyaction/CharTest.as @ 38797

Revision 7788, 3.6 kB (checked in by gyuque, 6 years ago)

tinyaction: updated sample

Line 
1package
2{
3        import flash.display.*;
4        import flash.events.*;
5        import flash.text.*;
6        import tavm.*;
7        public class CharTest extends MovieClip
8        {
9                private var mTextOut:TextField;
10
11                private var mMod:ModuleData;
12                private var mDatLoader:DatLoader;
13                private var mPool:CharPool;
14               
15                private var mTACtx:TAContext;
16                private var mTAGlobal:CharTestGlobal;
17               
18                private var mCount:uint;
19                private var mLoadButton1:ReloadButton;
20                private var mLoadButton2:ReloadButton;
21                private var mLoadButton3:ReloadButton;
22                private var mLayer:Sprite;
23               
24                function CharTest()
25                {
26                        createTextOut();
27
28                        mCount = 0;
29                        mLayer = new Sprite();
30                        addChild(mLayer);
31
32                        mPool     = new CharPool();
33                        mTACtx    = new TAContext()
34                        mTAGlobal = new CharTestGlobal();
35                       
36                        mMod = null;
37                        mDatLoader = new DatLoader();
38                        mDatLoader.addEventListener(DatLoaderEvent.FINISHED, onDatLoadFinishd);
39                       
40                        mLoadButton1 = new ReloadButton("CharCtrl1.dat");
41                        mLoadButton2 = new ReloadButton("CharCtrl2.dat");
42                        mLoadButton3 = new ReloadButton("CharCtrl3.dat");
43                       
44                        mLoadButton1.x = 4;
45                        mLoadButton2.x = 4;
46                        mLoadButton3.x = 4;
47                        mLoadButton1.y = 4;
48                        mLoadButton2.y = 34;
49                        mLoadButton3.y = 64;
50                       
51                        addChild(mLoadButton1);
52                        listenButton(mLoadButton1);
53                        addChild(mLoadButton2);
54                        listenButton(mLoadButton2);
55                        addChild(mLoadButton3);
56                        listenButton(mLoadButton3);
57
58                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
59                }
60
61                public function createTextOut():void
62                {
63                        mTextOut = new TextField();
64                        mTextOut.width = 800;
65                        mTextOut.height = 400;
66                        mTextOut.y = 200;
67                        mTextOut.mouseEnabled = false;
68
69                        addChild(mTextOut);
70                }
71               
72                private function listenButton(b:Sprite):void
73                {
74                        b.useHandCursor = true;
75                        b.buttonMode = true;
76                        b.addEventListener(MouseEvent.CLICK, onReloadClicked);
77                }
78               
79                private function onReloadClicked(e:MouseEvent):void
80                {
81                        var t:String = e.target.title;
82                        loadDat(t);
83                }
84               
85                private function loadDat(d:String):void
86                {
87                        mDatLoader.load(d);
88                }
89               
90                private function onDatLoadFinishd(e:DatLoaderEvent):void
91                {
92                        mMod = mDatLoader.popIfFinished().content;
93                        updateTAContext();
94                }
95               
96                private function updateTAContext():void
97                {
98                        mTAGlobal.mModule = mMod;
99
100                        mTACtx.reset();
101                        mTACtx.setConstantPool(mMod.constantPool);
102                        mTACtx.globalScope = mTAGlobal;
103                }
104               
105                private var _tmparr:Array = [null];
106                private function onEnterFrame(e:Event):void
107                {
108                        if (mMod != null)
109                        {
110                                if ((mCount++ % 10) == 0)
111                                        addObjAt(Math.random() * 800, -33);
112                        }
113                       
114                        var pool:Array = mPool.pool;
115                        var len:int = pool.length;
116                        var i:int;
117                        var c:CharObj;
118                        for (i = 0;i < len;i++)
119                        {
120                                c = CharObj(pool[i]);
121                                if (!c.using) continue;
122                               
123                                if (mMod != null)
124                                {
125                                        _tmparr[0] = c.mTAObj;
126                                        mTACtx.reset();
127                                        mTACtx.callFunctionImmediately(mMod, "tickChar", _tmparr);
128                                        mTACtx.exec(200);
129                                       
130                                        if (!mTACtx.popLastReturnValue())
131                                                mPool.terminate(c);
132                                }
133                               
134                                c.updateFins();
135                        }
136                        mTACtx.deepClear();
137
138                        for (i = 0;i < len;i++)
139                        {
140                                c = CharObj(pool[i]);
141                                if (!c.using) continue;
142                               
143                                c.updateView();
144                        }
145
146                }
147               
148                public function addObjAt(x:Number, y:Number):void
149                {
150                        var c:CharObj = mPool.newObj();
151                        if (c == null)
152                                return;
153
154                        c.mTAObj.x = x;
155                        c.mTAObj.y = y;
156
157                        _tmparr[0] = c.mTAObj;
158                        if (mMod != null)
159                        {
160                                mTACtx.reset();
161                                mTACtx.callFunctionImmediately(mMod, "initChar", _tmparr);
162                                mTACtx.exec(200);
163                                mTACtx.deepClear();
164                        }
165                               
166                        c.attachOnce(mLayer);
167                }
168        }
169}
Note: See TracBrowser for help on using the browser.