※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : nitoyon's HelloWorld3D [diff(142)]

FORKED
  1. // forked from nitoyon's キラキラ3D Typography
  2. // キラキラ3D Typography
  3. //-----------------------------------------------------
  4. // 次の2つの組み合わせ+αです
  5. //  - HelloWorld3D 
  6. //    http://wonderfl.net/code/50225c9944de6206a3813f515fce2c51fd56ab23
  7. //  - キラキラPixel3D! in Native Flash 10 3D API 
  8. //    http://wonderfl.net/code/8283df8a03a8f3c290bc88a056b44b3c6084b123
  9. package {
  10.     import flash.display.*;
  11.     import flash.events.Event;
  12.     import flash.geom.*;
  13.     import flash.text.*;
  14.     import flash.utils.setInterval;
  15.     
  16.     [SWF(backgroundColor=0x000000)]
  17.     public class HelloSpace extends Sprite{
  18.         private static const SIZE:Number = 475;
  19.         private static const R:Number = 300;
  20.         private static const HR:Number = R / 2;
  21.         private var particles:Vector.<Number> = new Vector.<Number>();
  22.         private var letterPoints:Vector.<Number> = new Vector.<Number>();
  23.         private var colors:Vector.<uint> = new Vector.<uint>();
  24.         // 光らせるための BitmapData
  25.         private var canvasGlow:BitmapData;
  26.         // 1/4 で描画するための Matrix
  27.         private var mtx:Matrix = new Matrix(0.25000.25);
  28.         public function HelloSpace()
  29.         {
  30.             stage.scaleMode = "noScale";
  31.             stage.align = "TL";
  32.             // BitmapData にテキストを描画して座標を points に格納する
  33.             var bmd:BitmapData = createBitmapData("NUI NIGHT");
  34.             initParticles(bmd);
  35.             // キャンバスを準備
  36.             var canvas:BitmapData = new BitmapData(SIZE, SIZE, false, 0x000000);
  37.             addChild(new Bitmap(canvas));
  38.             // FP10 用 座標変換の準備
  39.             var uvts:Vector.<Number> = new Vector.<Number>();
  40.             var particles2:Vector.<Number> = new Vector.<Number>();
  41.             var mtx3d:Matrix3D = new Matrix3D();
  42.             // 透視投影用の変換行列作成
  43.             var proj:PerspectiveProjection = new PerspectiveProjection();
  44.             proj.fieldOfView = 90;
  45.             var projMat:Matrix3D = proj.toMatrix3D();
  46.             // 光らせるための BitmapData を初期化する
  47.             canvasGlow = new BitmapData(SIZE / 4, SIZE / 4false, 0x000000);
  48.             var bmp:Bitmap = new Bitmap(canvasGlow, PixelSnapping.NEVER, true);
  49.             bmp.scaleX = bmp.scaleY = 4;
  50.             bmp.smoothing = true;
  51.             bmp.blendMode = BlendMode.ADD;
  52.             addChild(bmp);
  53.             // ループ用の変数を用意
  54.             var counter:int = 0;
  55.             var moveCounter:int = 0;
  56.             var xysRandom:Vector.<Number> = new Vector.<Number>();
  57.             var xys:Vector.<Number> = new Vector.<Number>(letterPoints.length);
  58.             var f:Boolean = false;
  59.             // ループ処理
  60.             addEventListener("enterFrame"function(event:Event):void{
  61.                 // 角度を設定して座標変換する (particles → particles2)
  62.                 mtx3d.identity();
  63.                 mtx3d.appendRotation(counter, Vector3D.Y_AXIS);
  64.                 mtx3d.appendRotation(15, Vector3D.X_AXIS);
  65.                 mtx3d.appendTranslation(00, SIZE / 2);
  66.                 mtx3d.transformVectors(particles, particles2);
  67.                 // 透視投影して回転後の座標を計算する
  68.                 Utils3D.projectVectors(projMat, particles2, xysRandom, uvts);
  69.                 // moveCounter 以下ならパーティクルを文字列の配置に近づける
  70.                 // そうでない場合はあらかじめ定義したランダム位置の配置に近づける
  71.                 for (var i:int = 0; i < xysRandom.length; i++){
  72.                     if (i < moveCounter * 2){
  73.                         xys[i] += (letterPoints[i] - xys[i]) * .13;
  74.                     } else {
  75.                         xys[i] += (xysRandom[i] - xys[i]) * .12;
  76.                     }
  77.                 }
  78.                 // 文字列表示中はmoveCounter を加算する
  79.                 moveCounter = (f ? moveCounter + 100 : 0);
  80.                 // BitmapData に描画する
  81.                 canvas.lock();
  82.                 canvas.fillRect(canvas.rect, 0x000000);
  83.                 for (var i:int = 0; i < xys.length / 2; i++){
  84.                     canvas.setPixel32(xys[i * 2] + SIZE / 2, xys[i * 2 + 1] + SIZE / 2, colors[i]);
  85.                 }
  86.                 canvas.unlock();
  87.                 // 光らせるためのキャンバスにコピーする
  88.                 canvasGlow.fillRect(canvasGlow.rect, 0x000000);
  89.                 canvasGlow.draw(canvas, mtx);
  90.                 counter++;
  91.             });
  92.             // 定期的に f を反転させる
  93.             setInterval(function():void{ f = !f; }, 4000);
  94.         }
  95.         private static function createBitmapData(letters:String):BitmapData{
  96.             var fmt:TextFormat = new TextFormat();
  97.             fmt.size = 50;
  98.             var tf:TextField = new TextField();
  99.             tf.defaultTextFormat = fmt;
  100.             tf.autoSize = "left";
  101.             tf.textColor = 0xffffff;
  102.             tf.text = letters;
  103.             var bmd:BitmapData = new BitmapData(tf.textWidth, tf.textHeight, false, 0x000000);
  104.             var mtx:Matrix = new Matrix();
  105.             bmd.draw(tf, mtx);
  106.             return bmd;
  107.         }
  108.         private function initParticles(bmd:BitmapData):void{
  109.             for (var yy:int = 0; yy < bmd.height; yy++){
  110.                 for (var xx:int = 0; xx < bmd.width; xx++){
  111.                     var c:uint = bmd.getPixel(xx, yy);
  112.                     if (c != 0){
  113.                         letterPoints.push(xx - 220, yy - 20);
  114.                         particles.push(R * Math.random() - HR, R * Math.random() - HR, R * Math.random() - HR);
  115.                         colors.push(c);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121. }
noswf
  1. // forked from nitoyon's キラキラ3D Typography
  2. // キラキラ3D Typography
  3. //-----------------------------------------------------
  4. // 次の2つの組み合わせ+αです
  5. //  - HelloWorld3D 
  6. //    http://wonderfl.net/code/50225c9944de6206a3813f515fce2c51fd56ab23
  7. //  - キラキラPixel3D! in Native Flash 10 3D API 
  8. //    http://wonderfl.net/code/8283df8a03a8f3c290bc88a056b44b3c6084b123
  9. package {
  10.     import flash.display.*;
  11.     import flash.events.Event;
  12.     import flash.geom.*;
  13.     import flash.text.*;
  14.     import flash.utils.setInterval;
  15.     
  16.     [SWF(backgroundColor=0x000000)]
  17.     public class HelloSpace extends Sprite{
  18.         private static const SIZE:Number = 475;
  19.         private static const R:Number = 300;
  20.         private static const HR:Number = R / 2;
  21.         private var particles:Vector.<Number> = new Vector.<Number>();
  22.         private var letterPoints:Vector.<Number> = new Vector.<Number>();
  23.         private var colors:Vector.<uint> = new Vector.<uint>();
  24.         
  25.         private var message:Array = ['Welcome to...','the real world!'];
  26.         // 光らせるための BitmapData
  27.         private var canvasGlow:BitmapData;
  28.         // 1/4 で描画するための Matrix
  29.         private var mtx:Matrix = new Matrix(0.25000.25);
  30.         private var count:int = 0;
  31.         public function HelloSpace()
  32.         {
  33.             stage.scaleMode = "noScale";
  34.             stage.align = "TL";
  35.             // BitmapData にテキストを描画して座標を points に格納する
  36.             var bmd:BitmapData = createBitmapData(message,count);
  37.             initParticles(bmd);
  38.             // キャンバスを準備
  39.             var canvas:BitmapData = new BitmapData(SIZE, SIZE, false, 0x000000);
  40.             addChild(new Bitmap(canvas));
  41.             // FP10 用 座標変換の準備
  42.             var uvts:Vector.<Number> = new Vector.<Number>();
  43.             var particles2:Vector.<Number> = new Vector.<Number>();
  44.             var mtx3d:Matrix3D = new Matrix3D();
  45.             // 透視投影用の変換行列作成
  46.             var proj:PerspectiveProjection = new PerspectiveProjection();
  47.             proj.fieldOfView = 90;
  48.             var projMat:Matrix3D = proj.toMatrix3D();
  49.             // 光らせるための BitmapData を初期化する
  50.             canvasGlow = new BitmapData(SIZE / 4, SIZE / 4false, 0x000000);
  51.             var bmp:Bitmap = new Bitmap(canvasGlow, PixelSnapping.NEVER, true);
  52.             bmp.scaleX = bmp.scaleY = 4;
  53.             bmp.smoothing = true;
  54.             bmp.blendMode = BlendMode.ADD;
  55.             addChild(bmp);
  56.             // ループ用の変数を用意
  57.             var counter:int = 0;
  58.             var moveCounter:int = 0;
  59.             var xysRandom:Vector.<Number> = new Vector.<Number>();
  60.             var xys:Vector.<Number> = new Vector.<Number>(letterPoints.length);
  61.             var f:Boolean = false;
  62.             // ループ処理
  63.             addEventListener("enterFrame"function(event:Event):void{
  64.                 // 角度を設定して座標変換する (particles → particles2)
  65.                 mtx3d.identity();
  66.                 mtx3d.appendRotation(counter, Vector3D.Y_AXIS);
  67.                 mtx3d.appendRotation(15, Vector3D.X_AXIS);
  68.                 mtx3d.appendTranslation(00, SIZE / 2);
  69.                 mtx3d.transformVectors(particles, particles2);
  70.                 // 透視投影して回転後の座標を計算する
  71.                 Utils3D.projectVectors(projMat, particles2, xysRandom, uvts);
  72.                 // moveCounter 以下ならパーティクルを文字列の配置に近づける
  73.                 // そうでない場合はあらかじめ定義したランダム位置の配置に近づける
  74.                 for (var i:int = 0; i < xysRandom.length; i++){
  75.                     if (i < moveCounter * 2){
  76.                         xys[i] += (letterPoints[i] - xys[i]) * .13;
  77.                     } else {
  78.                         xys[i] += (xysRandom[i] - xys[i]) * .12;
  79.                     }
  80.                 }
  81.                 // 文字列表示中はmoveCounter を加算する
  82.                 moveCounter = (f ? moveCounter + 100 : 0);
  83.                 // BitmapData に描画する
  84.                 canvas.lock();
  85.                 canvas.fillRect(canvas.rect, 0x000000);
  86.                 for (var i:int = 0; i < xys.length / 2; i++){
  87.                     canvas.setPixel32(xys[i * 2] + SIZE / 2, xys[i * 2 + 1] + SIZE / 2, colors[i]);
  88.                 }
  89.                 canvas.unlock();
  90.                 // 光らせるためのキャンバスにコピーする
  91.                 canvasGlow.fillRect(canvasGlow.rect, 0x000000);
  92.                 canvasGlow.draw(canvas, mtx);
  93.                 counter++;
  94.             });
  95.             // 定期的に f を反転させる
  96.             setInterval(function():void{ f = !f; }, 4000);
  97.         }
  98.         private static function createBitmapData(letters:Array,count:int):BitmapData{
  99.             var fmt:TextFormat = new TextFormat();
  100.             fmt.size = 50;
  101.             var tf:TextField = new TextField();
  102.             tf.defaultTextFormat = fmt;
  103.             tf.autoSize = "left";
  104.             tf.textColor = 0x00ff00;
  105.             tf.text= letters[count];
  106.             trace(letters)
  107.             var bmd:BitmapData = new BitmapData(tf.textWidth, tf.textHeight, false, 0x000000);
  108.             var mtx:Matrix = new Matrix();
  109.             bmd.draw(tf, mtx);
  110.             if(count == 0){
  111.                 count++;
  112.             }else{
  113.                 count = 0;
  114.             }
  115.             
  116.             return bmd;
  117.             
  118.         }
  119.         private function initParticles(bmd:BitmapData):void{
  120.             for (var yy:int = 0; yy < bmd.height; yy++){
  121.                 for (var xx:int = 0; xx < bmd.width; xx++){
  122.                     var c:uint = bmd.getPixel(xx, yy);
  123.                     if (c != 0){
  124.                         letterPoints.push(xx - 220, yy - 20);
  125.                         particles.push(R * Math.random() - HR, R * Math.random() - HR, R * Math.random() - HR);
  126.                         colors.push(c);
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.     }
  132. }
noswf
  1. // forked from nitoyon's キラキラ3D Typography
  2. // キラキラ3D Typography
  3. //-----------------------------------------------------
  4. // 次の2つの組み合わせ+αです
  5. //  - HelloWorld3D 
  6. //    http://wonderfl.net/code/50225c9944de6206a3813f515fce2c51fd56ab23
  7. //  - キラキラPixel3D! in Native Flash 10 3D API 
  8. //    http://wonderfl.net/code/8283df8a03a8f3c290bc88a056b44b3c6084b123
  9. package {
  10.     import flash.display.*;
  11.     import flash.events.Event;
  12.     import flash.geom.*;
  13.     import flash.text.*;
  14.     import flash.utils.setInterval;
  15.     
  16.     [SWF(backgroundColor=0x000000)]
  17.     public class HelloSpace extends Sprite{
  18.         private static const SIZE:Number = 475;
  19.         private static const R:Number = 300;
  20.         private static const HR:Number = R / 2;
  21.         private var particles:Vector.<Number> = new Vector.<Number>();
  22.         private var letterPoints:Vector.<Number> = new Vector.<Number>();
  23.         private var colors:Vector.<uint> = new Vector.<uint>();
  24.         // 光らせるための BitmapData
  25.         private var canvasGlow:BitmapData;
  26.         // 1/4 で描画するための Matrix
  27.         private var mtx:Matrix = new Matrix(0.25000.25);
  28.         public function HelloSpace()
  29.         {
  30.             stage.scaleMode = "noScale";
  31.             stage.align = "TL";
  32.             // BitmapData にテキストを描画して座標を points に格納する
  33.             var bmd:BitmapData = createBitmapData("www.bozuman.com");
  34.             initParticles(bmd);
  35.             // キャンバスを準備
  36.             var canvas:BitmapData = new BitmapData(SIZE, SIZE, false, 0x000000);
  37.             addChild(new Bitmap(canvas));
  38.             // FP10 用 座標変換の準備
  39.             var uvts:Vector.<Number> = new Vector.<Number>();
  40.             var particles2:Vector.<Number> = new Vector.<Number>();
  41.             var mtx3d:Matrix3D = new Matrix3D();
  42.             // 透視投影用の変換行列作成
  43.             var proj:PerspectiveProjection = new PerspectiveProjection();
  44.             proj.fieldOfView = 90;
  45.             var projMat:Matrix3D = proj.toMatrix3D();
  46.             // 光らせるための BitmapData を初期化する
  47.             canvasGlow = new BitmapData(SIZE / 4, SIZE / 4false, 0x000000);
  48.             var bmp:Bitmap = new Bitmap(canvasGlow, PixelSnapping.NEVER, true);
  49.             bmp.scaleX = bmp.scaleY = 4;
  50.             bmp.smoothing = true;
  51.             bmp.blendMode = BlendMode.ADD;
  52.             addChild(bmp);
  53.             // ループ用の変数を用意
  54.             var counter:int = 0;
  55.             var moveCounter:int = 0;
  56.             var xysRandom:Vector.<Number> = new Vector.<Number>();
  57.             var xys:Vector.<Number> = new Vector.<Number>(letterPoints.length);
  58.             var f:Boolean = false;
  59.             // ループ処理
  60.             addEventListener("enterFrame"function(event:Event):void{
  61.                 // 角度を設定して座標変換する (particles → particles2)
  62.                 mtx3d.identity();
  63.                 mtx3d.appendRotation(counter, Vector3D.Y_AXIS);
  64.                 mtx3d.appendRotation(15, Vector3D.X_AXIS);
  65.                 mtx3d.appendTranslation(00, SIZE / 2);
  66.                 mtx3d.transformVectors(particles, particles2);
  67.                 // 透視投影して回転後の座標を計算する
  68.                 Utils3D.projectVectors(projMat, particles2, xysRandom, uvts);
  69.                 // moveCounter 以下ならパーティクルを文字列の配置に近づける
  70.                 // そうでない場合はあらかじめ定義したランダム位置の配置に近づける
  71.                 for (var i:int = 0; i < xysRandom.length; i++){
  72.                     if (i < moveCounter * 2){
  73.                         xys[i] += (letterPoints[i] - xys[i]) * .13;
  74.                     } else {
  75.                         xys[i] += (xysRandom[i] - xys[i]) * .12;
  76.                     }
  77.                 }
  78.                 // 文字列表示中はmoveCounter を加算する
  79.                 moveCounter = (f ? moveCounter + 100 : 0);
  80.                 // BitmapData に描画する
  81.                 canvas.lock();
  82.                 canvas.fillRect(canvas.rect, 0x000000);
  83.                 for (var i:int = 0; i < xys.length / 2; i++){
  84.                     canvas.setPixel32(xys[i * 2] + SIZE / 2, xys[i * 2 + 1] + SIZE / 2, colors[i]);
  85.                 }
  86.                 canvas.unlock();
  87.                 // 光らせるためのキャンバスにコピーする
  88.                 canvasGlow.fillRect(canvasGlow.rect, 0x000000);
  89.                 canvasGlow.draw(canvas, mtx);
  90.                 counter++;
  91.             });
  92.             // 定期的に f を反転させる
  93.             setInterval(function():void{ f = !f; }, 4000);
  94.         }
  95.         private static function createBitmapData(letters:String):BitmapData{
  96.             var fmt:TextFormat = new TextFormat();
  97.             fmt.size = 50;
  98.             var tf:TextField = new TextField();
  99.             tf.defaultTextFormat = fmt;
  100.             tf.autoSize = "left";
  101.             tf.textColor = 0xffffff;
  102.             tf.text = letters;
  103.             var bmd:BitmapData = new BitmapData(tf.textWidth, tf.textHeight, false, 0x000000);
  104.             var mtx:Matrix = new Matrix();
  105.             bmd.draw(tf, mtx);
  106.             return bmd;
  107.         }
  108.         private function initParticles(bmd:BitmapData):void{
  109.             for (var yy:int = 0; yy < bmd.height; yy++){
  110.                 for (var xx:int = 0; xx < bmd.width; xx++){
  111.                     var c:uint = bmd.getPixel(xx, yy);
  112.                     if (c != 0){
  113.                         letterPoints.push(xx - 220, yy - 20);
  114.                         particles.push(R * Math.random() - HR, R * Math.random() - HR, R * Math.random() - HR);
  115.                         colors.push(c);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121. }
noswf
  1. // forked from nitoyon's キラキラ3D Typography
  2. // キラキラ3D Typography
  3. //-----------------------------------------------------
  4. // 次の2つの組み合わせ+αです
  5. //  - HelloWorld3D 
  6. //    http://wonderfl.net/code/50225c9944de6206a3813f515fce2c51fd56ab23
  7. //  - キラキラPixel3D! in Native Flash 10 3D API 
  8. //    http://wonderfl.net/code/8283df8a03a8f3c290bc88a056b44b3c6084b123
  9. package {
  10.     import flash.display.*;
  11.     import flash.events.Event;
  12.     import flash.geom.*;
  13.     import flash.text.*;
  14.     import flash.utils.setInterval;
  15.     
  16.     [SWF(backgroundColor=0x000000)]
  17.     public class HelloSpace extends Sprite{
  18.         private static const SIZE:Number = 475;
  19.         private static const R:Number = 300;
  20.         private static const HR:Number = R / 2;
  21.         private var particles:Vector.<Number> = new Vector.<Number>();
  22.         private var letterPoints:Vector.<Number> = new Vector.<Number>();
  23.         private var colors:Vector.<uint> = new Vector.<uint>();
  24.         // 光らせるための BitmapData
  25.         private var canvasGlow:BitmapData;
  26.         // 1/4 で描画するための Matrix
  27.         private var mtx:Matrix = new Matrix(0.25000.25);
  28.         public function HelloSpace()
  29.         {
  30.             stage.scaleMode = "noScale";
  31.             stage.align = "TL";
  32.             // BitmapData にテキストを描画して座標を points に格納する
  33.             var bmd:BitmapData = createBitmapData("하이");
  34.             initParticles(bmd);
  35.             // キャンバスを準備
  36.             var canvas:BitmapData = new BitmapData(SIZE, SIZE, false, 0x000000);
  37.             addChild(new Bitmap(canvas));
  38.             // FP10 用 座標変換の準備
  39.             var uvts:Vector.<Number> = new Vector.<Number>();
  40.             var particles2:Vector.<Number> = new Vector.<Number>();
  41.             var mtx3d:Matrix3D = new Matrix3D();
  42.             // 透視投影用の変換行列作成
  43.             var proj:PerspectiveProjection = new PerspectiveProjection();
  44.             proj.fieldOfView = 90;
  45.             var projMat:Matrix3D = proj.toMatrix3D();
  46.             // 光らせるための BitmapData を初期化する
  47.             canvasGlow = new BitmapData(SIZE / 4, SIZE / 4false, 0x000000);
  48.             var bmp:Bitmap = new Bitmap(canvasGlow, PixelSnapping.NEVER, true);
  49.             bmp.scaleX = bmp.scaleY = 4;
  50.             bmp.smoothing = true;
  51.             bmp.blendMode = BlendMode.ADD;
  52.             addChild(bmp);
  53.             // ループ用の変数を用意
  54.             var counter:int = 0;
  55.             var moveCounter:int = 0;
  56.             var xysRandom:Vector.<Number> = new Vector.<Number>();
  57.             var xys:Vector.<Number> = new Vector.<Number>(letterPoints.length);
  58.             var f:Boolean = false;
  59.             // ループ処理
  60.             addEventListener("enterFrame"function(event:Event):void{
  61.                 // 角度を設定して座標変換する (particles → particles2)
  62.                 mtx3d.identity();
  63.                 mtx3d.appendRotation(counter, Vector3D.Y_AXIS);
  64.                 mtx3d.appendRotation(15, Vector3D.X_AXIS);
  65.                 mtx3d.appendTranslation(00, SIZE / 2);
  66.                 mtx3d.transformVectors(particles, particles2);
  67.                 // 透視投影して回転後の座標を計算する
  68.                 Utils3D.projectVectors(projMat, particles2, xysRandom, uvts);
  69.                 // moveCounter 以下ならパーティクルを文字列の配置に近づける
  70.                 // そうでない場合はあらかじめ定義したランダム位置の配置に近づける
  71.                 for (var i:int = 0; i < xysRandom.length; i++){
  72.                     if (i < moveCounter * 2){
  73.                         xys[i] += (letterPoints[i] - xys[i]) * .13;
  74.                     } else {
  75.                         xys[i] += (xysRandom[i] - xys[i]) * .12;
  76.                     }
  77.                 }
  78.                 // 文字列表示中はmoveCounter を加算する
  79.                 moveCounter = (f ? moveCounter + 100 : 0);
  80.                 // BitmapData に描画する
  81.                 canvas.lock();
  82.                 canvas.fillRect(canvas.rect, 0x000000);
  83.                 for (var i:int = 0; i < xys.length / 2; i++){
  84.                     canvas.setPixel32(xys[i * 2] + SIZE / 2, xys[i * 2 + 1] + SIZE / 2, colors[i]);
  85.                 }
  86.                 canvas.unlock();
  87.                 // 光らせるためのキャンバスにコピーする
  88.                 canvasGlow.fillRect(canvasGlow.rect, 0x000000);
  89.                 canvasGlow.draw(canvas, mtx);
  90.                 counter++;
  91.             });
  92.             // 定期的に f を反転させる
  93.             setInterval(function():void{ f = !f; }, 4000);
  94.         }
  95.         private static function createBitmapData(letters:String):BitmapData{
  96.             var fmt:TextFormat = new TextFormat();
  97.             fmt.size = 50;
  98.             var tf:TextField = new TextField();
  99.             tf.defaultTextFormat = fmt;
  100.             tf.autoSize = "left";
  101.             tf.textColor = 0xffffff;
  102.             tf.text = letters;
  103.             var bmd:BitmapData = new BitmapData(tf.textWidth, tf.textHeight, false, 0x000000);
  104.             var mtx:Matrix = new Matrix();
  105.             bmd.draw(tf, mtx);
  106.             return bmd;
  107.         }
  108.         private function initParticles(bmd:BitmapData):void{
  109.             for (var yy:int = 0; yy < bmd.height; yy++){
  110.                 for (var xx:int = 0; xx < bmd.width; xx++){
  111.                     var c:uint = bmd.getPixel(xx, yy);
  112.                     if (c != 0){
  113.                         letterPoints.push(xx - 220, yy - 20);
  114.                         particles.push(R * Math.random() - HR, R * Math.random() - HR, R * Math.random() - HR);
  115.                         colors.push(c);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121. }
noswf
  1. // forked from nitoyon's キラキラ3D Typography
  2. // キラキラ3D Typography
  3. //-----------------------------------------------------
  4. // 次の2つの組み合わせ+αです
  5. //  - HelloWorld3D 
  6. //    http://wonderfl.net/code/50225c9944de6206a3813f515fce2c51fd56ab23
  7. //  - キラキラPixel3D! in Native Flash 10 3D API 
  8. //    http://wonderfl.net/code/8283df8a03a8f3c290bc88a056b44b3c6084b123
  9. package {
  10.     import flash.display.*;
  11.     import flash.events.Event;
  12.     import flash.geom.*;
  13.     import flash.text.*;
  14.     import flash.utils.setInterval;
  15.     
  16.     [SWF(backgroundColor=0x000000)]
  17.     public class HelloSpace extends Sprite{
  18.         private static const SIZE:Number = 475;
  19.         private static const R:Number = 300;
  20.         private static const HR:Number = R / 2;
  21.         private var particles:Vector.<Number> = new Vector.<Number>();
  22.         private var letterPoints:Vector.<Number> = new Vector.<Number>();
  23.         private var colors:Vector.<uint> = new Vector.<uint>();
  24.         // 光らせるための BitmapData
  25.         private var canvasGlow:BitmapData;
  26.         // 1/4 で描画するための Matrix
  27.         private var mtx:Matrix = new Matrix(0.25000.25);
  28.         public function HelloSpace()
  29.         {
  30.             stage.scaleMode = "noScale";
  31.             stage.align = "TL";
  32.             // BitmapData にテキストを描画して座標を points に格納する
  33.             var bmd:BitmapData = createBitmapData("Homputer");
  34.             initParticles(bmd);
  35.             // キャンバスを準備
  36.             var canvas:BitmapData = new BitmapData(SIZE, SIZE, false, 0x000000);
  37.             addChild(new Bitmap(canvas));
  38.             // FP10 用 座標変換の準備
  39.             var uvts:Vector.<Number> = new Vector.<Number>();
  40.             var particles2:Vector.<Number> = new Vector.<Number>();
  41.             var mtx3d:Matrix3D = new Matrix3D();
  42.             // 透視投影用の変換行列作成
  43.             var proj:PerspectiveProjection = new PerspectiveProjection();
  44.             proj.fieldOfView = 90;
  45.             var projMat:Matrix3D = proj.toMatrix3D();
  46.             // 光らせるための BitmapData を初期化する
  47.             canvasGlow = new BitmapData(SIZE / 4, SIZE / 4false, 0x000000);
  48.             var bmp:Bitmap = new Bitmap(canvasGlow, PixelSnapping.NEVER, true);
  49.             bmp.scaleX = bmp.scaleY = 4;
  50.             bmp.smoothing = true;
  51.             bmp.blendMode = BlendMode.ADD;
  52.             addChild(bmp);
  53.             // ループ用の変数を用意
  54.             var counter:int = 0;
  55.             var moveCounter:int = 0;
  56.             var xysRandom:Vector.<Number> = new Vector.<Number>();
  57.             var xys:Vector.<Number> = new Vector.<Number>(letterPoints.length);
  58.             var f:Boolean = false;
  59.             // ループ処理
  60.             addEventListener("enterFrame"function(event:Event):void{
  61.                 // 角度を設定して座標変換する (particles → particles2)
  62.                 mtx3d.identity();
  63.                 mtx3d.appendRotation(counter, Vector3D.Y_AXIS);
  64.                 mtx3d.appendRotation(15, Vector3D.X_AXIS);
  65.                 mtx3d.appendTranslation(00, SIZE / 2);
  66.                 mtx3d.transformVectors(particles, particles2);
  67.                 // 透視投影して回転後の座標を計算する
  68.                 Utils3D.projectVectors(projMat, particles2, xysRandom, uvts);
  69.                 // moveCounter 以下ならパーティクルを文字列の配置に近づける
  70.                 // そうでない場合はあらかじめ定義したランダム位置の配置に近づける
  71.                 for (var i:int = 0; i < xysRandom.length; i++){
  72.                     if (i < moveCounter * 2){
  73.                         xys[i] += (letterPoints[i] - xys[i]) * .13;
  74.                     } else {
  75.                         xys[i] += (xysRandom[i] - xys[i]) * .12;
  76.                     }
  77.                 }
  78.                 // 文字列表示中はmoveCounter を加算する
  79.                 moveCounter = (f ? moveCounter + 100 : 0);
  80.                 // BitmapData に描画する
  81.                 canvas.lock();
  82.                 canvas.fillRect(canvas.rect, 0x000000);
  83.                 for (var i:int = 0; i < xys.length / 2; i++){
  84.                     canvas.setPixel32(xys[i * 2] + SIZE / 2, xys[i * 2 + 1] + SIZE / 2, colors[i]);
  85.                 }
  86.                 canvas.unlock();
  87.                 // 光らせるためのキャンバスにコピーする
  88.                 canvasGlow.fillRect(canvasGlow.rect, 0x000000);
  89.                 canvasGlow.draw(canvas, mtx);
  90.                 counter++;
  91.             });
  92.             // 定期的に f を反転させる
  93.             setInterval(function():void{ f = !f; }, 4000);
  94.         }
  95.         private static function createBitmapData(letters:String):BitmapData{
  96.             var fmt:TextFormat = new TextFormat();
  97.             fmt.size = 50;
  98.             var tf:TextField = new TextField();
  99.             tf.defaultTextFormat = fmt;
  100.             tf.autoSize = "left";
  101.             tf.textColor = 0xffffff;
  102.             tf.text = letters;
  103.             var bmd:BitmapData = new BitmapData(tf.textWidth, tf.textHeight, false, 0x000000);
  104.             var mtx:Matrix = new Matrix();
  105.             bmd.draw(tf, mtx);
  106.             return bmd;
  107.         }
  108.         private function initParticles(bmd:BitmapData):void{
  109.             for (var yy:int = 0; yy < bmd.height; yy++){
  110.                 for (var xx:int = 0; xx < bmd.width; xx++){
  111.                     var c:uint = bmd.getPixel(xx, yy);
  112.                     if (c != 0){
  113.                         letterPoints.push(xx - 220, yy - 20);
  114.                         particles.push(R * Math.random() - HR, R * Math.random() - HR, R * Math.random() - HR);
  115.                         colors.push(c);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121. }
noswf
Get Adobe Flash Player