年収でおなじみのnagggさんのProgressionのイベントレポートでProcessEvent.PROCESS_START や ProcessEvent.PROCESS_COMPLETE イベントと合わせて stage.mouseChildren の制御を行うのも定石だよねwとあるのでそういうもんなのかーと思い込んでいたのですが、Progression3のPropコマンドっていうのがあってこれ使えばスマートってことに気付いた。

new SerialList( null, new Prop( btn, { alpha:0, mouseEnabled:false } ), new DoTweener( btn, { alpha:1, time:1 } ), new Prop( btn, { mouseEnabled:true } ) ).execute();

これはボタンの有効無効を変えただけですが、他の要素との連動もすっきり書けそうです。

イベントもめんどいしbeforeとかafterメソッドもややこしいなーと思ってたのですがこの発想はありませんでした。天才だとおもいました。

なので、DoTweenerでtime:0でプロパティセットしていたような処理も、Propでやるほうがスマートです。Objectで渡すのでtime値の有無以外は見ためもそろってるし。

これだけだとあれなので、ついでにProgressionのカスタムコマンドのTipsを。
Propとか地味であまり使わなさそうなんですが、カスタムコマンド化しておくと何かと便利です。

初期値のセット

package com.kayac.commands { import jp.progression.commands.Prop; public class DefaltProp extends Prop{ public function DefaltProp( target:*, props:Object = null, initObj:Object = null ) { if ( !props ) props = { }; if ( !props.alpha ) props.alpha = 0.0; if ( !props.x ) props.x = 0; if ( !props.y ) props.y = -400; super( target, props, initObj ); } } }

ランダム値のセット

package com.kayac.commands { import jp.progression.commands.Prop; public class RandomRotProp extends Prop{ private var range:Number = 1000; public function RandomRotProp( target:*, props:Object = null, initObj:Object = null ) { if ( !props ) props = { }; if ( initObj.range ) range = initObj.range; if ( !props.x ) props.x = ( Math.random() -0.5 )*range; if ( !props.y ) props.y = ( Math.random() -0.5 )*range; if ( !props.rotation ) props.rotation = ( Math.random() -0.5 )*360; super( target, props, initObj ); } } }

中央へTweenモーション

package com.kayac.commands { import jp.progression.commands.DoTweener; public class TextOutMotion extends DoTweener{ public function TextOutMotion( target:*, time:Number = 2.0, initObj:Object = null ) { super( target, { x: 400, y: 300, time: time }, initObj ); } } }

ランダムなTweenモーション

package com.kayac.commands { import jp.progression.commands.DoTweener; public class TextOutMotion extends DoTweener{ public function TextOutMotion( target:*, props:Object, initObj:Object = null ) { super( target, { x: props.x * Math.random(), y: props.y * Math.random(), time: time }, initObj ); } } }

一時停止・再開できる拡張DoTweener

