In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

ballの重なりはどうすればよいですか?

ballの重なり(奥行き)を出したいのですが、どのようにすればよいでしょうか?
swapDepthsを使えばよいのかなと思うのですが、どうしてもうまくいきませんでした。
コードも間違っているところも多々あって、とても見苦しいと思いますが、
宜しくお願いします。
/**
 * 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/5ZzF
 */

//ballの重なり(奥行き)を出したいのですが、どのようにすればよいでしょうか?
//swapDepthsを使えばよいのかなと思うのですが、どうしてもうまくいきませんでした。
//
//
//
//コードも間違っているところも多々あって、とても見苦しいと思いますが、
//宜しくお願いします。


package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.geom.Transform;
    
    public class FlashTest extends Sprite {
    	
    	private var ball:Ball;
    	private var angle:int=0;
    	private var radias:int =200;
    	private var ballNum:int=8;
    	private var balls:Array;
    	private var speed:Number =0;
    		private var sortAry:Array;//追加
    	
        public function FlashTest() {
        	init();
        }
        private function init():void{
        balls =[];
        
       for(var i:int =0; i<ballNum ;i++){
       	ball =new Ball(Math.random()*0xffffff,100,100);
       	  
       	stage.addChild(ball);//stage.を追加
        balls.push(ball);
        	
       }
        addEventListener(Event.ENTER_FRAME,on);
        }

//onを使って処理を繰り返し行う
      private function on(event:Event):void{
      	speed = Math.ceil((mouseX-230)/30);
      	angle +=speed;
      	sortAry=[];//追加
      	
       	
       	
       	for(var i:int=0;i<ballNum;i++){
       		
//最初にラジアンを定義する(matmatで使用するため、定義しないと最初んのforには反映されない)       		
       	var radiuns:Number  = (360/ballNum*i+angle )*Math.PI/180;

//ボールの形態を作ってあげてから、座標を決めてあげる。
//ここの処理を逆にするとうまく作動しない!!    	
       	
       	   	
        balls[i].x =230+Math.cos(radiuns)*radias;
        balls[i].y =230+Math.sin(radiuns)*radias/5;
       
       if(balls[i].y<230){
       	balls[i].alpha =1;
       	balls[i].scaleX =balls[i].scaleY =1;
       }else{
       	balls[i].alpha =1;
       	balls[i].scaleX =balls[i].scaleY =1;
       	}
       
//以下追加       
      //ソート用の配列に挿入
		sortAry.push({	target:balls[i], y:balls[i].y	})
       	
       }
       //yが小さい順にソートする       
       	sortAry.sortOn("y",  Array.NUMERIC);
       	//深度を更新
		for(i=0;i<ballNum;i++){
			stage.setChildIndex(sortAry[i].target,i);
			
		}			
//ココまで

//ballの傾きを決めるtest関数を作る    	
       function test(ball:Ball):void{
       	var mat:Matrix =new Matrix();
       		
       	mat.b =(Math.cos(radiuns)/9)*-1;
       	mat.a =Math.sin(radiuns);
       	
       	var tra:Transform =new Transform(ball);	
       	tra.matrix =mat;
       }
    }    	
 }
}

//Ballのクラスを作る
import flash.display.Sprite;

class Ball extends Sprite{
	public function Ball(color:uint=0x000000,sizeX:int=10,sizeY:int=10){
	    	graphics.beginFill(color);
	    	graphics.drawRect(-sizeX/2,-sizeY/2,sizeX,sizeY);
	    graphics.endFill();
	}	
}