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

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

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


FORKED

ファンネル(ビット)wonderfl移植 Newtype [diff(203)]

  1. // forked from umroom's ファンネル(ビット)wonderfl移植
  2. /*
  3. 左下に数値入力後、右下の●をクリックでファンネル生成
  4. 生成後は画面の上半分あたりクリックで射出
  5. */
  6. // Σ (1/{|速度の各Bitとの相対位置と垂直な成分|*|相対位置|^0.5})
  7. // を最小化するように頑張ってます!
  8. // レーザーの当たり判定とかは一切取ってない。Bitからみて当てにくい動きをする。
  9. package
  10. {
  11.     import flash.display.*;
  12.     import flash.events.*;
  13.     import flash.text.*;
  14.     [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]  
  15.     
  16.     public class Main extends MovieClip
  17.     {
  18.         private var _bt_mc:MovieClip = new MovieClip();
  19.         private var _txt:TextField = new TextField();
  20.         public var _bitNum:uint=0;
  21.         public var _av : Avoider;
  22.         public var _tf : TextField;
  23.         
  24.         public function Main():void
  25.         {
  26.             _txt.height=30;
  27.             _txt.x = 30;
  28.             _txt.y = 270;
  29.             _txt.background=true;
  30.             _txt.backgroundColor=0xFFFFFF;
  31.             _txt.type = TextFieldType.INPUT;
  32.             _txt.text = "6";
  33.             _txt.restrict="0-9"
  34.             addChild(_txt);
  35.             _bt_mc.graphics.beginFill(0xFF00FF);
  36.             _bt_mc.graphics.drawCircle(0,0,20);
  37.             _bt_mc.graphics.endFill();
  38.             _bt_mc.x = 260;
  39.             _bt_mc.y = 280;
  40.             _bt_mc.buttonMode=true;
  41.             _bt_mc.addEventListener(MouseEvent.CLICK, init);
  42.             addChild(_bt_mc);
  43.             
  44.             _av = new Avoider(this0030030041.5600);
  45.             _av.x = 300 / 2;
  46.             _av.y = 300 / 2;
  47.             addChild(_av);
  48.             
  49.             _tf = new TextField();
  50.             addChild(_tf);
  51.             _tf.width = 200;
  52.             _tf.height = 200;
  53.             _tf.textColor = 0xffffff;
  54.         }
  55.         
  56.         private function init(me:MouseEvent):void
  57.         {
  58.             stage.addEventListener(MouseEvent.MOUSE_UP, startMv);
  59.             for(var i:uint=1; i<=_bitNum; i++){    removeChild( getChildByName("bit_"+i) );    }
  60.             stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
  61.             
  62.             _bitNum = uint(_txt.text);
  63.             
  64.             for(i=1; i<=_bitNum; i++){
  65.                 var bit:Bit=new Bit();
  66.                 bit.name="bit_"+i;
  67.                 bit.rotation = 360*(i-1)/_bitNum;
  68.                 bit.x = 150 + 30*Math.sin(bit.rotation * Math.PI/180);
  69.                 bit.y = 150 + -30*Math.cos(bit.rotation * Math.PI/180);
  70.                 addChild(bit);
  71.             }
  72.             _av.x = 300/2;
  73.             _av.y = 300/2;
  74.         }
  75.         
  76.         
  77.         private function startMv(me:MouseEvent):void
  78.         {
  79.             if(mouseY<250){
  80.                 stage.removeEventListener(MouseEvent.MOUSE_UP, startMv);
  81.                 for(var i:uint=1; i<=_bitNum; i++){    Bit(getChildByName("bit_"+i)).init( i%3*0.2 );    }
  82.                 stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
  83.             }
  84.         }
  85.         
  86.         private function onEnterFrame(e : Event) : void
  87.         {
  88.             _av.step(1);
  89.         }
  90.         
  91.     }
  92. }
  93.     import flash.display.*;
  94.     import flash.events.*;
  95.     import gs.*; 
  96.     import gs.easing.*;
  97.     
  98.     
  99.     class Bit extends MovieClip
  100.     {
  101.         private var _laser_mc:MovieClip = new MovieClip();
  102.         
  103.         public var tx : Number = x;
  104.         public var ty : Number = y;
  105.         
  106.         public function Bit():void
  107.         {
  108.             addEventListener(Event.REMOVED_FROM_STAGE, remove);
  109.             
  110.             graphics.beginFill(0xF0F0F0);
  111.             graphics.moveTo( 00 );
  112.             graphics.lineTo( -524 );
  113.             graphics.lineTo( 524 );
  114.             graphics.endFill();
  115.             
  116.             _laser_mc.graphics.lineStyle(2, 0xFFFFCC);
  117.             _laser_mc.graphics.moveTo(00);
  118.             _laser_mc.graphics.lineTo(0, -600);
  119.             _laser_mc.scaleY=0;
  120.             addChild( _laser_mc );
  121.         }
  122.         
  123.         
  124.         private function remove(e:Event):void
  125.         {
  126.             removeEventListener(Event.ENTER_FRAME, rot);
  127.             removeEventListener(Event.REMOVED_FROM_STAGE, remove);
  128.             TweenMax.killTweensOf(this);
  129.             TweenMax.killTweensOf(_laser_mc);
  130.         }
  131.         
  132.         
  133.         public function init(delayTime:Number):void
  134.         {
  135.             var startX:int = 150+300*Math.sin(rotation * Math.PI/180);
  136.             var startY:int = 150-300*Math.cos(rotation * Math.PI/180);
  137.             
  138.             TweenMax.to( this0.2+Math.random()*0.2, { delay:delayTime, x:startX, y:startY, ease:Cubic.easeIn, onComplete:startMv});
  139.         }
  140.         
  141.         
  142.         public function startMv():void
  143.         {
  144.             addEventListener(Event.ENTER_FRAME, rot);
  145.             
  146.             var scaleVal:Number = 0.3+Math.random()*0.7;
  147.             var bezierData:Array = [
  148.                                                             {x:Math.random()*300, y:Math.random()*300},
  149.                                                             {x:Math.random()*300, y:Math.random()*300}
  150.                                                             ];
  151.             
  152.             tx = bezierData[1].x;
  153.             ty = bezierData[1].y;
  154.             TweenMax.to( this0.4+Math.random()*0.4, { delay:0.3+Math.random()*0.2, bezier:bezierData, scaleX:scaleVal, scaleY:scaleVal,
  155.                                              ease:Cubic.easeInOut, onComplete:shot});
  156.         }
  157.         
  158.         
  159.         private function shot():void
  160.         {
  161.             removeEventListener(Event.ENTER_FRAME, rot);
  162.             
  163.             _laser_mc.scaleY=0;
  164.             _laser_mc.alpha=1;
  165.             _laser_mc.visible=true;
  166.               
  167.             TweenMax.to(_laser_mc, 0.5, {scaleY:1, ease:Cubic.easeOut} );
  168.             TweenMax.to(_laser_mc, 0.3, {delay:0.2, autoAlpha:0, ease:Linear.easeNone, onComplete:startMv} );
  169.             
  170.         }
  171.         
  172.         private function rot(e:Event):void
  173.         {
  174. //            rotation = 180*Math.atan2(MovieClip(parent).mouseY-y, MovieClip(parent).mouseX-x)/Math.PI+90;
  175.             var av : Avoider = Main(parent)._av;
  176.             rotation = 180*Math.atan2(av.y-y, av.x-x)/Math.PI+90;
  177.         }
  178.         
  179.         
  180.     }
  181.     
  182. class Avoider extends Shape
  183. {
  184.     private var _main : Main;
  185.     private var MAXXX : Number;
  186.     private var MINXX : Number;
  187.     private var MAXXY : Number;
  188.     private var MINXY : Number;
  189.     private var MYR : Number;
  190.     private var LIMA : Number;
  191.     private var STEPTHETA : Number;
  192.     
  193.     public var _val : Number;
  194.     
  195.     private var _vx : Number;
  196.     private var _vy : Number;
  197.     
  198.     public function Avoider(
  199.             main : Main,
  200.             minxx : Number, minxy : Number,
  201.             maxxx : Number, maxxy : Number,
  202.         myr : Number,
  203.         lima : Number, steptheta : Number,
  204.         vx0 : Number, vy0 : Number
  205.         ) : void
  206.     {
  207.             _main = main;
  208.             MINXX = minxx; MINXY = minxy;
  209.             MAXXX = maxxx; MAXXY = maxxy;
  210.         MYR = myr;
  211.         LIMA = lima;
  212.         STEPTHETA = steptheta;
  213.         
  214.         _vx = vx0;
  215.         _vy = vy0;
  216.         
  217.         graphics.beginFill(0xff0000);
  218.         graphics.drawCircle(004);
  219.         graphics.endFill();
  220.     }
  221.     
  222.     private var _ans : Array = [00];
  223.     
  224.     public function step(depth : uint) : void
  225.     {
  226.             if(depth > 0){
  227.                 _ans = algo(depth);
  228.                 _vx += _ans[0];
  229.                 _vy += _ans[1];
  230.             }
  231.             
  232.             x += _vx;
  233.             y += _vy;
  234.             
  235.             // 逃がしはしない
  236.             if(x > 300){x = 299; _vx = 0;}
  237.             if(y > 300){y = 299; _vy = 0;}
  238.             if(x < 0){x = 1; _vx = 0;}
  239.             if(y < 0){y = 1; _vy = 0;}
  240.     }
  241.     
  242.     // もっとも長い時間生き残れる加速度の組を返す
  243.     public function algo(depth : int) : Array
  244.     {
  245.         var ret : Array = [0.00.0];
  246.         var maxt : Number = algoCore(x, y, _vx, _vy, 000, depth);
  247.         for(var theta : Number = 0;theta < 360;theta += STEPTHETA){
  248.                 var ax : Number = Math.cos(theta * Math.PI / 180) * LIMA;
  249.                 var ay : Number = Math.sin(theta * Math.PI / 180) * LIMA;
  250.             var t : Number = algoCore(x, y, _vx, _vy, ax, ay, 0, depth);
  251.             if(maxt < t){
  252.                     maxt = t;
  253.                 ret[0] = ax;
  254.                 ret[1] = ay;
  255.             }
  256.         }
  257.         _val = maxt;
  258.         return ret;
  259.     }
  260.     
  261.     private function algoCore(xx : Number, xy : Number, vx : Number, vy : Number, ax : Number, ay : Number, dt : int, depth : int) : Number
  262.     {
  263.         var mint : Number = 100;
  264.         
  265.         // wall
  266.         var t : Number
  267.         
  268.         // bullet
  269.         /*
  270.         for each(var b : Bullet in _bullets){
  271.             var mybr2 : Number = (MYR + b.r) * (MYR + b.r);
  272.             var rxx : Number = xx - (b.x.x + b.v.x * dt);
  273.             var rxy : Number = xy - (b.x.y + b.v.y * dt);
  274.             var rvx : Number = vx - b.v.x;
  275.             var rvy : Number = vy - b.v.y;
  276.             for(t = 0;t < mint;t++){
  277.                 if(rxx * rxx + rxy * rxy <= mybr2)break;
  278.                 rvx += ax;
  279.                 rvy += ay;
  280.                 rxx += rvx;
  281.                 rxy += rvy;
  282.             }
  283.             mint = t;
  284.         }
  285.         */
  286.   
  287.           var tsum : Number = 0;
  288.           var minv : Number = Number.MAX_VALUE;
  289.           for(var i : uint = 1;i <= _main._bitNum;i++){
  290.               var b : Bit = Bit(_main.getChildByName("bit_"+i));
  291. //              if(!b.hasEventListener(Event.ENTER_FRAME))continue;
  292.               var d2 : Number = (xx - b.tx) * (xx - b.tx) + (xy - b.ty) * (xy - b.ty);
  293.               if(d2 < 1)continue;
  294.             var u : Number = ((vx + ax) * (xx - b.tx) + (vy + ay) * (xy - b.ty)) / d2;
  295.             var vhx : Number = vx + ax - u * (xx - b.tx);
  296.             var vhy : Number = vy + ay - u * (xy - b.ty);
  297.             var vh : Number = (vhx * vhx + vhy * vhy); // * Math.sqrt(d2);
  298. //              tsum += 1/Math.sqrt(vh + 100);
  299.             if(vh < minv)minv = vh;
  300.           }
  301.               
  302. //  _main._tf.text = "";
  303. //        mint -= tsum * 1500 / _main._bitNum; 
  304.         mint -= 1 / Math.sqrt(minv + 10) * 300;
  305. //        _main._tf.appendText("" + mint + "\n");
  306.         
  307.         /*
  308.         t = solveQPositive(ax/2, vx, xx - (MAXXX - MYR)); if(!isNaN(t) && t < mint)mint = t;
  309.         t = solveQPositive(ax/2, vx, xx - (MINXX + MYR)); if(!isNaN(t) && t < mint)mint = t;
  310.         t = solveQPositive(ay/2, vy, xy - (MAXXY - MYR)); if(!isNaN(t) && t < mint)mint = t;
  311.         t = solveQPositive(ay/2, vy, xy - (MINXY + MYR)); if(!isNaN(t) && t < mint)mint = t;
  312.         */
  313.         
  314.         if(vx + ax > 0){t = ((MAXXX - MYR) - xx) / (vx + ax); if(t < mint)mint = t;}
  315.         if(vx + ax < 0){t = ((MINXX + MYR) - xx) / (vx + ax); if(t < mint)mint = t;}
  316.         if(vy + ay > 0){t = ((MAXXY - MYR) - xy) / (vy + ay); if(t < mint)mint = t;}
  317.         if(vy + ay < 0){t = ((MINXY + MYR) - xy) / (vy + ay); if(t < mint)mint = t;}
  318. //        _main._tf.text = "";
  319. //        _main._tf.appendText("" + mint + "\n");
  320.         
  321.         return mint;
  322.     }
  323.     
  324.     // 0以上の最小解を求める
  325.     private static function solveQPositive(a : Number, b : Number, c : Number) : Number
  326.     {
  327.         if(a > -0.0001 && a < 0.0001){
  328.             return -c / b;
  329.         }else{
  330.             var D : Number = b * b - 4 * a * c;
  331.             if(D < 0)return Number.NaN;
  332.             var sqd : Number = Math.sqrt(D);
  333.             var a1 : Number = (-b - sqd) / (2 * a);
  334.             var a2 : Number = (-b + sqd) / (2 * a);
  335.             if(a < 0){
  336.                 var d : Number = a1; a1 = a2; a2 = d;
  337.             }
  338.             if(a1 >= 0)return a1;
  339.             if(a2 >= 0)return a2;
  340.             return Number.NaN;
  341.         }
  342.     }
  343. }
