Home

BLOG atama-switch

Progression 3 CommandでBulkLoader

BulkLoaderを使ってみようってことでメモ。

private var _bulkLoader:BulkLoader;
//中略
addCommand(
	new Trace("Load START"),
	function():void {
		this.dispatcher = _bulkLoader;
		this.eventType = BulkLoader.COMPLETE;
		var i:uint = 0;
		for (i = 0; i < url_array.length; i++) {
			_bulkLoader.add(url_array[i]);
		}
		_bulkLoader.start();
	},
	new Trace("Load END")
);

↓ココの「コマンド中に任意の処理を待つ Func 編」を参考にしました。
http://trac.progression.jp/wiki/Memo

Progression3 CommandのinitObjectでネストされたmcのプロパティを設定

Progression3のCommandのinitObjectの使い方でメモ。

よくやるパターン AddChild

addCommand(
	new AddChild( container , mc , { child : { alpha : 0 } });
)

上記の方法でChild時にmcのalphaを0に設定できる。

↓こんな風にProp書かなくていいので少しだけ楽に。

addCommand(
	new Prop( mc, { alpha : 0 } ),
	new AddChild( container , mc);
)

DoTweener時にもよく使ってる。

addCommand(
	new DoTweener( mc , { x : 0, time:1 }, { target : { x : mc.x + 100 } } )
);

この便利なCommandのinitObjectですが、ネストされたmcの初期値も設定できる!

addCommand(
	new AddChild( container , parent_mc , { child : { child_mc : { alpha : 0 } } });
)

おぉ、これは便利だー

MacでProgression3.1.42を使って複数のCastをAddChildしてみると02

前回のエラーがよくわからないのだけど、とりあえずコレだとパブリッシュできたのでメモしとく。

	private var cast_num:Number = 100;
	private var cast_array:Array = new Array();
 
	/**
	 * コンストラクタ
	*/
	public function IndexScene() {
		// ブラウザ同期時に出力したいタイトルを設定します。
		title = "test";
		for (var i:uint = 0; i <= cast_num; i++) {
			var cast:CastMovieClip = new CastMovieClip();
			cast_array.push(cast);
		}
	}
 
	/**
	 * シーン移動時に目的地がシーンオブジェクト自身もしくは子階層だった場合に、階層が変更された瞬間に送出されます。
	 * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
	 */
	protected override function _onLoad():void {
		// 実行したいコマンドを登録します。
		addCommand(
			new Trace("Start"),
			function ():void {
				var commandList:Array = new Array();
				for (var i:uint = 0; i <= cast_num; i++) {
					commandList.push(new AddChild(progression.container, cast_array[i]));
				}
				this.parent.insertCommand(
					commandList
				);
			},
			new Trace("Complete")
		);
	}

_onLoadのaddCommandだけど

	protected override function _onLoad():void {
		// 実行したいコマンドを登録します。
		addCommand(
			new Trace("Start"),
			function ():void {				
				for (var i:uint = 0; i <= cast_num; i++) {
					this.parent.insertCommand(
						new AddChild(progression.container, cast_array[i])
					);
				};
			},
			new Trace("Complete")
		);
	}

でもうまくいきそうだけど、前回と同じスタックオーバーフローのエラーがでた。
なので配列に一度つっこんでinsertCommandへって方法をとってます。
違いがよくわからず消化不良のまま・・・orz

IndexScene.as http://www.atama-switch.net/progression/test02/IndexScene.as

MacでProgression3.1.42を使って複数のCastをAddChildしてみると

