zの値に応じてソートを行うサンプル。
80×80サイズのSpriteをランダムな座標に20個配置。
ソート前は前後関係がステージへ追加した順(zの値に無関係)となっていますが、
z_sortボタンをクリックするとzの値に即した前後関係に整列されます。
以下ソース。(Flash IDEにて作成)
stop(); /* 使い回しする配列 */ var _objs:Array = new Array(); /* イベント登録(ボタンはステージに配置済み) */ _sortBtn.addEventListener(MouseEvent.CLICK, _zsort); _resetBtn.addEventListener(MouseEvent.CLICK, _reset); /* 初回リセット */ _reset(); /** * リセット * @param e */ function _reset(e:MouseEvent = null):void { var aObj:Sprite; /* クリア処理 */ while(0 < _objs.length) { aObj = _objs.pop(); removeChild(aObj); aObj = null; } /* オブジェクトを20個作成 */ for (var i:uint = 0; i < 20; i++) { /* オブジェクト作成 */ aObj = new Sprite(); aObj.graphics.beginFill(Math.random() * 0xffffff, 1.00); aObj.graphics.drawRect( -80, -80, 160, 160); aObj.graphics.endFill(); aObj.x = Math.random() * stage.stageWidth; aObj.y = Math.random() * stage.stageHeight; aObj.z = Math.random() * 2000; addChildAt(aObj, 0); /* 配列にpush */ _objs.push(aObj); } } /** * Zソート * @param e */ function _zsort(e:MouseEvent = null):void { /* 比較関数を引数に渡し配列をカスタムソート */ _objs.sort(_compareFunction); /* 再配置 */ for (var i:int = 0; i < 20; i++) { addChildAt(_objs[i], 0); } } /** * 比較関数 * @param a * @param b * @return */ function _compareFunction(a:DisplayObject , b:DisplayObject):Number { /* zの値を比較(zの値が小さい順に並ぶようにする) */ return a.z - b.z; }
Useful info. Fortunate me I discovered your site by chance, and I am surprised why this coincidence did not happened earlier! I bookmarked it.