root/as3/PotrAs/samples/potras/algorithm/LonTest.as

リビジョン 86, 3.1 kB (コミッタ: nitoyon, コミット時期: 5 年 前)

initial version

Line 
1 package
2 {
3         import com.nitoyon.potras.*;
4         import flash.display.*;
5         import flash.geom.*;
6         import flash.events.*;
7
8         [SWF(width="320",height="320")]
9         public class LonTest extends Sprite
10         {
11                 [Embed(source='data1.gif')]
12                 private var Data1:Class;
13
14                 private static const SCALE:int = 8;
15
16                 public function LonTest()
17                 {
18                         var bmp:Bitmap = new Data1();
19                         bmp.scaleX = bmp.scaleY = SCALE;
20                         var bmd:BitmapData = bmp.bitmapData;
21                         addChild(bmp);
22
23                         var i:int = 0;
24                         var j:int = 0;
25
26                         var pathList:Array = PathList.create(bmp.bitmapData);
27                         var lons:Array = [];
28                         for(i = 0; i < pathList.length; i++)
29                         {
30                                 lons[i] = ProcessPath.calcLon(pathList[i].priv as Array);
31                         }
32
33                         drawPath(bmd, pathList);
34
35                         var bmdOver:BitmapData = new BitmapData(bmd.width, bmd.height);
36                         var bmpOver:Bitmap = new Bitmap(bmdOver);
37                         bmpOver.scaleX = bmpOver.scaleY = SCALE;
38                         addChild(bmpOver);
39
40                         i = 0;
41                         var mouseOver:Boolean = false;
42                         addEventListener("enterFrame", function(event:Event):void
43                         {
44                                 if(mouseOver) return;
45
46                                 drawLon(bmdOver, pathList, lons, i, j);
47
48                                 j++;
49                                 if(j >= lons[i].length)
50                                 {
51                                         j = 0;
52                                         i = (i + 1) % lons.length;
53                                 }
54                         });
55
56                         var mouseHandler:Function = function(event:MouseEvent):void
57                         {
58                                 var pt:Point = new Point(int(event.localX / SCALE), int(event.localY / SCALE));
59                                 var ij:Array = getIJfromPoint(pathList, pt);
60                                 if(ij)
61                                 {
62                                         mouseOver = true;
63                                         drawLon(bmdOver, pathList, lons, ij[0], ij[1]);
64                                 }
65                                 else
66                                 {
67                                         mouseOver = false;
68                                 }
69                         };
70                         if(stage)
71                         {
72                                 stage.addEventListener("mouseMove", mouseHandler);
73                         }
74                         else
75                         {
76                                 addEventListener("addedToStage", function(event:*):void
77                                 {
78                                         stage.addEventListener("mouseMove", mouseHandler);
79                                 });
80                         }
81                 }
82
83                 private static function drawPath(bmd:BitmapData, pathList:Array):void
84                 {
85                         bmd.fillRect(new Rectangle(0, 0, bmd.width, bmd.height), 0xffffffff);
86                         for(var i:int = 0; i < pathList.length; i++)
87                         {
88                                 for(var j:int = 0; j < pathList[i].priv.length; j++)
89                                 {
90                                         var pt:Point = pathList[i].priv[j] as Point;
91                                         if(pt)
92                                         {
93                                                 bmd.setPixel(pt.x, pt.y, 0x999999);
94                                         }
95                                 }
96                         }
97                 }
98
99                 private function drawLon(bmd:BitmapData, pathList:Array, lons:Array, i:int, j:int):void
100                 {
101                         var pt:Point = pathList[i].priv[j] as Point;
102                         if(pt)
103                         {
104                                 bmd.lock();
105                                 bmd.fillRect(new Rectangle(0, 0, bmd.width, bmd.height), 0x00ffffff);
106                                 bmd.setPixel32(pt.x, pt.y, 0xff000000);
107
108                                 var k:int = j;
109                                 while(true)
110                                 {
111                                         k = (k + 1) % lons[i].length;
112                                         if(k == lons[i][j])
113                                         {
114                                                 break;
115                                         }
116
117                                         pt = pathList[i].priv[k] as Point;
118                                         bmd.setPixel32(pt.x, pt.y, 0xffff0000);
119
120                                 }
121                                 bmd.unlock();
122                         }
123                 }
124
125                 private function getIJfromPoint(pathList:Array, point:Point):Array
126                 {
127                         for(var i:int = 0; i < pathList.length; i++)
128                         {
129                                 for(var j:int = 0; j < pathList[i].priv.length; j++)
130                                 {
131                                         if(point.equals(pathList[i].priv[j] as Point))
132                                         {
133                                                 return [i, j]
134                                         }
135                                 }
136                         }
137                         return null;
138                 }
139         }
140 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。