feb19.jp

Nobuhiro Takahashi
Designer / Engineer

Flash CS4 Professionalからはメタデータが使えるらしい

Flash CS4 Professionalからはメタデータが使えるらしい

要は、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では差異を減らしていっていただきたいものです(って僕だけかも)。

参考
Adobe: メタデータタグ -- Flex 2.01

Tweet Share Bookmark

Navigation

prev: Flash Player 10 Astroを予習。Dynamic Sound Generate編 #3
next: AS3でJSONを読みこむ

Recently Entries