
要は、Flex用に書かれているActionScript3.0コードによく見かけられるこの記述、
[SWF(width = "320", height = "240", backgroundColor = "0xFFCC00", frameRate = "30")]
これが、Flash CS4 Professionalから使えるとのこと。
とはいえ内部構造としては、メタデータはFlex SDK専用の機能なので、FlashにFlex SDKを読み込ませてメタデータを使う、ということらしいです。要は、Flash CS4をインストールしたら、Flex SDKを落としてきて、ライブラリパスを通す、ということらしいです。
(参考:Using the Flex SDK with Flash CS4)
ちなみに上のメタデータコードの意味は(説明するまでもないですが)、「SWFのステージサイズを320x240に設定し、背景色を#FFCC00に、フレームレートを30fpsに設定する」という意味です。
これで、Flashの操作画面で何も選択していない時に、プロパティパネルに表示されているドキュメントの「プロパティパネル」を操作せずとも、ActionScriptの中で記述してしまうことが出来てしまいます。
書き出しバージョンとかも選べるのですかね?
また、Pixel Benderの.pbjファイルを使って、Flash Player 10から対応するShaderFilter効果を得たいときに、たとえばこんなコードを書くことができるのですが、
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.events.Event;
import flash.utils.ByteArray;
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = new URLLoaderDataFormat.BINARY; //pixel benderファイルをバイナリで読み取る→後にこれをShaderに突っ込む
urlLoader.addEventListener(Event.COMPLETE, loadCompleteHandler);
urlLoader.load(new URLRequest("pixelbender.pbj");
function loadCompleteHandler(e:Event):void
{
var pixelBenderData:ByteArray = ByteArray(URLLoader(e.currentTarget).data);
var shader:Shader = new Shader(pixelBenderData);
shader.data.*****.value = [0]; //それぞれのPixelBenderに応じてこの辺は変える
shader.data.****.value = [20];
var sprite:Sprite = new Sprite(); //フィルターを適用するオブジェクト
sprite.graphics.beginFill(0xff00ff);
sprite.graphics.drawRect(0, 0, 280, 280);
sprite.graphics.endFill();
addChild(sprite);
sprite.filters = [new ShaderFilter(shader)];
}
これではpbjファイルのロードを待たなくてはなりません。
なので、pbjファイルをメタデータタグを使って、SWFにリンケージとして埋め込んでしまいます。
[Embed(source = "pixelbender.pbj", mimeType = "application/octet-stream")]
private var pixelBenderDataRef:Class;
これを書いておけば、urlLoaderうんぬんの部分は省けるので、いきなり下記のように書けてしまいます。
var pixelBenderData:ByteArray = new pixelBenderDataRef();
var shader:Shader = new Shader(pixelBenderData);
まとめると、こんな感じ。
package
{
import flash.display.Shader;
import flash.display.Sprite;
import flash.filters.ShaderFilter;
import flash.utils.ByteArray;
[SWF(width = "320", height = "240", backgroundColor = "0xFFCC00", frameRate = "30")]
/**
* メタデータを使ってPixelBenderファイルを埋め込むサンプルクラス
*/
public class MetaDataAndPixelBenderTest extends Sprite
{
[Embed(source = "pixelbender.pbj", mimeType = "application/octet-stream")]
private var pixelBenderDataRef:Class;
public function MetaDataAndPixelBenderTest()
{
var pixelBenderData:ByteArray = new pixelBenderDataRef();
var shader:Shader = new Shader(pixelBenderData);
shader.data.*****.value = [0]; //それぞれのPixelBenderに応じてこの辺は変える
shader.data.****.value = [20];
var sprite:Sprite = new Sprite(); //フィルターを適用するオブジェクト
sprite.graphics.beginFill(0xff00ff);
sprite.graphics.drawRect(0, 0, 280, 280);
sprite.graphics.endFill();
addChild(sprite);
sprite.filters = [new ShaderFilter(shader)];
}
}
}
というわけでこれによって、Flex用に書かれたActionScriptとの差異はコンポーネントの差ぐらいになったということでしょうか。
Flashはバージョンがいっぱいあって、ActionScriptにもバージョンがいっぱいあって、色々こんがらがってくるので、同じAdobeの同じFlashPlayerをターゲットにしている開発環境用のActionScriptでは差異を減らしていっていただきたいものです(って僕だけかも)。

