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

by mikako forked from forked from: 短くしてみました (diff: 1)
クラスを使えばとてもすっきりしたコードを作ることができるんですね。
コードの勉強が不十分だったので、今回は大変参考になりました。
初歩的な質問にお答えいただいて、ほんとうにありがとうございました。
バネ運動を作ったのですが、同じようなコードを何度も繰り返して長くなりました。
forや関数を使っていろいろ試みたのですが、うまくいきません。
もしよろしければ、良い方法を教えていただけないでしょうか
下記のコードはいろいろ試みる前の長いコードです。
初心者過ぎる質問、汚いコードで申し訳ありません。
よろしくおねがいします。
俺流リファクタリング
とりあえず短くなりました〜 by selflash
♥0 | Line 61 | Modified 2010-06-09 23:30:27 | MIT License
play

ActionScript3 source code

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

// forked from Tamanegi_kenshi'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++ ){
              var o:Ball = new Ball( 0.08 );
              addChild( o );
              balls[i] = o;
          }    
           	 		
 	  addEventListener( Event.ENTER_FRAME, loop );
      }
      
      private function loop( e:Event ):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();
     }
 }