FlashPlayer10のz軸とaddChildの関係

前回の問題点ですが、
http://d.hatena.ne.jp/haru-komugi/20081017/1224174419
このサイトで紹介されている方法で解決できました。


プログラムは下に載せます。
z軸でsortをするようです。
sortZのメソッドを表示オブジェクトを移動させた後に、
実行すれば、z軸によってaddChildの順番を変更し、
回り込むように実装できています。


でも、いちいちaddChildの位置を変えるのはめんどうな気がしますね。
オブジェクトが増えてきたら大変かも・・・。


リスト:Main02.as

package {
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	
	[SWF(width=800, height=600, backgroundColor=0)]

	public class Main02 extends Sprite {
		
		private var sh1:Shape = new Shape();
		private var sh2:Shape = new Shape();
		
		private var objs:Array = [sh1, sh2];
		
		public function Main02() {
			sh1.x = 200;
			sh1.y = 200;
			initDesign(sh1, 0xFF0000);
			
			sh2.x = 300;
			sh2.y = 300;
			sh2.z = 3000;
			initDesign(sh2, 0x0000FF);
			
			addChild(sh1);
			addChild(sh2);
			
			sortZ();
			
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
		}
		
		private function initDesign(sh:Shape, color:uint):void {
			sh.graphics.beginFill(color);
			sh.graphics.drawRect(0, 0, 200, 200);
			sh.graphics.endFill();
		}
		
		private var sort:Array = new Array();
		private function sortZ():void {
			for(var i:int=0; i<objs.length; i++) {
				sort[i] = {"z":objs[i].z, "im":objs[i]};		
			}
			sort.sortOn("z", Array.DESCENDING|Array.NUMERIC);
			for(var j:int=0; j<objs.length; j++) {
				setChildIndex(sort[j].im, j);
			}
		}
		
		private function onKeyDown(event:KeyboardEvent):void {
			switch (event.keyCode) {
				case Keyboard.UP:
					sh2.z += 10;
					break;
				case Keyboard.DOWN:
					sh2.z -= 10;
					break;
			}
			
			sortZ();
		}
		
	}
}