[Flash] Zソート

zの値に応じてソートを行うサンプル。

150618_zsort.png

デモ(要Flash Player)

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


[Flash] Zソート」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です