トップ » 技術記事 » クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる(5) - haXe で Flash クライアントを記述する

クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる(5) - haXe で Flash クライアントを記述する

タグ: Flash haXe

どうも、あかさたです。前回は、haXe と既存の JavaScript ソースコードを連携させる方法について紹介しました。今回は Flash クライアントを haXe を使って記述する方法を紹介します。

概要

前回の記事では、既存の JavaScript コードを活用する方法を紹介しました。haXe が既存の資産を無駄にすることなく段階的に導入することができることがわかりました。JavaScript の場合、「untyped」を使用しなくてはならなかったのですが、Flash の場合はもっと直感的に利用することができます。

本記事では「Flash の標準的なライブラリの利用方法」と「既存の ActionScript の再利用方法」の2点を紹介します。

Flash の標準的なライブラリの利用方法

Flash9(ActionScript3)に標準で準備されているライブラリを使うには、基本的には Flash と同じパッケージが haXe にも準備されているので、ActionScript を記述するサイト同様のクラスをインポートすれば動作させることができます。試しに「flash.text.TextField」を haXe から呼び出すコードを見てみましょう。

「flash.text.TextField の使用例」

import flash.Lib;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

class WithFlash {
    static function main() {
        var textField = new TextField();
        textField.text = "Create flash.text.TextField from haXe!";
        textField.autoSize = TextFieldAutoSize.LEFT;
        flash.Lib.current.addChild(textField);
    }
}

「flash.Lib.current」は haXe のルートとなる MovieClip(flash.display.MovieClip)です。ActionScript3 と haXe は構文が似ていることもあり、ほとんど同様のコードを記述できるようになっています。Flash9 の swf を生成するには、コンパイルオプションに、「-swf-version 9」をつける必要があります。haXe は標準では Flash8 のコードを出力するので、バージョンの指定が必要です。

Flex2 Framework を利用する場合は、haXe は mxml をコンパイルできるわけではないので、手間がかかります。ここでは詳述しませんが、Flex2 で作成した swf から haXe で作成した swf を呼び出す流れになります。haXe で Flex2 Framework を利用するために、Flex 用の haXe ライブラリをインストールする必要もあります。詳細は本家のチュートリアルを参照してください。

既存の ActionScript の再利用方法

さて、すでに ActionScript3 のコード資産を抱えている場合、haXe でもそれらを活用したいと思うはずです。haXe ではそうしたケースの対処法も準備されています。haXe のコードから AS3 のコードを読み出すには、以下の手順を踏む必要があります。

  1. AS3 をコンパイルした swf ファイルを準備する
  2. swf ファイルから haXe のヘッダを生成する
  3. haXe のヘッダをインポートした haXe コードを作成する
  4. コンパイルの設定ファイルに swf ファイルのを含めるように設定する

まず、以下のコードを含む swf ファイルを準備しましょう。ここでは「AS3MyClass.swf」というファイル名で進めます。

「ActionScript3 のソースコード」

package  {
    public class AS3MyClass {
        public function getMessage() : String {
            return "Message from AS3!";
        }
    }
}

次に haXe からコードを呼び出すために、swf ファイルからヘッダファイルを生成します。以下のコマンドを実行してください。

「haXe 用ヘッダファイルを出力するコマンド」

haxe --gen-hx-classes AS3MyClass.swf

次に、haXe のコードを記述します。AS3 で定義したクラスを import して、そのクラスを生成してメソッドを呼び出してみます。

「haXe コード」

import AS3MyClass;

class WithFlash {
    static function main() {
        var myClass = new AS3MyClass();
        trace("AS3MyClass.getMessage(): " + myClass.getMessage());
    }
}

このコードを実行するには、以下のような設定ファイル(hxml)を作成してください。

「コンパイル用の設定ファイル」

-swf withFlash.swf
-swf-version 9
-swf-lib AS3MyClass.swf
-main WithFlash

以下、実行結果です。

実行結果

「実行結果」

haXe と ActionScript3 を連携させるためには、ヘッダファイルを出力しなくてはなりません。とはいえ、コマンド一つでできることですから、「untyped」構文を使用せずにすむ分、haXe は JavaScript よりも Flash との相性がよいことがわかります。

また、haXe は ActionScript3 のコードジェネレータも備えているため、万が一 haXe が使えないような状態に陥ったとしても ActionScript3 に移行することもできます。コードジェネレータを呼び出すには「haxe -as3 as3_src -main ClassName」というようなコマンドを実行してください。

まとめ

以上、haXe を使って Flash クライアントを記述する場合と haXe と ActionScript3 の連携方法でした。JavaScript との連携と同様、haXe は既存の資産を生かしながら段階的に haXe を採用できるように配慮されていることがわかります。

一つ残念なことは、最新版(1.18)でも、ActionScript3 と haXe の連携はまだ安定していないことです。というよりは、Flash9 の生成がまだ安定していません。本記事執筆中も一つ前の 1.17 を利用していたら Flash が固まる現象が起こりました。(最新版の 1.18 にしたらその現象は発生しなくなりましたが。)もっとも、Flash8 は安定しているようなので、当面は Flash8 にして 9 は様子見といったところかもしれません。

次回は、IDE 事情など haXe の周辺状況を紹介したいと思います。それでは!

Series Navigation

執筆者紹介

あかさた

あかさた

未踏(2006年度下期)でWeb上で動作するモデリング環境 Kodougu の開発をしてました。こちらでもブログを書いています。

TrackBack URL :