さて、去る12月25日。婚約からものすごく間を空けてしまったものの、無事入籍を済ませました。twitterで沢山の方からお祝いのポストをいただき、非常に感激しております。
こんな近況ですが、前回エントリで予告した自作コマンドの作り方を掲載しようと思います。
ちょっとしたコマンドであれば本当に簡単に作れるのでエントリにする事自体ためらいましたが、どうやって作ってるか掲載してなかったなーということで。。
まず、Progressionプロジェクト作成時に自動的に出来るtemplatesフォルダの中から、MyCommand.asを持ってきます。
それで
・クラス名
・コンストラクタ
・自身を呼び出すcloneメソッドの中の自分自身を返しているクラス
を、作ろうとしているコマンドクラス名に書き換えて、_executeメソッドの中に実行処理、_interruptメソッドの中に中断処理を記述します。
cloneメソッドで呼んでいる自身のクラスはパラメータのセットも忘れずに。
これだけです。Progression3は有用なテンプレートが用意されていて本当に助かりますよね。
コマンドの終了処理はexecuteComplete();中断処理はinterruptComplete();
このコマンドで次のコマンドまでの処理待ちをしたいならば、全ての処理が終わった後にexecuteComplete();を書きます。
例として丸いSpriteをステージ上に追加するコマンドを作ってみます。
/*======================================================================*//**
*
*/
package {
import flash.display.Sprite;
import flash.display.DisplayObjectContainer;
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.*;
/*======================================================================*//**
* CreateCircle クラス
*/
public class CreateCircle extends Command {
private var _sprite:Sprite;
private var _x:int;
private var _y:int;
private var _r:int;
private var _color:int;
private var _container:DisplayObjectContainer; /*======================================================================*//**
* コンストラクタ
*/
public function CreateCircle(container:DisplayObjectContainer = null, setx:int = 0, sety:int = 0, setr:int = 0, setcolor:int = 0xffffff, initObject:Object = null ) {
super( _execute, _interrupt, initObject );
//パラメータセット
_container = container;
_x = setx;
_y = sety;
_r = setr;
_color = setcolor;
}
/*======================================================================*//**
* 実行されるコマンドの実装です。
*/
private function _execute():void {
//Spriteのインスタンスを作成
_sprite = new Sprite();
//円を描画
_sprite.graphics.beginFill(_color);
_sprite.graphics.drawCircle(_x, _y, _r);
_sprite.graphics.endFill();
//指定表示コンテナにSpriteの追加
_container.addChild(_sprite);
// 通常処理を終了します。
executeComplete();
}
/*======================================================================*//**
* 中断実行されるコマンドの実装です。
*/
private function _interrupt():void {
// 中断処理を終了します。
interruptComplete();
}
/*======================================================================*//**
* MyCommand インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。
*/
public override function clone():Command {
return new CreateCircle(_container, _x, _y, _r, _color, this );
}
//Spriteの参照を取得出来るようにしておく
public function get sprite():Sprite { return _sprite; }
}
}
何に使えるのか分かりませんが、最初はこんなのを作って慣れると良いと思います。
これを使用してみたものは以下wonderflで
