forked from: forked from: 短くしてみました

by selflash forked from forked from: 短くしてみました (diff: 22)
バネ運動を作ったのですが、同じようなコードを何度も繰り返して長くなりました。
forや関数を使っていろいろ試みたのですが、うまくいきません。
もしよろしければ、良い方法を教えていただけないでしょうか
下記のコードはいろいろ試みる前の長いコードです。
初心者過ぎる質問、汚いコードで申し訳ありません。
よろしくおねがいします。
俺流リファクタリング
とりあえず短くなりました〜 by selflash
♥0 | Line 58 | Modified 2010-02-20 22:53:08 | MIT License
play

ActionScript3 source code

/**
 * Copyright selflash ( http://wonderfl.net/user/selflash )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/Abfs
 */

// forked from zahir's forked from: 短くしてみました
// forked from yooKo's 短くしてみました
// forked from Tamanegi_kenshi's コードを短くするにはどうすればよいですか?
//バネ運動を作ったのですが、同じようなコードを何度も繰り返して長くなりました。
//forや関数を使っていろいろ試みたのですが、うまくいきません。
//
//もしよろしければ、良い方法を教えていただけないでしょうか
//
//下記のコードはいろいろ試みる前の長いコードです。
//初心者過ぎる質問、汚いコードで申し訳ありません。
//よろしくおねがいします。


//俺流リファクタリング
//とりあえず短くなりました〜 by selflash


package{
 import flash.display.Sprite;
 import flash.events.Event; 
 
 public class sp extends Sprite{
      private var balls:Array = [];
      
      public function sp():void {
          for( var i:int = 0; i < 3; i++ ){
              balls[i] = addChild( new Ball( 0.08 ) ) as Ball;
          }    
           	 		
 	  addEventListener( Event.ENTER_FRAME, function():void {
            for( var i:int = 0; i < 3; i++ ) {
                var o:Ball = balls[i];
                var xx:Number = ( i == 0 )? mouseX : balls[i - 1].x;
                var yy:Number = ( i == 0 )? mouseY : balls[i - 1].y;
                var dx:Number = ( xx - o.x );
                var dy:Number = ( yy - o.y );
              
                o.ax = dx * o.spring;
                o.ay = dy * o.spring;
                o.vx += o.ax;
                o.vx *= o.friction;
                o.vy += o.ay;
                o.vy *= o.friction;
                o.vy += o.gravity;
                o.x += o.vx;
                o.y += o.vy;
            }
          });
      }
   }
}

 import flash.display.Sprite;
 import flash.display.Graphics;
 import flash.display.GradientType;
 import flash.geom.Matrix;
 
 class Ball extends Sprite {
     public var ax:Number = 0;
     public var ay:Number = 0;
     public var vx:Number = 0;
     public var vy:Number = 0;
     public var spring:Number = 0;
     public var friction:Number = 0.9;
     public var gravity:Number = 4;
     
     public function Ball( spring:Number ):void {
         this.spring = spring;
 
         var mtx:Matrix = new Matrix();
         mtx.createGradientBox( 30, 30, 0, -20, -20 );
         var g:Graphics = graphics;
         g.beginGradientFill( 
              GradientType.RADIAL, 
              [0x000000,0x000000], 
              [0.3,1], 
              [0,255], 
              mtx 
         );
         g.drawCircle( 0, 0, 20 );
         g.endFill();
     }
 }