FORKED

Dive into Cyberspace forked from: fladdict challenge for professionals forked from: Dive into Cyberspace forked from: fladdict challenge for professionals [diff(1)]

  1. // forked from keim_at_Si's Dive into Cyberspace forked from: fladdict challenge for professionals
  2. // forked from checkmate's fladdict challenge for professionals
  3. /**
  4.  * Theme:
  5.  * Play with BitmapPatterBuilder.
  6.  * Purpose of this trial is to find the possibility of the dot pattern.
  7.  *
  8.  * by Takayuki Fukatsu aka fladdict
  9.  **/
  10. package {
  11.     import flash.display.Bitmap;
  12.     import flash.display.BitmapData;
  13.     import flash.display.Graphics;
  14.     import flash.display.Sprite;
  15.     import flash.display.StageScaleMode;
  16.     import flash.display.Shape;
  17.     import flash.events.*;
  18.     import flash.geom.*;
  19.     
  20.     public class Professional extends Sprite {
  21.         private var alphabet:Array;
  22.         private var alpCoord:Vector.<Point> = new Vector.<Point>();
  23.         private var counter:int = 0;
  24.         private var position:Vector3D = new Vector3D(000);
  25.         private var angle:Number = 0;
  26.         private var omega:Number = 0;
  27.         private var matrix:Matrix = new Matrix();
  28.         private var screen:BitmapData = new BitmapData(465465false0);
  29.         private var canvas:Shape = new Shape();
  30.         private var field:BitmapData = new BitmapData(4848true0);
  31.         private var letter:BitmapData = new BitmapData(1328true0);
  32.         
  33.         public function Professional() {
  34.             stage.scaleMode = StageScaleMode.NO_SCALE;
  35.             alphabet = [_build("7c2221227c00"), _build("7f4949493600"), _build("3e4141412200"),                          // ABC
  36.                         _build("7f4141423c00"), _build("7f4949494100"), _build("7f0909090100"), _build("3e4149493a00"),  // DEFG
  37.                         _build("7f0808087f00"), _build("00417f410000"), _build("2040413f0100"), _build("7f0814224100"),  // HIJK
  38.                         _build("7f4040404000"), _build("7f020c027f00"), _build("7f0408107f00"), _build("3e4141413e00"),  // LMNO
  39.                         _build("7f0909090600"), _build("3e4151215e00"), _build("7f0919294600"), _build("264949493200"),  // PQRS
  40.                         _build("01017f010100"), _build("3f4040403f00"), _build("1f2040201f00"), _build("1f601c601f00"),  // TUVW
  41.                         _build("631408146300"), _build("070870080700"), _build("615149454300"), _build("000000000000")]; // XYZ
  42.             for (var i:int=0; i<48; i++) {
  43.                 alpCoord.push(new Point(i*30%48int(i*0.625)%6*8));
  44.                 field.copyPixels(alphabet[i%26], alphabet[0].rect, alpCoord[alpCoord.length-1]);
  45.             }
  46.             var a:Array = [22,4,11,2,14,12,4,26,19,14,26,2,24,1,4,17,18,15,0,2,4];
  47.             for (i=0; i<21; i++) letter.copyPixels(alphabet[a[i]], alphabet[0].rect, new Point(i*60));
  48.             addChild(new Bitmap(screen));
  49.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  50.         }
  51.         
  52.         private function onEnterFrame(e:Event) : void {
  53.             var index:int=counter%26, speed:Number=counter*0.0002+0.005;
  54.             for (var i:int=0; i<6; i++) {
  55.                 var scale:Number = 2/(1-position.z);
  56.                 matrix.identity();
  57.                 matrix.translate(-alpCoord[index].x-2.5, -alpCoord[index].y-3.5);
  58.                 matrix.scale(scale, scale);
  59.                 matrix.rotate(angle+=(omega*=0.998));
  60.                 matrix.translate((position.x*=0.998)+232.5, (position.y*=0.998)+232.5);
  61.                 _render(field, matrix);
  62.                 if ((position.z+=speed) >= 1) {
  63.                     index = (++counter) % 26;
  64.                     omega += (Math.random()-0.5)*0.01;
  65.                     var range:Number = (counter>200) ? 0 : (200-counter)*0.5;
  66.                     position.x = (Math.random()-0.5) * range;
  67.                     position.y = (Math.random()-0.5) * range;
  68.                     position.z = 0;
  69.                 }
  70.             }
  71.             if (Math.random()<(speed-0.01)*20) _render(letter, null);
  72.         }
  73.         
  74.         private function _build(hex:String) : BitmapData {
  75.             var x:int, y:int, pat:int, pixels:Array=[[],[],[],[],[],[],[],[]];
  76.             for (x=0; x<6; x++)
  77.                 for (y=0, pat=parseInt(hex.substr(x<<12), 16); y<8; y++, pat>>=1
  78.                     pixels[y][x] = pat&1;
  79.             return BitmapPatternBuilder.build(pixels, [0x18000000, 0x1020ffc0]);
  80.         }
  81.         private function _render(bitmap:BitmapData, matrix:Matrix) : void {
  82.             var g:Graphics = canvas.graphics;
  83.             g.clear();
  84.             g.beginBitmapFill(bitmap, matrix);
  85.             g.drawRect(0,0,465,465);
  86.             g.endFill();
  87.             screen.draw(canvas);
  88.         }
  89.     }
  90. }
  91. /**-----------------------------------------------------
  92.  * Use following BitmapPatternBuilder class 
  93.  * 
  94.  * DO NOT CHANGE any codes below this comment.
  95.  *
  96.  * -----------------------------------------------------
  97. */
  98. import flash.display.Bitmap;
  99. import flash.display.BitmapData;
  100. import flash.display.Graphics;
  101.     
  102. class BitmapPatternBuilder{
  103.     /**
  104.      * creates BitmapData filled with dot pattern.
  105.      * First parameter is 2d array that contains color index for each pixels;
  106.      * Second parameter contains color reference table.
  107.      *
  108.      * @parameter pattern:Array 2d array that contains color index for each pixel.
  109.      * @parameter colors:Array 1d array that contains color table.
  110.      * @returns BitmapData
  111.      */
  112.     public static function build(pattern:Array, colors:Array):BitmapData{
  113.         var bitmapW:int = pattern[0].length;
  114.         var bitmapH:int = pattern.length;
  115.         var bmd:BitmapData = new BitmapData(bitmapW,bitmapH,true,0x000000);
  116.         for(var yy:int=0; yy<bitmapH; yy++){
  117.             for(var xx:int=0; xx<bitmapW; xx++){
  118.                 var color:int = colors[pattern[yy][xx]];
  119.                 bmd.setPixel32(xx, yy, color);
  120.             }
  121.         }
  122.         return bmd;
  123.     }
  124.     
  125.     /**
  126.      * short cut function for Graphics.beginBitmapFill with pattern.
  127.      */
  128.     public static function beginBitmapFill(pattern:Array, colors:Array, graphics:Graphics):void{
  129.         var bmd:BitmapData = build(pattern, colors);
  130.         graphics.beginBitmapFill(bmd);
  131.         bmd.dispose();        
  132.     }
  133. }
noswf

Dive into Cyberspace forked from: fladdict challenge for professionals Dive into Cyberspace にコメントをつけてみた [diff(94)]

  1. // forked from keim_at_Si's Dive into Cyberspace forked from: fladdict challenge for professionals
  2. /*
  3.  * 動きが面白かったのでコメントつけながら理解していった
  4.  */
  5. // forked from checkmate's fladdict challenge for professionals
  6. /**
  7.  * Theme:
  8.  * Play with BitmapPatterBuilder.
  9.  * Purpose of this trial is to find the possibility of the dot pattern.
  10.  *
  11.  * by Takayuki Fukatsu aka fladdict
  12.  **/
  13. package {
  14.     import flash.display.Bitmap;
  15.     import flash.display.BitmapData;
  16.     import flash.display.Graphics;
  17.     import flash.display.Sprite;
  18.     import flash.display.StageScaleMode;
  19.     import flash.display.Shape;
  20.     import flash.events.*;
  21.     import flash.geom.*;
  22.     // 処理を行うクラス    
  23.     public class DiveIntoCyberspace  extends Sprite {
  24.         // アルファベットのビットマップを格納する配列
  25.         private var alphabet:Array;
  26.         
  27.         // アルファベットの field での位置を格納するvector
  28.         private var alpCoord:Vector.<Point> = new Vector.<Point>();
  29.         
  30.         // ステップ数 (counter%26がズームしていく文字になる)
  31.         private var counter:int = 0;
  32.         
  33.         // 表示中の位置
  34.         private var position:Vector3D = new Vector3D(000);
  35.         
  36.         // 表示角度
  37.         private var angle:Number = 0;
  38.         
  39.         // 角速度
  40.         private var omega:Number = 0;
  41.         
  42.         // 表示時に利用する回転行列
  43.         private var matrix:Matrix = new Matrix();
  44.         
  45.         // 描画用の BitmapData
  46.         private var screen:BitmapData = new BitmapData(465465false0);
  47.         
  48.         // screen に転送する前の一時描画用のキャンバス
  49.         private var canvas:Shape = new Shape();
  50.         
  51.         // フィールド(横8文字、縦6文字)を描画する BitmapData
  52.         // これを敷き詰めて拡大しながら描画している
  53.         private var field:BitmapData = new BitmapData(4848true0);
  54.         
  55.         // WELCOME TO... の BitmapData
  56.         private var letter:BitmapData = new BitmapData(1328true0);
  57.         
  58.         // コンストラクタ
  59.         public function DiveIntoCyberspace () {
  60.             stage.scaleMode = StageScaleMode.NO_SCALE;
  61.             // アルファベット A~Z を定義する
  62.             // 1文字は6x8
  63.             alphabet = [_build("7c2221227c00"), _build("7f4949493600"), _build("3e4141412200"),                          // ABC
  64.                         _build("7f4141423c00"), _build("7f4949494100"), _build("7f0909090100"), _build("3e4149493a00"),  // DEFG
  65.                         _build("7f0808087f00"), _build("00417f410000"), _build("2040413f0100"), _build("7f0814224100"),  // HIJK
  66.                         _build("7f4040404000"), _build("7f020c027f00"), _build("7f0408107f00"), _build("3e4141413e00"),  // LMNO
  67.                         _build("7f0909090600"), _build("3e4151215e00"), _build("7f0919294600"), _build("264949493200"),  // PQRS
  68.                         _build("01017f010100"), _build("3f4040403f00"), _build("1f2040201f00"), _build("1f601c601f00"),  // TUVW
  69.                         _build("631408146300"), _build("070870080700"), _build("615149454300"), _build("000000000000")]; // XYZ
  70.             // フィールド(横8文字、縦6文字)を描画する
  71.             for (var i:int=0; i<48; i++) {
  72.                 // x座標: i*30%48          -> (i * 5)     % 8個 * 6px
  73.                 // y座標: int(i*0.625)%6*8 -> (i * 0.625) % 6個 * 8px
  74.                 alpCoord.push(new Point(i*30%48int(i*0.625)%6*8));
  75.                 field.copyPixels(alphabet[i%26], alphabet[0].rect, alpCoord[alpCoord.length-1]);
  76.             }
  77.             // フィールドを表示するには次のコメントを取ってみよう
  78.             //addChild(new Bitmap(field)); return;
  79.             // letter:BitmapData を描画する
  80.             //             W  E L  C O  M  E    T  O     C Y  B E R  S  P  A C E
  81.             var a:Array = [22,4,11,2,14,12,4,26,19,14,26,2,24,1,4,17,18,15,0,2,4];
  82.             for (i=0; i<21; i++) letter.copyPixels(alphabet[a[i]], alphabet[0].rect, new Point(i*60));
  83.             // letter を表示するには次のコメントを取ってみよう
  84.             //addChild(new Bitmap(letter)); return;
  85.             // screen を表示
  86.             addChild(new Bitmap(screen));
  87.             // アニメーションスタート
  88.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  89.         }
  90.         // 毎フレームの処理
  91.         private function onEnterFrame(e:Event) : void {
  92.             // index: アルファベットの番号
  93.             // speed: counter に応じて徐々に早くなっていく
  94.             var index:int=counter%26, speed:Number=counter*0.0002+0.005;
  95.             // 1フレームにつき6回描画する
  96.             for (var i:int=0; i<1; i++) {
  97.                 //--------------------------------------------------
  98.                 //            描画処理
  99.                 //--------------------------------------------------
  100.                 // 倍率は z が1に近づくにつれて大きくなるようにする
  101.                 var scale:Number = 2/(1-position.z);
  102.                 // 変換マトリックスを初期化する
  103.                 matrix.identity();
  104.                 // index番目のアルファベットが中心に来るように移動する
  105.                 matrix.translate(-alpCoord[index].x-2.5, -alpCoord[index].y-3.5);
  106.                 // 倍率を設定する
  107.                 matrix.scale(scale, scale);
  108.                 // 徐々に回転速度を落としていく
  109.                 matrix.rotate(angle+=(omega*=0.998));
  110.                 // 徐々に中心に移動するようにする
  111.                 matrix.translate((position.x*=0.998)+232.5, (position.y*=0.998)+232.5);
  112.                 // 描画する
  113.                 _render(field, matrix);
  114.                 //--------------------------------------------------
  115.                 //            次の文字への移動処理
  116.                 //--------------------------------------------------
  117.                 // z 座標が 1 より大きくなったら次の文字に移動する
  118.                 if ((position.z+=speed) >= 1) {
  119.                     index = (++counter) % 26;
  120.                     omega += (Math.random()-0.5)*0.01;
  121.                     var range:Number = (counter>200) ? 0 : (200-counter)*0.5;
  122.                     position.x = (Math.random()-0.5) * range;
  123.                     position.y = (Math.random()-0.5) * range;
  124.                     position.z = 0;
  125.                 }
  126.             }
  127.             // speed が速くなるにしたがって letter を描画する確率を上げる
  128.             if (Math.random()<(speed-0.01)*20) _render(letter, null);
  129.         }
  130.         // 文字列を描画する
  131.         private function _build(hex:String) : BitmapData {
  132.             var x:int, y:int, pat:int, pixels:Array=[[],[],[],[],[],[],[],[]];
  133.             // x座標が0から6まで
  134.             for (x=0; x<6; x++)
  135.                 // y座標が0から8まで
  136.                 // pat: x*2番目から2文字取り出して整数に変換したもので初期化
  137.                 //      y が1増えるごとに、右に1回ずつシフトしていく
  138.                 for (y=0, pat=parseInt(hex.substr(x<<12), 16); y<8; y++, pat>>=1
  139.                     // (x,y) は pat の一番右の bit が立っているかどうか
  140.                     pixels[y][x] = pat&1;
  141.             // fladdict 製 builder で BitmapData を作成する。
  142.             // アルファを低めに設定してブラー効果を狙っている。
  143.             // (移動の速い文字はボケたように見える)
  144.             return BitmapPatternBuilder.build(pixels, [0x18000000, 0x1020ffc0]);
  145.         }
  146.         // bitmap を利用して描画する
  147.         private function _render(bitmap:BitmapData, matrix:Matrix) : void {
  148.             var g:Graphics = canvas.graphics;
  149.             g.clear();
  150.             g.beginBitmapFill(bitmap, matrix);
  151.             g.drawRect(0,0,465,465);
  152.             g.endFill();
  153.             screen.draw(canvas);
  154.         }
  155.     }
  156. }
  157. /**-----------------------------------------------------
  158.  * Use following BitmapPatternBuilder class 
  159.  * 
  160.  * DO NOT CHANGE any codes below this comment.
  161.  *
  162.  * -----------------------------------------------------
  163. */
  164. import flash.display.Bitmap;
  165. import flash.display.BitmapData;
  166. import flash.display.Graphics;
  167.     
  168. class BitmapPatternBuilder{
  169.     /**
  170.      * creates BitmapData filled with dot pattern.
  171.      * First parameter is 2d array that contains color index for each pixels;
  172.      * Second parameter contains color reference table.
  173.      *
  174.      * @parameter pattern:Array 2d array that contains color index for each pixel.
  175.      * @parameter colors:Array 1d array that contains color table.
  176.      * @returns BitmapData
  177.      */
  178.     public static function build(pattern:Array, colors:Array):BitmapData{
  179.         var bitmapW:int = pattern[0].length;
  180.         var bitmapH:int = pattern.length;
  181.         var bmd:BitmapData = new BitmapData(bitmapW,bitmapH,true,0x000000);
  182.         for(var yy:int=0; yy<bitmapH; yy++){
  183.             for(var xx:int=0; xx<bitmapW; xx++){
  184.                 var color:int = colors[pattern[yy][xx]];
  185.                 bmd.setPixel32(xx, yy, color);
  186.             }
  187.         }
  188.         return bmd;
  189.     }
  190.     
  191.     /**
  192.      * short cut function for Graphics.beginBitmapFill with pattern.
  193.      */
  194.     public static function beginBitmapFill(pattern:Array, colors:Array, graphics:Graphics):void{
  195.         var bmd:BitmapData = build(pattern, colors);
  196.         graphics.beginBitmapFill(bmd);
  197.         bmd.dispose();        
  198.     }
  199. }
noswf

Dive into Cyberspace forked from: fladdict challenge for professionals forked from: Dive into Cyberspace forked from: fladdict challenge for professionals [diff(1)]

  1. // forked from keim_at_Si's Dive into Cyberspace forked from: fladdict challenge for professionals
  2. // forked from checkmate's fladdict challenge for professionals
  3. /**
  4.  * Theme:
  5.  * Play with BitmapPatterBuilder.
  6.  * Purpose of this trial is to find the possibility of the dot pattern.
  7.  *
  8.  * by Takayuki Fukatsu aka fladdict
  9.  **/
  10. package {
  11.     import flash.display.Bitmap;
  12.     import flash.display.BitmapData;
  13.     import flash.display.Graphics;
  14.     import flash.display.Sprite;
  15.     import flash.display.StageScaleMode;
  16.     import flash.display.Shape;
  17.     import flash.events.*;
  18.     import flash.geom.*;
  19.     
  20.     public class Professional extends Sprite {
  21.         private var alphabet:Array;
  22.         private var alpCoord:Vector.<Point> = new Vector.<Point>();
  23.         private var counter:int = 0;
  24.         private var position:Vector3D = new Vector3D(000);
  25.         private var angle:Number = 0;
  26.         private var omega:Number = 0;
  27.         private var matrix:Matrix = new Matrix();
  28.         private var screen:BitmapData = new BitmapData(465465false0);
  29.         private var canvas:Shape = new Shape();
  30.         private var field:BitmapData = new BitmapData(4848true0);
  31.         private var letter:BitmapData = new BitmapData(1328true0);
  32.         
  33.         public function Professional() {
  34.             stage.scaleMode = StageScaleMode.NO_SCALE;
  35.             alphabet = [_build("7c2221227c00"), _build("7f4949493600"), _build("3e4141412200"),                          // ABC
  36.                         _build("7f4141423c00"), _build("7f4949494100"), _build("7f0909090100"), _build("3e4149493a00"),  // DEFG
  37.                         _build("7f0808087f00"), _build("00417f410000"), _build("2040413f0100"), _build("7f0814224100"),  // HIJK
  38.                         _build("7f4040404000"), _build("7f020c027f00"), _build("7f0408107f00"), _build("3e4141413e00"),  // LMNO
  39.                         _build("7f0909090600"), _build("3e4151215e00"), _build("7f0919294600"), _build("264949493200"),  // PQRS
  40.                         _build("01017f010100"), _build("3f4040403f00"), _build("1f2040201f00"), _build("1f601c601f00"),  // TUVW
  41.                         _build("631408146300"), _build("070870080700"), _build("615149454300"), _build("000000000000")]; // XYZ
  42.             for (var i:int=0; i<48; i++) {
  43.                 alpCoord.push(new Point(i*30%48int(i*0.625)%6*8));
  44.                 field.copyPixels(alphabet[i%26], alphabet[0].rect, alpCoord[alpCoord.length-1]);
  45.             }
  46.             var a:Array = [22,4,11,2,14,12,4,26,19,14,26,2,24,1,4,17,18,15,0,2,4];
  47.             for (i=0; i<21; i++) letter.copyPixels(alphabet[a[i]], alphabet[0].rect, new Point(i*60));
  48.             addChild(new Bitmap(screen));
  49.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  50.         }
  51.         
  52.         private function onEnterFrame(e:Event) : void {
  53.             var index:int=counter%26, speed:Number=counter*0.0002+0.005;
  54.             for (var i:int=0; i<6; i++) {
  55.                 var scale:Number = 2/(1-position.z);
  56.                 matrix.identity();
  57.                 matrix.translate(-alpCoord[index].x-2.5, -alpCoord[index].y-3.5);
  58.                 matrix.scale(scale, scale);
  59.                 matrix.rotate(angle+=(omega*=0.998));
  60.                 matrix.translate((position.x*=0.998)+232.5, (position.y*=0.998)+232.5);
  61.                 _render(field, matrix);
  62.                 if ((position.z+=speed) >= 1) {
  63.                     index = (++counter) % 26;
  64.                     omega += (Math.random()-0.5)*0.01;
  65.                     var range:Number = (counter>200) ? 0 : (200-counter)*0.5;
  66.                     position.x = (Math.random()-0.5) * range;
  67.                     position.y = (Math.random()-0.5) * range;
  68.                     position.z = 0;
  69.                 }
  70.             }
  71.             if (Math.random()<(speed-0.01)*20) _render(letter, null);
  72.         }
  73.         
  74.         private function _build(hex:String) : BitmapData {
  75.             var x:int, y:int, pat:int, pixels:Array=[[],[],[],[],[],[],[],[]];
  76.             for (x=0; x<6; x++)
  77.                 for (y=0, pat=parseInt(hex.substr(x<<12), 16); y<8; y++, pat>>=1
  78.                     pixels[y][x] = pat&1;
  79.             return BitmapPatternBuilder.build(pixels, [0x18000000, 0x1020ffc0]);
  80.         }
  81.         private function _render(bitmap:BitmapData, matrix:Matrix) : void {
  82.             var g:Graphics = canvas.graphics;
  83.             g.clear();
  84.             g.beginBitmapFill(bitmap, matrix);
  85.             g.drawRect(0,0,465,465);
  86.             g.endFill();
  87.             screen.draw(canvas);
  88.         }
  89.     }
  90. }
  91. /**-----------------------------------------------------
  92.  * Use following BitmapPatternBuilder class 
  93.  * 
  94.  * DO NOT CHANGE any codes below this comment.
  95.  *
  96.  * -----------------------------------------------------
  97. */
  98. import flash.display.Bitmap;
  99. import flash.display.BitmapData;
  100. import flash.display.Graphics;
  101.     
  102. class BitmapPatternBuilder{
  103.     /**
  104.      * creates BitmapData filled with dot pattern.
  105.      * First parameter is 2d array that contains color index for each pixels;
  106.      * Second parameter contains color reference table.
  107.      *
  108.      * @parameter pattern:Array 2d array that contains color index for each pixel.
  109.      * @parameter colors:Array 1d array that contains color table.
  110.      * @returns BitmapData
  111.      */
  112.     public static function build(pattern:Array, colors:Array):BitmapData{
  113.         var bitmapW:int = pattern[0].length;
  114.         var bitmapH:int = pattern.length;
  115.         var bmd:BitmapData = new BitmapData(bitmapW,bitmapH,true,0x000000);
  116.         for(var yy:int=0; yy<bitmapH; yy++){
  117.             for(var xx:int=0; xx<bitmapW; xx++){
  118.                 var color:int = colors[pattern[yy][xx]];
  119.                 bmd.setPixel32(xx, yy, color);
  120.             }
  121.         }
  122.         return bmd;
  123.     }
  124.     
  125.     /**
  126.      * short cut function for Graphics.beginBitmapFill with pattern.
  127.      */
  128.     public static function beginBitmapFill(pattern:Array, colors:Array, graphics:Graphics):void{
  129.         var bmd:BitmapData = build(pattern, colors);
  130.         graphics.beginBitmapFill(bmd);
  131.         bmd.dispose();        
  132.     }
  133. }
noswf

Dive into Cyberspace forked from: fladdict challenge for professionals forked from: Dive into Cyberspace forked from: fladdict challenge for professionals [diff(1)]

  1. // forked from keim_at_Si's Dive into Cyberspace forked from: fladdict challenge for professionals
  2. // forked from checkmate's fladdict challenge for professionals
  3. /**
  4.  * Theme:
  5.  * Play with BitmapPatterBuilder.
  6.  * Purpose of this trial is to find the possibility of the dot pattern.
  7.  *
  8.  * by Takayuki Fukatsu aka fladdict
  9.  **/
  10. package {
  11.     import flash.display.Bitmap;
  12.     import flash.display.BitmapData;
  13.     import flash.display.Graphics;
  14.     import flash.display.Sprite;
  15.     import flash.display.StageScaleMode;
  16.     import flash.display.Shape;
  17.     import flash.events.*;
  18.     import flash.geom.*;
  19.     
  20.     public class Professional extends Sprite {
  21.         private var alphabet:Array;
  22.         private var alpCoord:Vector.<Point> = new Vector.<Point>();
  23.         private var counter:int = 0;
  24.         private var position:Vector3D = new Vector3D(000);
  25.         private var angle:Number = 0;
  26.         private var omega:Number = 0;
  27.         private var matrix:Matrix = new Matrix();
  28.         private var screen:BitmapData = new BitmapData(465465false0);
  29.         private var canvas:Shape = new Shape();
  30.         private var field:BitmapData = new BitmapData(4848true0);
  31.         private var letter:BitmapData = new BitmapData(1328true0);
  32.         
  33.         public function Professional() {
  34.             stage.scaleMode = StageScaleMode.NO_SCALE;
  35.             alphabet = [_build("7c2221227c00"), _build("7f4949493600"), _build("3e4141412200"),                          // ABC
  36.                         _build("7f4141423c00"), _build("7f4949494100"), _build("7f0909090100"), _build("3e4149493a00"),  // DEFG
  37.                         _build("7f0808087f00"), _build("00417f410000"), _build("2040413f0100"), _build("7f0814224100"),  // HIJK
  38.                         _build("7f4040404000"), _build("7f020c027f00"), _build("7f0408107f00"), _build("3e4141413e00"),  // LMNO
  39.                         _build("7f0909090600"), _build("3e4151215e00"), _build("7f0919294600"), _build("264949493200"),  // PQRS
  40.                         _build("01017f010100"), _build("3f4040403f00"), _build("1f2040201f00"), _build("1f601c601f00"),  // TUVW
  41.                         _build("631408146300"), _build("070870080700"), _build("615149454300"), _build("000000000000")]; // XYZ
  42.             for (var i:int=0; i<48; i++) {
  43.                 alpCoord.push(new Point(i*30%48int(i*0.625)%6*8));
  44.                 field.copyPixels(alphabet[i%26], alphabet[0].rect, alpCoord[alpCoord.length-1]);
  45.             }
  46.             var a:Array = [22,4,11,2,14,12,4,26,19,14,26,2,24,1,4,17,18,15,0,2,4];
  47.             for (i=0; i<21; i++) letter.copyPixels(alphabet[a[i]], alphabet[0].rect, new Point(i*60));
  48.             addChild(new Bitmap(screen));
  49.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  50.         }
  51.         
  52.         private function onEnterFrame(e:Event) : void {
  53.             var index:int=counter%26, speed:Number=counter*0.0002+0.005;
  54.             for (var i:int=0; i<6; i++) {
  55.                 var scale:Number = 2/(1-position.z);
  56.                 matrix.identity();
  57.                 matrix.translate(-alpCoord[index].x-2.5, -alpCoord[index].y-3.5);
  58.                 matrix.scale(scale, scale);
  59.                 matrix.rotate(angle+=(omega*=0.998));
  60.                 matrix.translate((position.x*=0.998)+232.5, (position.y*=0.998)+232.5);
  61.                 _render(field, matrix);
  62.                 if ((position.z+=speed) >= 1) {
  63.                     index = (++counter) % 26;
  64.                     omega += (Math.random()-0.5)*0.01;
  65.                     var range:Number = (counter>200) ? 0 : (200-counter)*0.5;
  66.                     position.x = (Math.random()-0.5) * range;
  67.                     position.y = (Math.random()-0.5) * range;
  68.                     position.z = 0;
  69.                 }
  70.             }
  71.             if (Math.random()<(speed-0.01)*20) _render(letter, null);
  72.         }
  73.         
  74.         private function _build(hex:String) : BitmapData {
  75.             var x:int, y:int, pat:int, pixels:Array=[[],[],[],[],[],[],[],[]];
  76.             for (x=0; x<6; x++)
  77.                 for (y=0, pat=parseInt(hex.substr(x<<12), 16); y<8; y++, pat>>=1
  78.                     pixels[y][x] = pat&1;
  79.             return BitmapPatternBuilder.build(pixels, [0x18000000, 0x1020ffc0]);
  80.         }
  81.         private function _render(bitmap:BitmapData, matrix:Matrix) : void {
  82.             var g:Graphics = canvas.graphics;
  83.             g.clear();
  84.             g.beginBitmapFill(bitmap, matrix);
  85.             g.drawRect(0,0,465,465);
  86.             g.endFill();
  87.             screen.draw(canvas);
  88.         }
  89.     }
  90. }
  91. /**-----------------------------------------------------
  92.  * Use following BitmapPatternBuilder class 
  93.  * 
  94.  * DO NOT CHANGE any codes below this comment.
  95.  *
  96.  * -----------------------------------------------------
  97. */
  98. import flash.display.Bitmap;
  99. import flash.display.BitmapData;
  100. import flash.display.Graphics;
  101.     
  102. class BitmapPatternBuilder{
  103.     /**
  104.      * creates BitmapData filled with dot pattern.
  105.      * First parameter is 2d array that contains color index for each pixels;
  106.      * Second parameter contains color reference table.
  107.      *
  108.      * @parameter pattern:Array 2d array that contains color index for each pixel.
  109.      * @parameter colors:Array 1d array that contains color table.
  110.      * @returns BitmapData
  111.      */
  112.     public static function build(pattern:Array, colors:Array):BitmapData{
  113.         var bitmapW:int = pattern[0].length;
  114.         var bitmapH:int = pattern.length;
  115.         var bmd:BitmapData = new BitmapData(bitmapW,bitmapH,true,0x000000);
  116.         for(var yy:int=0; yy<bitmapH; yy++){
  117.             for(var xx:int=0; xx<bitmapW; xx++){
  118.                 var color:int = colors[pattern[yy][xx]];
  119.                 bmd.setPixel32(xx, yy, color);
  120.             }
  121.         }
  122.         return bmd;
  123.     }
  124.     
  125.     /**
  126.      * short cut function for Graphics.beginBitmapFill with pattern.
  127.      */
  128.     public static function beginBitmapFill(pattern:Array, colors:Array, graphics:Graphics):void{
  129.         var bmd:BitmapData = build(pattern, colors);
  130.         graphics.beginBitmapFill(bmd);
  131.         bmd.dispose();        
  132.     }
  133. }
noswf
Get Adobe Flash Player