コマンドについて色々書いてみる

| コメント(0) | トラックバック(0)

今日は大崎でProgressionのコンポーネントベースのワークショップがあり、参加してきました!!コンポーネントベース凄いです!みんなクラスばっかりやってないでコンポーネントベースもやるべきだと思います。本当に。

さて、先日はF-Siteに行ったり、ロクナナワークショップに行ったりとイベント続きだったんですが、おかげさまでスケジュールが激しく押されておりますね。

そんな中、空気を読まずにコマンドについての考察をエントリしたいと思います!!

さて、Progressionのコマンドですが、いきなりfunctionを書くことが出来るのでかなり記述の幅が広いです。
でも、いまいち詳しく分かっていなかったり(←いまさら)していたので、復習も兼ねてエントリします。

例えば。。。

addCommand(
    new Trace("コマンドスタート"),
    function ():void{
         trace("これはどのタイミングかな?");
    },
    new Trace("コマンド終わり!")
)

これはどうなるかと言うと、ちゃんと順番に
コマンドスタート
これはどのタイミングかな?
コマンド終わり
となります。

次はどうでしょう?

addCommand(
    new Trace("コマンドスタート"),
    function ():void{
        addCommand(new Trace("これはどのタイミングかな?"));
    },
    new Trace("コマンド終わり!")
)

今度は
コマンドスタート
コマンド終わり
これはどのタイミングかな?
となります。
functionの中のaddCommandはコマンドのキューに追加するという形になりますね。

で、次はどうでしょう?

addCommand(
    new Trace("コマンドスタート"),
    function ():void{
        insertCommand(new Trace("これはどのタイミングかな?"));
    },
    new Trace("コマンド終わり!")
)

これはまた順番に
コマンドスタート
これはどのタイミングかな?
コマンド終わり
と出力されるようになりました!!insertCommandはこんな感じで使う訳なんですね。

さてさて、さらに色々する為にカスタムコマンドを作成します。
以下のように"カスタムコマンドだよ"という文字列だけをgetする為のコマンドを作成してみます。

package myproject {
	import jp.progression.casts.*;
	import jp.progression.commands.*;
	import jp.progression.core.commands.Command;
	import jp.progression.events.*;
	import jp.progression.loader.*;
	import jp.progression.*;
	import jp.progression.scenes.*;
	public class MyCommand extends Command {
		private var _returnValue:String;
		/*=================================*//**
		 * コンストラクタ
		 */
		public function MyCommand( initObject:Object = null ) {
			super( _execute, _interrupt, initObject );
		}
		/*=================================*//**
		 * 実行されるコマンドの実装です。
		 */
		private function _execute():void 	{
			_returnValue = "カスタムコマンドだよ";
			// 通常処理を終了します。
			executeComplete();
		}
		/*=================================*//**
		 * 中断実行されるコマンドの実装です。
		 */
		private function _interrupt():void {
			// 中断処理を終了します。
			interruptComplete();
		}
		/*=================================*//**
		 * MyCommand インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。
		 */
		public override function clone():Command {
			return new MyCommand( this );
		}
		/*ゲッター*/
		public function get returnValue():String { return _returnValue; }
	}
}

で、以下のようなコードを書いてみますが。。。これはいけません。

var _myCommand = new MyCommand();
addCommand(
    new Trace("コマンドスタート"),
    function ():void{
        insertCommand(_myCommand);
        trace(_myCommand.returnValue);
    },
    new Trace("コマンド終わり!")
)

これだと
コマンドスタート
null
コマンド終わり!
と帰ってきます。コマンドの実行タイミングが分かっていれば一目両全ですね。
以下のように書くと良いです。

var _myCommand = new MyCommand();
addCommand(
    new Trace("コマンドスタート"),
    function ():void{
        insertCommand(_myCommand);
    },
    function ():void{
        trace(_myCommand.returnValue);
    },
    new Trace("コマンド終わり!")
)

これで
コマンドスタート
カスタムコマンドだよ
コマンド終わり!
の順番で出力されます。

以下の様に書いても一緒です。むしろこう書くべき。

var _myCommand = new MyCommand();
addCommand(
    new Trace("コマンドスタート"),
    _myCommand,
    function ():void{
        trace(_myCommand.returnValue);
    },
    new Trace("コマンド終わり!")
)

どうでしょう?カスタムコマンドから値受ける時はこんな感じでいいのかな???
他にもコマンドは色んな書き方があるので、(実行待ちとかイベント待ちとか)研究を重ねたいと思います。

トラックバック(0)

トラックバックURL: http://www.northprint.net/mt5/mt-tb.cgi/122

コメントする

このブログ記事について

このページは、northprintが2008年11月21日 01:27に書いたブログ記事です。

ひとつ前のブログ記事は「カスタムコマンドを作ってみた」です。

次のブログ記事は「『第一回ラーメンサラダを広める会』開催のお知らせ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。