‘小ネタ’ カテゴリーのアーカイブ

[小ネタ] Progression 4 でハマりやすいポイント

2009年9月20日 日曜日

Progression 4 では、新機能との整合性を取るためなどの理由で、いくつかの API の名称変更や保持するクラスの変更などが行われています。このエントリーでは特にハマりやすいと思われる個所をご紹介します。

  1. Progression インスタンスにアクセスするためには?
    ver 4 では Progression インスタンスへのアクセスは全て manager という名称のメンバに統一されました。
  2. SceneObject で progression.container とできない?
    ver 4 では、仕様上各シーン毎に関連付けられるべき DisplayObjectContainer が変動する可能性があるようになったため、SceneObject クラス自体に container プロパティが追加されました。そのため、単純に container と設定するだけで使用可能です。
    より詳しい解説 : 独学ActionScript
  3. コマンドでのイベント処理方法は?
    ver 4 では before() / after() メソッドのような JQuery 的な記述は廃止され、全て initObject 経由のイベントハンドラメソッドで設定する方式に統一されました。
  4. コマンドのエラー処理の方法は?
    ver 4 ではエラーの発生を補足するために特別な catchError イベントハンドラメソッドが用意されています。エラー処理を行った後、その後の処理をそのまま行うのであれば this.executeComplete() を、中断するのであれば this.interrupt() を実行してください。終了処理を何もしない場合には onError イベントハンドラメソッドが実行されます。
  5. コマンドの中断処理についてのポリシー変更について
    ver 3 では中断処理自体に非同期処理が設定可能でしたが、ver 4 ではその仕様を排して即中断処理を完了するように変更しました。この変更によって interrupt() 実行後、次の行ですぐに中断を完了した前提の処理が行えるようになります。
  6. Func コマンドのイベント待ちの設定方法は?
    ver 3 で省略系の Func コマンドを設定した場合、
    this.dispatcher = hoge;
    this.eventType = Event.COMPLETE;
    のように設定していましたが、ver 4 では以下のようにシンプルに変更されました。
    this.listen( hoge, Event.COMPLETE );
  7. mySceneObject.sceneInfo.data がなくなった?
    ver 4 では、新しくシーン毎のデータを管理する専門の DataHolder クラスが追加されました。そのため今後は mySceneObject.dataHolder.data とアクセスする必要があります。
  8. クエリの挙動がおかしい?
    ver 3 ではそれぞれのシーン毎に個別の SceneInfo インスタンスを持っていたため、独立したクエリ値を持っていましたが、ver 4 ではシーンツリー全体で SceneInfo インスタンスを共用する方式に変更となったため、変更した内容は全てに波及することになります。

[小ネタ] progression.js について

2009年2月10日 火曜日

Progression から書き出される HTML では、progression.js の progression.embedSWF() メソッドを使用して Flash を表示しています。

基本設定の状態で書き出すと、以下のようなフォーマットで書き出されます。

progression.embedSWF( {
	width:640,
	height:480,
	adjustHorizontal:false,
	adjustVertical:false,
	centering:true,
	flashvars:{
	},
	params:{
		bgcolor:"#FFFFFF",
		wmode:"window",
		allowscriptaccess:"samedomain"
	},
	attributes:{
	}
} );

各設定値はそれぞれプロジェクトパネルの設定と対応しています。
それぞれの値は以下のデフォルト値を持っているので、省略するとデフォルト値が使用されるようになります。

defaultConfig = {
	url:"preloader.swf",
	replaceElementId:"attention",
	width:640,
	height:480,
	adjustHorizontal:false,
	adjustVertical:false,
	centering:true,
	version:"9.0.45",
	useExpressInstall:true,
	flashvars:{},
	params:{
		bgcolor:"#FFFFFF",
		wmode:"window",
		allowfullscreen:true,
		allowscriptaccess:"samedomain"
	},
	attributes:{}
} );

また、書き出し初期状態では設定されていない属性についても、デフォルト値を上書きすることで設定できるようになっていますので、例えば url に “index.swf” とするとプリローダーを使用せずに表示させることができるようになります。

[小ネタ] フォーラムの RSS 件数の増やし方

2009年2月9日 月曜日

主に自分用に調べたのですが、参考になるかと思いますのでメモしておきます。

Progression の公式フォーラムとして使用している SMF では投稿を RSS で確認できますが、デフォルト状態では 5 件のみになっています。もっと多くの件数を受信したい場合には、以下のように RSS の URL に件数設定を行う必要があります。

デフォルトの 5 件
http://forum.progression.jp/index.php?type=rss;action=.xml;

20 件の場合
http://forum.progression.jp/index.php?type=rss;action=.xml;limit=20;

こちらでは 30 件受信するようにして、できるだけフォロー漏れがないようにしています。

[小ネタ] プロジェクトのバッチ作成

2008年12月26日 金曜日

Progression 3.1 では、プロジェクト機能用の JSFL による API が用意されています。

すでにインストール済みの環境であれば、ユーザー環境設定の以下の場所にサンプルファイルがコピーされています。

