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