Loaderで読み込んだswfと読み出し元swf間のイベント伝達

Loaderに外部のswfを読み込んだ状態で、LoaderにMouseEvent.CLICKのイベントリスナーを設定しても反応しない、という現象に悩まされることが多々あります。

Loaderは、InteractiveObjectを継承しているので、MouseEventは受け取れるはずです。それに、Loaderにスタティックな画像(jpegやpngなど)を読み込んだ際には、LoaderにMouseEvent.CLICKのイベントリスナーを設定すれば、イベント拾えるんですよね。

これは以前、fla.la » クロススクリプティングで紹介した

ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間のイベント伝達フロー

が関係してきます。

そこでAdobe ActionScript 3.0 * クロススクリプトを読んでみますと、以下の記述があります。

  1. 親オブジェクトを所有する SWF ファイルは、ソースオブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。
  2. ソースオブジェクトを所有する SWF ファイルは、親オブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。

つまり読み込んだexample.com/hoge.swfからexample.net/fugo.swfを読み込んで、イベント伝達を可能にするためには、お互いのドメインを引数にしたSecurity.allowDomain()を実行する必要があるということになります。

サンプルソース

サンプルをwonderflに上げておきました。中央付近に表示されるキャラクターにMouseEvent.CLICKイベントのリスナーを登録していますが、クリックしても反応しません。

キャプチャーフェーズ、ターゲットフェーズ、バブリングフェーズすべてのフェーズでイベントが発生していないことがポイントです。

そこで、上部にある「Security.allowDomain()」というボタンをクリックしたあとで、キャラクターをクリックすると反応することが分かると思います。

なお、http://asmple.com/work/avatar3.swfでは以下のSecurity.allowDomain()が記述してあります。

Security.allowDomain("wonderfl.net");
Security.allowDomain("swf.wonderfl.net");
 

UnionPlatformを紹介しました

このブログを通してお伝えしてきましたUnion Platfom関連のお話は、会社のODF(One Day Free)という制度を使って調査して来ました。

そして先日、社内のODF発表会でUnion Platformの概要部分だけをざっくり解説しました。ブログへの掲載許可を頂いたので、その時のスライドを紹介します。5分ぐらいで発表したのでざっくり概要を知るには良いかも知れません。

Union Platformの紹介(クリックで始まります。以降のスライドへはダブルクリックで進みます。)

もっとUnion Platformを知りたい方は以下の記事もご確認下さい。

関連記事

  1. UnionPlatform (1) 概要
  2. UnionPlatform (2) 概念
  3. Union Platform(3) 情報の共有化
  4. Union Platform(4) Reactorのイベント
  5. Union Platform(5) チャットを作る
  6. Union Platform(6) Union Server入門
  7. Union Platform(7) Union Server Module作成準備
  8. Union Platform(8) Moduleサンプル
 

wonderfl apiが出来たらしい

wonderfl apiが出来たみたいです。
ドキュメントの邦訳はとんさんのブログが詳しいです。素敵。

Wonderfl API を使ってみよう!

ちなみに作成したAPI Keyの一覧は、http://wonderfl.net/account/api_keysから見れます。

Client作ってみた

というわけで自分もAS3のClientを作ってみた。こうやって使うイメージ。

// set your api key
WonderflAPIClient.apiKey = "your_wonderfl_api_key";
 
// create client
var client:WonderflAPIClient = new WonderflAPIClient();
 
// listen
client.addEventListener(WonderflAPIClient.GET_USER_COMPLETE, hander);
 
// get user info
client.getUser();
 
// handler
function hander(event:Event):void
{
	trace(client.user.name);
}

ソース

wonderflにあげてあります。L:121以降がWonderflAPIClientです。コピペでご利用下さい。

まとめ

今後のマッシュアップ作品に期待です。私も何か作りたい!

 

Union Platformのgoogle group

Union PlatformのGoogleグループを作成しています。

Union Platformに興味がある方は是非、http://bit.ly/uniongrpへ。
お気軽にご参加下さい。

サンプルを充実させたいので、まずはサンプルの準備をして行きたいと思います。

 

wonderflでキャプチャ

wondeflで再生する前に表示されているキャプチャ画像ですが、
Frequently Asked Questions -> キャプチャについてにあるように、任意のタイミングにずらすことが可能です。

コレを使って、一番見せたいタイミングに近いところのキャプチャが出来るわけです。ただ、ローカルでwonderfl用のコードを書く際に

Wonderfl.capture_delay(10);

この記述でエラーが起きてしまうので、どうにかならないかと思っていました。

んが、簡単に解決出来ることに気づきました。クラスパスが通っている箇所に以下のようなダミーのクラスを用意しておけば良いですね。

1
2
3
4
5
6
7
8
9
10
11
12
package  
{
	public class Wonderfl 
	{
		public static function capture_delay(num:Number):void
		{	
		}
		public static function disable_capture():void
		{
		}
	}	
}

実は他にもメソッドがあるかもしれませんが、取りあえずはこれで事足ります。恥ずかしながら、今まではローカル作業中は、コメントアウトしてwonderflに挙げるときにコメントを外すという地味な作業をしていました。

これで少し手間が省けます。やった。

 

Threadのtestってどう書くの?

最近、Threadを使ってUnion用のThreadを作る機会が多いのですが、せっかくなのでtestを書こうと思っております。testはもちろん、AS3Unitを使っています。

Threadのtestを書く方法が良く分かりません。どうやるんだろうと思い考えてみたのがこれ。TestThreadはものすごい適当です。

続きを読む »

 

as3paintoco出来たかも

今年の3月くらいからまったりと開発して来ました、お絵描きライブラリ。

とりあえず、それなりに動くようなりました。
そこで、こっそりとGoogle Codeにて公開してみました。

その名も、as3paintoco(ぺいんとこ)と言います。

機能

主に、以下のような機能を持っています。

  • undo, redo機能
  • replay機能
  • お絵描きした画像の保存機能

続きを読む »

 

Objectのclone

いつも忘れるんですが、ByteArrayを使うとdeep copyが実現出来ます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package
{
	import flash.utils.ByteArray;
	/**
	 * <p>Objectのdeep copyを実行する関数です。</p>
	 */
	public function clone(object:Object):Object
	{
		var byteArray:ByteArray = new ByteArray();
		byteArray.writeObject(object);
		byteArray.position = 0;
		return byteArray.readObject();
	}
}
出典
ActionScript3 における deep copy
 

the Union Procecure Callの仕様を読む

Unionプラットフォームで使用されるUPCプロトコルの仕様を読んでみました。
ついでに、メモ書き程度に訳してみました。

UPC versionは、1.4.0(2009年09月4日現在)となっております。
UPCとは、the Union Procecure Callの略です。ReactorとUnion Serverとの間で取り交わされる内部的なメッセージフォーマットです。基本的に、Unionを利用する開発者が意識的に操作することはありません。

続きを読む »

 

Union Platform alpha4 released

Union alpha4がリリースされたので使ってみました。
tryunion.comを使われている方は、Reactorの更新が必要です。自身でUnion Serverを用意している方はReactor、Union Serverの両方を更新しましょう。

リリースノートは以下から確認出来ます。
Union 1.0 Alpha4 Release Notes

なお、以前のalpha3向けのエントリーは更新する予定です。完了しましたら別途お知らせいたします。

では、変更された点を確認してみます。

続きを読む »