Windows の場合 C:\Documents and Settings\ユーザー名\Local Settings\Application Data\Adobe\Flash CS4\ja\Configuration\Extensions\Progression\Resources\APIExamples

Mac の場合 /Users/ユーザ名/Library/Application Support/Adobe/Flash CS4/ja/Configuration/Extensions/Progression/Resources/APIExamples

または、以下のリポジトリ上からも入手可能です。
http://trac.progression.jp/browser/development/trunk/project/Flash/Extensions/Progression/Resources/APIExamples

実際にバッチファイルからプロジェクトを作成するには、Windows であれば bat ファイル経由で、Mac であれば sh ファイルなどを利用して、CreateProjectCS4.jsfl を実行することになります。
その際に書き出されるプロジェクトの設定については実行させる CreateProjectCS4.jsfl に記述してください。

アップデートの際も同様の方法で UpdateProjectCS4.jsfl を実行することで実現できます。

[小ネタ] Progression 3.1 を Flash CS3 と Flash CS4 で使用した際の違い

2008年12月24日 水曜日

先日リリースした Progression 3.1 は Flash CS3 と Flash CS4 の両方に対応していますが、一部機能が CS4 のみの対応となっています。

Flash CS4 のみの機能

  • Flash Player 10 および AIR 1.5 に対応したプロジェクト書き出しが可能になっています。
  • 「ライブラリを SWC として書き出す」を使用すると Progression 3.1 + Flash CS3 と比較して約 5 倍の速度で、Progression 3.0 + Flash CS3 と比較して約 13 倍の速度でプロジェクトを作成可能になっています。
Flash CS3 のみの機能
  • flp ファイルによるプロジェクト管理機能(Flash CS4 で機能自体が削除されたため)
ということで、みんな Flash CS4 を買おう!

[イベント] Progression 勉強会やります

2008年11月10日 月曜日

ということで、今回はワークショップではなく勉強会です。
ワークショップは初心者、未経験者を対象としてきましたが、そろそろユーザーの方もかなり増えてきたので、既存ユーザーに向けた何かを開催しようということで勉強会を開催します。

定員についてですが、今回はワークショップではないので、特に人数制限は必要ないかなと思っています。
(毎回制限なしの FxUG さんも十分成立してますし)
エントリー制に変更致しました。詳しくはこちらのエントリーで。

ただし、椅子の数には制限があるので 40 名を超えた場合には立ち見となりますので、あらかじめご了承ください。

■ 概要
日時 : 2008/12/04(木) 19:00 ~ 21:00(18:45 開場)
場所 : アドビシステムズ株式会社様、会議室(ゲートシティ大崎、イーストタワー 19F)
最寄駅 : JR 大崎駅

定員 : なし(ただし、40 人以降は立ち見)
参加費 : 無料
対象 : すでに Progression ユーザーの方、いきなり実践編でも大丈夫な方

■ スケジュール
19:00 ~ 19:05 ご案内、司会 阿部(taka:nium)
19:05 ~ 19:25 アドビさんの最新情報(?)
19:25 ~ 21:00 ライトニング・トーク(20 分×4 人)
21:00 ~ 懇親会的な何か(希望する方)

■お申し込み方法
募集を開始しました。
下記の参加申し込みページから登録をお願い致します。
http://atnd.org/events/171

※申し込みには MTL 様のイベント開催支援ツール ATND を使用しますので、OpenID に対応したアカウントをご用意ください。


Talk #1 Progression3 で AIR
発表者 : northprint
Progression で AIR アプリを作る(Progression の Tips 的な話を混ぜながら)

Talk #2 Viewer あれこれ作ったよ!
発表者 : あつのすけ(flabaka)
何でこんなものを作ろうと思ったのか? などなど

Talk #3 タイムライン派にもやさしい Progression
発表者 : fumix
実際にコンポーネントベースで作ったコンテンツを紹介しつつ、as3 バリバリじゃなくても progression はすっげー使えますよ~的な内容で。

Talk #4 Progression の広め方
発表者 : どうけ
だいたいは社内で自分が行ったレクチャーのまとめみたいな感じです。アニメベースの人向け、AS2er むけなどいくつか目線を変えてしゃべってきたのを整理してみようと思います。
目新しい Tips やトリッキーな技はありませんが、社内で広めたいとか周りに説明するときにこういうと分かりやすい、みたいな。いわばつくった人とはちょっと違った切り口で各機能やそのメリットをお話できたら面白いんじゃないかなーと思ってます。

Talk #? (余った時間で)スクリプトの話をしよう。
発表者 : taka:nium
時間が余ったらなんかします。
ATND のコメント欄とかで「こういうのどうやるのん?」的なリクエストお待ちしています。

※内容は変更となる可能性があります。
※発表順については未定です。


また、今回は勉強会ということでライトニング・トークの発表者を 4 人まで募集します。
「おれ様の流儀はこうだ!」「わたしのカスタムクラスをもっと見て!」「これがコンポーネントの真髄じゃよ・・・」「この事例のウラにはこんな苦労が・・・」などなど、Progression に関連した内容であれば何でも OK です。
一人が厳しい場合には、開発者とノリツッコミする前提でも構いません。

