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

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

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


FORKED
  1. // forked from soundkitchen's Happy Birthday ;)
  2. /**
  3.  *  Spark 勉強会の Geoff Stearns 氏のハッピーバースデー企画
  4.  *  お誕生日おめでとーございまーす :-)
  5.  *
  6.  *  @see http://wiki.libspark.org/wiki/SparkStudy/09
  7.  */
  8. package
  9. {
  10.     import flash.display.Sprite;
  11.     import flash.display.StageAlign;
  12.     import flash.display.StageQuality;
  13.     import flash.display.StageScaleMode;
  14.     import flash.events.Event;
  15.     import com.flashdynamix.utils.SWFProfiler;
  16.     import org.libspark.thread.Thread;
  17.     import org.libspark.thread.EnterFrameThreadExecutor;
  18.     import org.papervision3d.cameras.Camera3D;
  19.     import org.papervision3d.objects.DisplayObject3D;
  20.     import org.papervision3d.render.LazyRenderEngine;
  21.     import org.papervision3d.scenes.Scene3D;
  22.     import org.papervision3d.view.Viewport3D;
  23.     [SWF(width=465, height=465, frameRate=60, backgroundColor=0x000000)]
  24.     /**
  25.      *  document class.
  26.      */
  27.     public class CodeBreak extends Sprite
  28.     {
  29.         /**
  30.          *  constructor.
  31.          */
  32.         public function CodeBreak()
  33.         {
  34.             addEventListener(Event.ADDED_TO_STAGE, initialize);
  35.         }
  36.         /**
  37.          *  initialize the object.
  38.          */
  39.         private function initialize(evt:Event):void
  40.         {
  41.             removeEventListener(Event.ADDED_TO_STAGE, initialize);
  42.             if (!Thread.isReady)
  43.             {
  44.                 stage.align = StageAlign.TOP_LEFT;
  45.                 stage.quality = StageQuality.HIGH;
  46.                 stage.scaleMode = StageScaleMode.NO_SCALE;
  47.                 SWFProfiler.init(this);
  48.                 Thread.initialize(new EnterFrameThreadExecutor());
  49.             }
  50.             var ctx:Context,
  51.                 camera:Camera3D,
  52.                 scene:Scene3D,
  53.                 viewport:Viewport3D,
  54.                 container:DisplayObject3D,
  55.                 renderer:LazyRenderEngine;
  56.             //  camera.
  57.             camera = new Camera3D();
  58.             camera.z = 1000;
  59.             //camera.focus = 20;
  60.             //camera.zoom = 40;
  61.             camera.lookAt(DisplayObject3D.ZERO);
  62.             //  scene.
  63.             scene = new Scene3D();
  64.             //  container.
  65.             container = new DisplayObject3D();
  66.             scene.addChild(container);
  67.             //  viewport.
  68.             viewport = new Viewport3D(stage.stageWidth, stage.stageHeight, true);
  69.             addChild(viewport);
  70.             //  render engine.
  71.             renderer = new LazyRenderEngine(scene, camera, viewport);
  72.             //  context.
  73.             ctx = new Context();
  74.             ctx.layer = this;
  75.             ctx.stage = stage;
  76.             ctx.camera = camera;
  77.             ctx.scene = scene;
  78.             ctx.container = container;
  79.             ctx.viewport = viewport;
  80.             ctx.renderer = renderer;
  81.             new MainThread(ctx).start();
  82.         }
  83.     }
  84. }
  85. import flash.display.Bitmap;
  86. import flash.display.BitmapData;
  87. import flash.display.BlendMode;
  88. import flash.display.DisplayObject;
  89. import flash.display.DisplayObjectContainer;
  90. import flash.display.Stage;
  91. import flash.display.StageDisplayState;
  92. import flash.events.Event;
  93. import flash.events.MouseEvent;
  94. import flash.filters.GlowFilter;
  95. import flash.net.URLRequest;
  96. import flash.text.TextField;
  97. import flash.text.TextFieldAutoSize;
  98. import flash.text.TextFormat;
  99. import frocessing.color.ColorHSV;
  100. import org.libspark.betweenas3.BetweenAS3;
  101. import org.libspark.betweenas3.tweens.ITween;
  102. import org.libspark.betweenas3.targets.single.ISingleTweenTarget;
  103. import org.libspark.betweenas3.easing.*;
  104. import org.libspark.betweenas3.events.BetweenEvent;
  105. import org.libspark.thread.Monitor;
  106. import org.libspark.thread.Thread;
  107. import org.libspark.thread.threads.net.URLLoaderThread;
  108. import org.papervision3d.cameras.Camera3D;
  109. import org.papervision3d.core.math.Matrix3D;
  110. import org.papervision3d.core.math.Number3D;
  111. import org.papervision3d.materials.special.Letter3DMaterial;
  112. import org.papervision3d.objects.DisplayObject3D;
  113. import org.papervision3d.render.LazyRenderEngine;
  114. import org.papervision3d.scenes.Scene3D;
  115. import org.papervision3d.typography.Font3D;
  116. import org.papervision3d.typography.Text3D;
  117. import org.papervision3d.typography.fonts.HelveticaBold;
  118. import org.papervision3d.view.Viewport3D;
  119. internal const SOURCE_URL:String = "http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject_src.js";
  120. internal const TARGET_WORDS:String = "Happy Birthday ;)";
  121. /**
  122.  *  context object.
  123.  */
  124. internal class Context
  125. {
  126.     /**
  127.      *  reference of document class object.
  128.      */
  129.     public var layer:DisplayObjectContainer;
  130.     /**
  131.      *  reference of stage object.
  132.      */
  133.     public var stage:Stage;
  134.     /**
  135.      *  reference of pv3d camera object.
  136.      */
  137.     public var camera:Camera3D;
  138.     /**
  139.      *  reference of pv3d container object.
  140.      */
  141.     public var container:DisplayObject3D;
  142.     /**
  143.      *  reference of pv3d scene object.
  144.      */
  145.     public var scene:Scene3D;
  146.     /**
  147.      *  reference of pv3d renderer object.
  148.      */
  149.     public var renderer:LazyRenderEngine;
  150.     /**
  151.      *  reference of pv3d viewport object.
  152.      */
  153.     public var viewport:Viewport3D;
  154. }
  155. /**
  156.  *  main task of this applicaiton.
  157.  */
  158. internal class MainThread extends Thread
  159. {
  160.     private var context:Context;
  161.     private var loader:URLLoaderThread;
  162.     /**
  163.      *  constructor.
  164.      */
  165.     public function MainThread(context:Context)
  166.     {
  167.         this.context = context;
  168.     }
  169.     /**
  170.      *  first executable.
  171.      */
  172.     override protected function run():void
  173.     {
  174.         var t:Thread;
  175.         t = new WaitAnimationThread(context);
  176.         t.start();
  177.         t.join();
  178.         new HandleScreenThread(context).start();
  179.         next(startAnimation);
  180.     }
  181.     private function startAnimation():void
  182.     {
  183.         var req:URLRequest;
  184.         req = new URLRequest(SOURCE_URL);
  185.         loader = new URLLoaderThread(req);
  186.         loader.start();
  187.         loader.join();
  188.         next(loadComplete);
  189.         error(Error, loadFailure);
  190.     }
  191.     private function loadComplete():void
  192.     {
  193.         var data:String;
  194.         
  195.         data = String(loader.loader.data);
  196.         new PV3DRenderThread(context).start();
  197.         new MainAnimationThread(context, data).start();
  198.     }
  199.     private function loadFailure(e:Error, t:Thread):void
  200.     {
  201.         trace(e.getStackTrace());
  202.     }
  203.     /**
  204.      *  finalize the object.
  205.      */
  206.     override protected function finalize():void
  207.     {
  208.         context = null;
  209.     }
  210. }
  211. /**
  212.  *  wait user's action.
  213.  */
  214. internal class WaitAnimationThread extends Thread
  215. {
  216.     private var context:Context;
  217.     private var message:Bitmap;
  218.     /**
  219.      *  constructor.
  220.      */
  221.     public function WaitAnimationThread(context:Context)
  222.     {
  223.         this.context = context;
  224.     }
  225.     /**
  226.      *  first executable.
  227.      */
  228.     override protected function run():void
  229.     {
  230.         var txt:TextField,
  231.             fmt:TextFormat,
  232.             bmd:BitmapData;
  233.         fmt = new TextFormat();
  234.         fmt.font = 'Lucida Grande';
  235.         fmt.size = 64;
  236.         fmt.color = 0x000000;
  237.         txt = new TextField();
  238.         txt.autoSize = TextFieldAutoSize.LEFT;
  239.         txt.defaultTextFormat = fmt;
  240.         txt.text = "click to start";
  241.         bmd = new BitmapData(txt.width, txt.height, true0);
  242.         bmd.draw(txt);
  243.         message = new Bitmap(bmd);
  244.         message.x = (context.stage.stageWidth - message.width) >> 1;
  245.         message.y = (context.stage.stageHeight - message.height) >> 1;
  246.         message.blendMode = BlendMode.INVERT;
  247.         context.layer.addChild(message);
  248.         event(context.stage, MouseEvent.CLICK, clicked);
  249.         event(context.stage, Event.RESIZE, resized);
  250.     }
  251.     /**
  252.      *  will execute when clicked stage.
  253.      */
  254.     private function clicked(evt:MouseEvent):void
  255.     {
  256.         message.x = (context.stage.stageWidth - message.width) >> 1;
  257.         message.y = (context.stage.stageHeight - message.height) >> 1;
  258.         new HideMessageThread(message).start();
  259.     }
  260.     /**
  261.      *  will execute when resized stage size.
  262.      */
  263.     private function resized(evt:Event):void
  264.     {
  265.         message.x = (context.stage.stageWidth - message.width) >> 1;
  266.         message.y = (context.stage.stageHeight - message.height) >> 1;
  267.         event(context.stage, MouseEvent.CLICK, clicked);
  268.         event(context.stage, Event.RESIZE, resized);
  269.     }
  270.     /**
  271.      *  finalize the object.
  272.      */
  273.     override protected function finalize():void
  274.     {
  275.         message = null;
  276.         context = null;
  277.     }
  278. }
  279. /**
  280.  *  hide splash message.
  281.  */
  282. internal class HideMessageThread extends Thread
  283. {
  284.     private var message:DisplayObject;
  285.     private var monitor:Monitor;
  286.     /**
  287.      *  constructor.
  288.      */
  289.     public function HideMessageThread(message:DisplayObject)
  290.     {
  291.         this.message = message;
  292.         this.monitor = new Monitor();
  293.     }
  294.     /**
  295.      *  first executable.
  296.      */
  297.     override protected function run():void
  298.     {
  299.         var b:ITween,
  300.             from:Object,
  301.             to:Object;
  302.         to = {
  303.             'alpha'0,
  304.             //'y': message.stage.stageHeight,
  305.             '_blurFilter': {
  306.                 'blurX'128,
  307.                 'blurY'128
  308.             }
  309.         };
  310.         b = BetweenAS3.tween(message, to, from, 2, Quadratic.easeIn);
  311.         b.onComplete = monitor.notifyAll;
  312.         b.play();
  313.         monitor.wait();
  314.     }
  315.     /**
  316.      *  finalize the object.
  317.      */
  318.     override protected function finalize():void
  319.     {
  320.         message.parent.removeChild(message);
  321.         message = null;
  322.         monitor = null;
  323.     }
  324. }
  325. /**
  326.  *  handle full screen.
  327.  */
  328. internal class HandleScreenThread extends Thread
  329. {
  330.     private var context:Context;
  331.     /**
  332.      *  constructor.
  333.      */
  334.     public function HandleScreenThread(context:Context)
  335.     {
  336.         this.context = context;
  337.     }
  338.     /**
  339.      *  first executable.
  340.      */
  341.     override protected function run():void
  342.     {
  343.         event(context.stage, MouseEvent.CLICK, toggleDisplayState, falseint.MAX_VALUE);
  344.     }
  345.     /**
  346.      *  toggle full screen and normal.
  347.      */
  348.     private function toggleDisplayState(evt:MouseEvent):void
  349.     {
  350.         var s:Stage;
  351.         s = context.stage;
  352.         s.displayState = s.displayState == StageDisplayState.NORMAL
  353.                        ? StageDisplayState.FULL_SCREEN
  354.                        : StageDisplayState.NORMAL;
  355.         event(s, MouseEvent.CLICK, toggleDisplayState, falseint.MAX_VALUE);
  356.     }
  357.     /**
  358.      *  finalize the object.
  359.      */
  360.     override protected function finalize():void
  361.     {
  362.         context = null;
  363.     }
  364. }
  365. /**
  366.  *  main animation.
  367.  */
  368. internal class MainAnimationThread extends Thread
  369. {
  370.     private var context:Context;
  371.     private var monitor:Monitor;
  372.     private var data:String;
  373.     private var hsv:ColorHSV;
  374.     private var dataIndex:uint;
  375.     private var targetIndex:uint;
  376.     /**
  377.      *  constructor.
  378.      */
  379.     public function MainAnimationThread(context:Context, data:String)
  380.     {
  381.         this.context = context;
  382.         this.data = data.replace(/\r+|\n+|\s+/g, ' ');
  383.         hsv = new ColorHSV(0111);
  384.         dataIndex = 0;
  385.         targetIndex = 0;
  386.         monitor = new Monitor();
  387.     }
  388.     /**
  389.      *  first executable.
  390.      */
  391.     override protected function run():void
  392.     {
  393.         if (targetIndex >= TARGET_WORDS.length)
  394.         {
  395.             showFullMessage();
  396.         }
  397.         else if (dataIndex >= data.length)
  398.         {
  399.             //  todo: logic implement.
  400.         }
  401.         else
  402.         {
  403.             var t:String,
  404.                 c:String;
  405.             t = TARGET_WORDS.charAt(targetIndex);
  406.             c = data.charAt(dataIndex);
  407.             if (t == c)
  408.             {
  409.                 addTargetCharacter(t);
  410.             }
  411.             else
  412.             {
  413.                 addDefaultCharacter(c);
  414.             }
  415.             next(run);
  416.         }
  417.     }
  418.     /**
  419.      *  add target character.
  420.      */
  421.     private function addTargetCharacter(str:String):void
  422.     {
  423.         var b:ITween,
  424.             mat:Letter3DMaterial,
  425.             fnt:Font3D,
  426.             txt:Text3D,
  427.             rot:Number3D;
  428.         targetIndex++;
  429.         dataIndex++;
  430.         rot = Matrix3D.matrix2euler(context.camera.transform);
  431.         fnt = new HelveticaBold();
  432.         mat = new Letter3DMaterial(0xffffff);
  433.         try
  434.         {
  435.             txt = new Text3D(str, fnt, mat);
  436.         }
  437.         catch (e:Error)
  438.         {
  439.             return;
  440.         }
  441.         txt.z = 950;
  442.         txt.rotationX = rot.x;
  443.         txt.rotationY = rot.y;
  444.         txt.rotationZ = rot.z;
  445.         txt.filters = [
  446.             new GlowFilter(0xffffff, 188)
  447.         ];
  448.         txt.useOwnContainer = true;
  449.         context.container.addChild(txt);
  450.         b = BetweenAS3.tween(txt, {
  451.             'z'0,
  452.             'alpha'0,
  453.             'rotationX'360 * Math.random(),
  454.             'rotationY'360 * Math.random(),
  455.             'rotationZ'360 * Math.random()
  456.         }, null1, Expo.easeIn);
  457.         b.addEventListener(BetweenEvent.COMPLETE, completeHandler);
  458.         if (targetIndex >= TARGET_WORDS.length)
  459.         {
  460.             b.onComplete = monitor.notifyAll;
  461.             monitor.wait();
  462.         }
  463.         else
  464.         {
  465.             sleep(200);
  466.         }
  467.         b.play();
  468.     }
  469.     /**
  470.      *  add character.
  471.      */
  472.     private function addDefaultCharacter(str:String):void
  473.     {
  474.         var b:ITween,
  475.             to:Object, from:Object,
  476.             mat:Letter3DMaterial,
  477.             fnt:Font3D,
  478.             txt:Text3D,
  479.             rot:Number3D;
  480.         dataIndex++;
  481.         hsv.h += 5;
  482.         rot = Matrix3D.matrix2euler(context.camera.transform);
  483.         fnt = new HelveticaBold();
  484.         mat = new Letter3DMaterial(hsv.value, .25);
  485.         try
  486.         {
  487.             txt = new Text3D(str, fnt, mat);
  488.         }
  489.         catch (e:Error)
  490.         {
  491.             return;
  492.         }
  493.         txt.z = 950;
  494.         txt.rotationX = rot.x;
  495.         txt.rotationY = rot.y;
  496.         txt.rotationZ = rot.z;
  497.         txt.filters = [
  498.             new GlowFilter(0xffffff, 188)
  499.         ];
  500.         txt.useOwnContainer = true;
  501.         context.container.addChild(txt);
  502.         b = BetweenAS3.tween(txt, {
  503.             'z'0,
  504.             'alpha'0,
  505.             'rotationX'360 * Math.random(),
  506.             'rotationY'360 * Math.random(),
  507.             'rotationZ'360 * Math.random()
  508.         }, null, .75, Quadratic.easeIn);
  509.         b.addEventListener(BetweenEvent.COMPLETE, completeHandler);
  510.         if (dataIndex >= data.length)
  511.         {
  512.             b.onComplete = monitor.notifyAll;
  513.             monitor.wait();
  514.         }
  515.         else
  516.         {
  517.             sleep(50);
  518.         }
  519.         b.play();
  520.     }
  521.     /**
  522.      *  show complete message.
  523.      */
  524.     private function showFullMessage():void
  525.     {
  526.         var b:ITween,
  527.             mat:Letter3DMaterial,
  528.             fnt:Font3D,
  529.             txt:Text3D,
  530.             rot:Number3D;
  531.         rot = Matrix3D.matrix2euler(context.camera.transform);
  532.         mat = new Letter3DMaterial(0xffffff);
  533.         fnt = new HelveticaBold();
  534.         txt = new Text3D(TARGET_WORDS, fnt, mat);
  535.         txt.z = -1000;
  536.         txt.rotationX = Math.random() * 360;
  537.         txt.rotationY = Math.random() * 360;
  538.         txt.rotationZ = Math.random() * 360;
  539.         txt.alpha = 0;
  540.         txt.useOwnContainer = true;
  541.         context.container.addChild(txt);
  542.         b = BetweenAS3.tween(txt, {
  543.             'z'500,
  544.             'alpha'1,
  545.             'rotationX': rot.x,
  546.             'rotationY': rot.y,
  547.             'rotationZ': rot.z
  548.         }, null5, Elastic.easeOut);
  549.         b.play();
  550.     }
  551.     /**
  552.      *  will execute when tween complete betweenas3.
  553.      */
  554.     private function completeHandler(evt:BetweenEvent):void
  555.     {
  556.         var b:ITween,
  557.             t:ISingleTweenTarget,
  558.             obj:DisplayObject3D;
  559.         b = ITween(evt.target);
  560.         t = ISingleTweenTarget(b.tweenTarget);
  561.         obj = DisplayObject3D(t.target);
  562.         obj.parent.removeChild(obj);
  563.     }
  564.     /**
  565.      *  finalize the object.
  566.      */
  567.     override protected function finalize():void
  568.     {
  569.         context = null;
  570.         data = null;
  571.     }
  572. }
  573. /**
  574.  *  rendering pv3d.
  575.  */
  576. internal class PV3DRenderThread extends Thread
  577. {
  578.     private var context:Context;
  579.     /**
  580.      *  constructor.
  581.      */
  582.     public function PV3DRenderThread(context:Context)
  583.     {
  584.         this.context = context;
  585.     }
  586.     /**
  587.      *  first executable.
  588.      */
  589.     override protected function run():void
  590.     {
  591.         if (checkInterrupted()) return;
  592.         context.renderer.render();
  593.         next(run);
  594.     }
  595.     /**
  596.      *  finalize the object.
  597.      */
  598.     override protected function finalize():void
  599.     {
  600.         context = null;
  601.     }
  602. }
noswf
Get Adobe Flash Player