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();
}
}