//ほぼDoTweenerのコピーです package com.kayac.commands { import jp.nium.api.tweener.TweenerEvent; import jp.nium.api.tweener.TweenerHelper; import jp.progression.core.commands.Command; /*======================================================================*//** * Tween 処理が開始された場合に送出されます。 * * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * @eventType jp.nium.api.tweener.TweenerEvent.START */ [Event( name="start", type="jp.nium.api.tweener.TweenerEvent" )] /*======================================================================*//** * Tween 処理が完了した場合に送出されます。 * * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * @eventType jp.nium.api.tweener.TweenerEvent.COMPLETE */ [Event( name="complete", type="jp.nium.api.tweener.TweenerEvent" )] /*======================================================================*//** * Tween 処理が上書きされた場合に送出されます。 * * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * @eventType jp.nium.api.tweener.TweenerEvent.OVERWRITE */ [Event( name="overwrite", type="jp.nium.api.tweener.TweenerEvent" )] /*======================================================================*//** * Tween 処理でプロパティ値が変更された場合に送出されます。 * * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * @eventType jp.nium.api.tweener.TweenerEvent.UPDATE */ [Event( name="update", type="jp.nium.api.tweener.TweenerEvent" )] /*======================================================================*//** * Tween 処理中にエラーが発生した場合に送出されます。 * * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * @eventType jp.nium.api.tweener.TweenerEvent.ERROR */ [Event( name="error", type="jp.nium.api.tweener.TweenerEvent" )] /*======================================================================*//** * DoTweener クラスは、caurina.transitions.Tweener パッケージのイージング機能を実行するコマンドクラスです。 * * @see http://code.google.com/p/tweener/ * @see http://code.google.com/p/tweener/wiki/License * @langversion 3.0 * @playerversion Flash 9.0.45.0 * * @example * // MovieClip インスタンスを作成する * var mc:MovieClip = new MovieClip(); * * // DoTweener コマンドを作成します。 * var com:DoTweener = new DoTweener( mc, { * // ( 100, 100 ) の座標に移動します。 * x :100, * y :100 * } ); * * // DoTweener コマンドを実行します。 * com.execute(); * */ public class DoExTweener extends Command implements IPauseable { /*======================================================================*//** * * Any object that will suffer a tweening. These objects are usually MovieClip, TextField, or Sound instances, or any other custom object with a numeric property that needs to be tweened. * * @langversion 3.0 * @playerversion Flash 9.0.45.0 */ public function get target():Object { return _target; } public function set target( value:Object ):void { _target = value; } private var _target:Object; /*======================================================================*//** * * An object containing various properties of the original object that you want to tween on the original objects, with their final values assigned (some special properties are also allowed), as well as some built-in Tweener properties used when defining tweening parameters. This is like the recipe for the tweening, declaring both what will be tweened, and how. * * @langversion 3.0 * @playerversion Flash 9.0.45.0 */ public function get parameters():Object { return _parameters; } public function set parameters( value:Object ):void { _parameters = value; } private var _parameters:Object; /*======================================================================*//** * TweenerHelper インスタンスを取得します。 */ private var _tweenerHelper:TweenerHelper; /*======================================================================*//** * 新しい DoTweener インスタンスを作成します。 * Creates a new DoTweener object. * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * * @param target * * Any object that will suffer a tweening. These objects are usually MovieClip, TextField, or Sound instances, or any other custom object with a numeric property that needs to be tweened. * @param tweeningParameters * * An object containing various properties of the original object that you want to tween on the original objects, with their final values assigned (some special properties are also allowed), as well as some built-in Tweener properties used when defining tweening parameters. This is like the recipe for the tweening, declaring both what will be tweened, and how. * @param initObject * 設定したいプロパティを含んだオブジェクトです。 * */ public function DoExTweener( target:Object, parameters:Object, initObject:Object = null ) { // 引数を設定する _target = target; _parameters = parameters; // スーパークラスを初期化する super( _execute, _interrupt, initObject ); } /*======================================================================*//** * 実行されるコマンドの実装です。 */ private function _execute():void { // タイムアウトを再設定する timeOut = Math.max( timeOut, _parameters.time + 5000 ); // TweenerHelper を作成する _tweenerHelper = new TweenerHelper( _target, _parameters ); _tweenerHelper.addExclusivelyEventListener( TweenerEvent.COMPLETE, _complete, false, int.MAX_VALUE, true ); _tweenerHelper.addExclusivelyEventListener( TweenerEvent.ERROR, _error, false, int.MAX_VALUE, true ); // アニメーションを開始する if ( _tweenerHelper.doTween() ) { return; } // 処理を終了する executeComplete(); } /*======================================================================*//** * 中断実行されるコマンドの実装です。 */ private function _interrupt():void { // Tween を停止する _tweenerHelper.removeTweens(); // 処理を終了する interruptComplete(); } /*======================================================================*//** * DoTweener インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。 * Duplicates an instance of an DoTweener subclass. * * @langversion 3.0 * @playerversion Flash 9.0.45.0 * * @return * 元のオブジェクトと同じプロパティ値を含む新しい DoTweener インスタンスです。 * A new DoTweener object that is identical to the original. */ public override function clone():Command { return new DoExTweener( _target, _parameters, this ); } public function pause():Boolean { return _tweenerHelper.pauseTweens(); } public function resume():Boolean { return _tweenerHelper.resumeTweens(); } /*======================================================================*//** * */ private function _complete( e:TweenerEvent ):void { // イベントリスナーを解除する _tweenerHelper.completelyRemoveEventListener( TweenerEvent.COMPLETE, _complete ); _tweenerHelper.addExclusivelyEventListener( TweenerEvent.ERROR, _error ); // 処理を終了する executeComplete(); } /*======================================================================*//** * */ private function _error( e:TweenerEvent ):void { // イベントリスナーを解除する _tweenerHelper.completelyRemoveEventListener( TweenerEvent.COMPLETE, _complete ); _tweenerHelper.addExclusivelyEventListener( TweenerEvent.ERROR, _error ); // 処理を実行する _catchError( this, e.metaError ); } } }

HTML5飯