下記のソースでエラーがでちゃうんだけど、自分の環境だけなのかな・・・?
20個以上のCastをAddChildしてくだけのソース。

 
	private var cast01_mc:CastMovieClip;
	private var cast02_mc:CastMovieClip;
	private var cast03_mc:CastMovieClip;
	・
	・
	・
	private var cast20_mc:CastMovieClip;
 
	public function IndexScene() {
		// ブラウザ同期時に出力したいタイトルを設定します。
		title = "test";
 
		cast01_mc = new CastMovieClip();
		cast02_mc = new CastMovieClip();
		cast03_mc = new CastMovieClip();
		・
		・
		・
		cast20_mc = new CastMovieClip();
	}
 
	protected override function _onLoad():void {
		// 実行したいコマンドを登録します。
		addCommand(
			new AddChild( progression.container, cast01_mc),
			new AddChild( progression.container, cast02_mc),
			new AddChild( progression.container, cast03_mc),
			・
			・
			・
			new AddChild( progression.container, cast20_mc),
			new Trace("Complete")
		);
	}

Windows環境(CS3)ではパブリッシュ&ブラウザ動作OKなんだけど・・・・
Win環境でパブリッシュしたswfをMac Firefox3(FlashPlayer10)で確認するとスタックオーバーフローのエラーがでてしまう。
Mac環境(CS3)ではパブリッシュ時にエラーでて失敗してしまう。

同じ様な状況になっている人いませんかー?

2009/02/26 追記
2台のMacで確認したけど、AddChildするCastMovieClipの数が20個でエラーでるMacと40個以上でエラーがでるMacがあって再現条件がわからない・・・・うーん。

IndexScene.as http://www.atama-switch.net/progression/test/IndexScene.as

LoopNumber

こんなClassを書いてみた。

package
{
 
	public class LoopNumber {
 
		// LoopNumber
		public function get loop():Number { return _loop; }
		private var _loop:Number;
 
		// AddNumber
		public function get addval():Number { return _addval; }
		private var _addval:Number;
 
		// カウント変数
		public function get now():Number { return _now; }
		private var _now:Number;
 
		// カウント前の変数
		public function get prev():Number { return _prev; }
		private var _prev:Number;
 
		// カウント後の変数
		public function get next():Number { return counter(_now); }
		private var _next:Number;
 
		private var _start:Number;
 
		/* --------------------------------------------------------------------------- */
		// コンストラクタ
		/* --------------------------------------------------------------------------- */
		public function LoopNumber ( value:Number, loop:Number, addval:Number ) {
			_start = value;
			_now = value;
			_loop = loop;
			_addval = addval;
		}
 
		/* --------------------------------------------------------------------------- */
		// カウントアップ
		/* --------------------------------------------------------------------------- */
		public function count():Number {
			_prev = _now;
			_now = counter(_now);
			return _now;
		}
		/* --------------------------------------------------------------------------- */
 
		/* --------------------------------------------------------------------------- */
		private function counter ( value:Number ):Number {
			return ((loop - value) != 0) ? value + _addval : _start;
		}
		/* --------------------------------------------------------------------------- */
 
	}
}

使い方はこんな感じ

var ln:LoopNumber;
 
//0から2まで1づつカウントアップ
ln = new LoopNumber(0, 2, 1);
trace(ln.prev, ln.next, ln.now, ln.count());// NaN, 1, 0, 1
trace(ln.prev, ln.next, ln.now, ln.count());// 0, 2, 1, 2
trace(ln.prev, ln.next, ln.now, ln.count());// 1, 0, 2, 0
 
//2から0まで1づつカウントダウン
ln = new LoopNumber(2, 0, -1);
trace(ln.prev, ln.next, ln.now, ln.count());// NaN, 1, 2, 1
trace(ln.prev, ln.next, ln.now, ln.count());// 2, 0, 1, 0
trace(ln.prev, ln.next, ln.now, ln.count());// 1, 2, 0, 2

カウンタの前後の値も取れます。

下の様なカウンタをクリアさせるif文から解放されて、ちょっとだけソースがキレイになったw

if(count < countMax) {
	count += 1;
} else {
	count = 0;
}

こういう単機能のClassを充実させていきたいなー

Home

Search
Feeds
Meta
Link
写真素材 ストックフォトの定額制ペイレスイメージズ

Return to page top