Flex SDK上でFLASHを開発する場合、FLASHで表示するコンポーネントやデータの構造をmxmlファイルで定義できます。このmxmlファイルを記述しmxmlcでコンパイルすると、mxmlの内容がActionScript(mxml内の各要素を生成するコードなど)に変換され、ActionScriptのコードからFLASHのバイナリファイルswfができるわけです。

このmxmlには、明示的にActionScriptのコードを追加することで、「動的な処理」を追加することも可能です。たとえば、アプリケーション起動時やコンポーネントがクリックされたときのイベント処理、画像のロード、など各種の処理をスクリプトで実現できます。
試しに、Flex SDKのインストールでテストしてみたmxmlに、「ラベルをクリックしたらラベルの文字列を変える」処理を追加してみましょう。

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Label id="label1" text="hellow" click="label1.text='clicked';"/>
</mx:Application>

ActionScriptからmxmlで定義したコンポーネントにアクセスするには、操作対象として指定するために名前(識別子)が必要になるので、Labelにid属性でlabel1というidを設定します。これで、ActionScriptからラベルをlabel1という名前(変数)で扱えるようになりました。後は、クリック時のイベント処理を設定するclick属性で「label1のテキストを'clicked'に設定する」ActionScriptを指定すれば完成です。
感覚としては、HTMLファイルにJavaScriptでイベント処理を組み込むのとまったく同じ。

コンパイル、実行して表示されているラベルをクリックすると……実際にラベルのテキストが変わりましたね。

次に、mxml全体から参照できるActionScritpのコードを埋め込んでみましょう。mxmlファイルにスクリプトを埋め込むには、Scriptタグを使います。たとえば、test()というメソッドを埋め込んでラベルクリック時に呼び出すなら、

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

	<mx:Script>

		public function test():void {
			label1.text='test called';
		}

	</mx:Script>

	<mx:Label id="label1" text="hellow" click="test()"/>

</mx:Application>

のようにします(実際には、スクリプト部分をXMLとして解釈されないデータとして扱うためCDATAブロックにした方が良い)。

また、スクリプトは外部ファイルとすることもできます。外部ファイルからスクリプト(標準の拡張子はas)を読み込んで埋め込むには、

<mx:Script source="test.as"/>

のように、source属性にActionScriptを記述したファイルを指定します。

以上、mxmlにActionScriptを埋め込む方法をいくつか見てきましたが、一言でまとめれば「XHTMLにJavaScriptを埋め込むのとほぼ同じ」ですね。ただし、コンパイルされて実行ファイルにリンクされるFLASH(swf)では、外部ファイルなどもすべて実行ファイルにまとめられるので、実行時にはasファイルは必要ありません。


創作プログラミングの街 > Flex(FLASH/AIR)実験室