コードを短くするにはどうすればよいですか?

by Tamanegi_kenshi forked from forked from: forked from: forked from: forked from: forked from: forked from: forked from: forked from: forked from: forked from: forked from: forked from: forked from: flash on 2010-1-13 (diff: 119)
バネ運動を作ったのですが、同じようなコードを何度も繰り返して長くなりました。
forや関数を使っていろいろ試みたのですが、うまくいきません。
もしよろしければ、良い方法を教えていただけないでしょうか
下記のコードはいろいろ試みる前の長いコードです。
初心者過ぎる質問、汚いコードで申し訳ありません。
よろしくおねがいします。
♥0 | Line 87 | Modified 2010-02-20 16:04:33 | MIT License
play

ActionScript3 source code

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

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


package{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.display.GradientType;
 import flash.geom.Matrix;
 
 public class sp extends Sprite{

 //変数
  	private var ball:Sprite;
 	private var ball2:Sprite;
 	private var ball3:Sprite;
 	private var spring:Number = 0.08;	
 	private var spring2:Number = 0.07;	
 	private var vx:Number = 0;
 	private var vx2:Number = 0;
 	private var vx3:Number = 0;
 	private var gravity:Number = 4;
 	private var vy:Number = 0;
 	private var vy2:Number = 0;
 	private var vy3:Number = 0;
 	private var friction:Number =0.9;
 	public function sp(){
 		init();
 		
 		}
 	private function init():void{
 	  
 	//ボールの作成
 		var color:Array =[0x000000,0x000000];
 		var alpha :Array =[0.3,1];
 		var ration:Array =[0,255];
 		var mat:Matrix =new Matrix();
 		mat.createGradientBox(30,30,0,-20,-20);
 		
 		ball = new Sprite();
 		 ball.graphics.beginGradientFill(GradientType.RADIAL,color,alpha,ration,mat);
 		  ball.graphics.drawCircle(0,0,20);
 		  ball.graphics.endFill();
 		addChild(ball);
 		ball.y =0;
 		
 		ball2 = new Sprite();
 		 ball2.graphics.beginGradientFill(GradientType.RADIAL,color,alpha,ration,mat);
 		  ball2.graphics.drawCircle(0,0,20);
 		  ball2.graphics.endFill();
 		addChild(ball2);
 		
 		ball3 = new Sprite();
 		 ball3.graphics.beginGradientFill(GradientType.RADIAL,color,alpha,ration,mat);
 		  ball3.graphics.drawCircle(0,0,20);
 		  ball3.graphics.endFill();
 		addChild(ball3);
 		
 		
 		addEventListener(Event.ENTER_FRAME,onEnterFrame);
 		}
 		
 	private function onEnterFrame(event:Event):void{
 	    if(ball3.y<0){
 	    	vy3 *=-1;
 	    	ball3.y =0;
 	    	}
 	    
 	  //バネ運動  
 	    var dx:Number =(mouseX-ball.x);
 	    var dy:Number =(mouseY -ball.y);
 	    var ax:Number =dx*spring;
 	    var ay:Number =dy*spring;
 	    vx +=ax;
 	    vx *=friction;
 	    vy +=ay;
 	    vy *=friction;
 	    vy +=gravity;
 	    ball.x +=vx;
 	    ball.y +=vy;
 	    
 	    
 	    var dx2:Number =(ball.x-ball2.x);
 	    var dy2:Number =(ball.y-ball2.y);
 	    var ax2:Number =dx2*spring2;
 	    var ay2:Number =dy2*spring2;
 	    vx2 +=ax2;
 	    vx2 *=friction;
 	    vy2+=ay2;
 	    vy2 *=friction;
 	    vy2 +=gravity;
 	    ball2.x +=vx2;
 	    ball2.y +=vy2;
 	    
 	    var dx3:Number =(ball2.x-ball3.x);
 	    var dy3:Number =(ball2.y-ball3.y);
 	    var ax3:Number =dx3*spring2;
 	    var ay3:Number =dy3*spring2;
 	    vx3 +=ax3;
 	    vx3 *=friction;
 	    vy3+=ay3;
 	    vy3 *=friction;
 	    vy3 +=gravity;
 	    ball3.x +=vx3;
 	    ball3.y +=vy3;
 	    
 		
 		
 		}


 	}
		
}

Forked