発表されたい方は、このエントリーに以下の内容でコメントをお願いします。

■ 発表者のエントリー情報
  • 発表者名
  • セッション名
  • セッション内容

[小ネタ] 定型パターンのコマンド処理をまとめる

2008年11月8日 土曜日

コマンドを使用していると、よくあるパターンの組み合わせができることがあると思います。
そういった場合には、そのパターンをひとつのクラスとしてまとめてしまうのが便利です。

package {
	import jp.progression.commands.*;
	import jp.progression.core.commands.Command;
	
	public class MyCommandList extends SerialList {
		
		public function MyCommandList() {
			addCommand(
				new Trace( "ok" ),
				new Wait( 1000 ),
				new Trace( "ok" ),
				new Wait( 1000 ),
				new Trace( "ok" )
			);
		}
		
		public override function clone():Command {
			return new MyCommandList( this );
		}
	}
}

今回は直列処理としてまとめましたが、並列処理としてまとめたい場合には、親クラスに ParallelList クラスを設定すれば OK です。

[小ネタ] カスタムコマンドの作り方

2008年11月5日 水曜日

あとで公式サイトのドキュメントとしてキチンとまとめますが、とりあえず走り書きしつつ紹介してみようかと思います。

まず、クラスのプロジェクトを書き出してください。
すると、templates フォルダの中に MyCommand.as というクラスファイルがあります。
これがカスタムコマンドを作る際のベースとなるクラスです。

_execute() メソッド
コマンドが実行された際に処理したい内容です。
正しく処理が完了したら executeComplete() メソッドを実行することでコマンド処理が完了したと見做されます。
executeComplete() メソッドは、コマンド実行中であれば _execute() メソッドの外でも実行できるので、非同期処理を含めたい場合には完了を意味するリスナー関数内で実行していただいても問題ありません。
また、処理中に問題が発生して中断処理を実行させたい場合には interrupt() メソッドを実行してください。

_interrupt() メソッド
コマンド実行中に中断処理が行われた際に処理したい内容です。
正しく中断処理が完了したら interruptComplete() メソッドを実行することでコマンド中断処理が完了したと見做されます。
また、中断処理中に問題が解決された場合には、executeComplete() メソッドを実行することで通常フローに戻すことも可能です。

それぞれのメソッドはコンストラクタでスーパークラスを初期化する際に登録する必要があるので、private な関数を登録することで処理内容を完全に隠蔽することが可能です。
また、コンストラクタに任意の引数を追加した場合には、clone() メソッド側も修正する必要がある点を気をつけてください。

[小ネタ] コマンドのエラー処理

2008年10月31日 金曜日

連続する処理をシーケンス的に記述するのに便利なコマンドですが、読み込み処理などをする場合には「ファイルが存在しなかった場合」などのエラー処理が必要になってきます。
そこで今回はコマンドのエラー処理方法についてご紹介します。

使用するコマンドは LoadURL コマンドで、読み込み先のデータが存在しなかった場合という条件とします。

addCommand(
	// 直列処理を実行します。
	new SerialList( null,
		// トレース文を出力します。
		new Trace( "読み込みを開始します" ),
		
		// 存在しない URL を読み込みます。
		new LoadURL( new URLRequest( "notexist.dat" ) )
		// LoadURL コマンドでエラーが発生した場合に呼び出す関数を指定します。
		.error( function( e:Error):void {
			// エラー関数内の this は問題が発生した LoadURL コマンドを指します。
			trace( this, e );
			// ここでは問題を解決しないので、親の SerialList コマンドのエラー関数に伝播します。
		} ),
		
		// トレース文を出力します。
		new Trace( "読み込みに失敗しました。" )
	)
	// SerialList コマンドでエラーが発生した場合に呼び出す関数を指定します。
	.error( function( e:Error):void {
		// エラー関数内の this は問題が発生した LoadURL コマンドを指します。
		trace( this, e );
		// エラー関数内の処理で問題が解決した場合には、対象の executeComplete() メソッドを実行します。
		this.executeComplete();
	} )
);

このような感じに問題が発生しそうなコマンドの error() でエラー発生時に呼び出す関数を指定します。
もし SerialList コマンドなどで多階層化されている場合に、エラー発生元で問題が解決すると親のコマンドに伝播していきます。
この場合、伝播先のコマンドでエラー処理が行われる場合、this は常にエラーが発生したコマンドとなります。
最終的にエラー関数内で問題が解決できた場合には、対象の executeComplete() メソッドを実行し、解決できなかった場合にはルートとなっているコマンドリストが CommandEvent.COMMAND_ERROR を送出します。

エラー対策が必要な場合に、ぜひお試しください。

[小ネタ] Progression 3 のサンプルデータについて

2008年9月20日 土曜日

Progression 3 の新しい機能の使用方法などが分かるサンプルデータを以下のリポジトリで作りためています。

最終的にはある程度説明も付け加えた紹介ページを作成しようかと思っていますが、いつになるか分からないので、すぐにでも試してみたい方はご覧ください。