noswf
  1. // forked from umroom's ファンネル(ビット)wonderfl移植
  2. /*
  3. 左下に数値入力後、右下の●をクリックでファンネル生成
  4. 生成後は画面の上半分あたりクリックで射出
  5. */
  6. package
  7. {
  8.     import flash.display.*;
  9.     import flash.events.*;
  10.     import flash.text.*;
  11.     [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]  
  12.     
  13.     public class Main extends MovieClip
  14.     {
  15.         private var _bt_mc:MovieClip = new MovieClip();
  16.         private var _txt:TextField = new TextField();
  17.         private var _bitNum:uint=0;
  18.         
  19.         
  20.         public function Main():void
  21.         {
  22.             _txt.height=30;
  23.             _txt.x = 30;
  24.             _txt.y = 270;
  25.             _txt.background=true;
  26.             _txt.backgroundColor=0xFFFFFF;
  27.             _txt.type = TextFieldType.INPUT;
  28.             _txt.text = "6";
  29.             _txt.restrict="0-9";
  30.             addChild(_txt);
  31.             _bt_mc.graphics.beginFill(0xFF00FF);
  32.             _bt_mc.graphics.drawCircle(0,0,20);
  33.             _bt_mc.graphics.endFill();
  34.             _bt_mc.x = 260;
  35.             _bt_mc.y = 280;
  36.             _bt_mc.buttonMode=true;
  37.             _bt_mc.addEventListener(MouseEvent.CLICK, init);
  38.             addChild(_bt_mc);
  39.         }
  40.         
  41.         
  42.         private function init(me:MouseEvent):void
  43.         {
  44.             stage.addEventListener(MouseEvent.MOUSE_UP, startMv);
  45.             for(var i:uint=1; i<=_bitNum; i++){    removeChild( getChildByName("bit_"+i) );    }
  46.             
  47.             _bitNum = uint(_txt.text);
  48.             
  49.             for(i=1; i<=_bitNum; i++){
  50.                 var bit:Bit=new Bit();
  51.                 bit.name="bit_"+i;
  52.                 bit.rotation = 360*(i-1)/_bitNum;
  53.                 bit.x = 150 + 30*Math.sin(bit.rotation * Math.PI/180);
  54.                 bit.y = 150 + -30*Math.cos(bit.rotation * Math.PI/180);
  55.                 addChild(bit);
  56.             }
  57.         }
  58.         
  59.         
  60.         private function startMv(me:MouseEvent):void
  61.         {
  62.             if(mouseY<250){
  63.                 stage.removeEventListener(MouseEvent.MOUSE_UP, startMv);
  64.                 for(var i:uint=1; i<=_bitNum; i++){    Bit(getChildByName("bit_"+i)).init( i%3*0.2 );    }
  65.             }
  66.         }
  67.         
  68.     }
  69. }
  70.     import flash.display.*;
  71.     import flash.events.*;
  72.     import gs.*; 
  73.     import gs.easing.*;
  74.     
  75.     
  76.     class Bit extends MovieClip
  77.     {
  78.         private var _laser_mc:MovieClip = new MovieClip();
  79.         
  80.         public function Bit():void
  81.         {
  82.             addEventListener(Event.REMOVED_FROM_STAGE, remove);
  83.             
  84.             graphics.beginFill(0xF0F0F0);
  85.             graphics.moveTo( 00 );
  86.             graphics.lineTo( -524 );
  87.             graphics.lineTo( 524 );
  88.             graphics.endFill();
  89.             
  90.             _laser_mc.graphics.lineStyle(2, 0xFFFFCC);
  91.             _laser_mc.graphics.moveTo(00);
  92.             _laser_mc.graphics.lineTo(0, -600);
  93.             _laser_mc.scaleY=0;
  94.             addChild( _laser_mc );
  95.         }
  96.         
  97.         
  98.         function remove(e:Event):void
  99.         {
  100.             removeEventListener(Event.ENTER_FRAME, rot);
  101.             removeEventListener(Event.REMOVED_FROM_STAGE, remove);
  102.             TweenMax.killTweensOf(this);
  103.             TweenMax.killTweensOf(_laser_mc);
  104.         }
  105.         
  106.         
  107.         public function init(delayTime:Number):void
  108.         {
  109.             var startX:int = 150+300*Math.sin(rotation * Math.PI/180);
  110.             var startY:int = 150-300*Math.cos(rotation * Math.PI/180);
  111.             
  112.             TweenMax.to( this0.2+Math.random()*0.2, { delay:delayTime, x:startX, y:startY, ease:Cubic.easeIn, onComplete:startMv});
  113.         }
  114.         
  115.         
  116.         public function startMv():void
  117.         {
  118.             addEventListener(Event.ENTER_FRAME, rot);
  119.             
  120.             var scaleVal:Number = 0.3+Math.random()*0.7;
  121.             var bezierData:Array = [
  122.                                                             {x:Math.random()*300, y:Math.random()*300},
  123.                                                             {x:Math.random()*300, y:Math.random()*300}
  124.                                                             ];
  125.             
  126.             TweenMax.to( this0.4+Math.random()*0.4, { delay:0.3+Math.random()*0.2, bezier:bezierData, scaleX:scaleVal, scaleY:scaleVal,
  127.                                              ease:Cubic.easeInOut, onComplete:shot});
  128.         }
  129.         
  130.         
  131.         private function shot():void
  132.         {
  133.             removeEventListener(Event.ENTER_FRAME, rot);
  134.             
  135.             _laser_mc.scaleY=0;
  136.             _laser_mc.alpha=1;
  137.             _laser_mc.visible=true;
  138.             
  139.             TweenMax.to(_laser_mc, 0.5, {scaleY:1, ease:Cubic.easeOut} );
  140.             TweenMax.to(_laser_mc, 0.3, {delay:0.2, autoAlpha:0, ease:Linear.easeNone, onComplete:startMv} );
  141.             
  142.         }
  143.         
  144.         private function rot(e:Event):void
  145.         {
  146.             rotation = 180*Math.atan2(MovieClip(parent).mouseY-y, MovieClip(parent).mouseX-x)/Math.PI+90;
  147.         }
  148.         
  149.         
  150.     }
noswf
Get Adobe Flash Player