Sunflat のブログ

ソフトウェア開発についての話題が多いかも

HaxeでJavaScriptゲームを作ってみた

最近、JSXやHaxeなどのJavaScriptを生成できる言語が流行っているみたいなので、Haxeを少し勉強してみた。
試しに、以前OCaml(ocamljs)で書いたシューティングゲームを、Haxeで書き直してみた。

Haxeの特徴と使い方

Haxeのインストール

  • Mac用のものもhomebrewにあったけど、現時点のバージョンではhaxelibがエラーが出て動かなかった。
    • 追記:@choplin さんが 解決法 を書かれています
  • 結局、Ubuntu 12.04 に入れた

実行したコマンド:

sudo add-apt-repository ppa:eyecreate/haxe
sudo apt-get update
sudo apt-get install haxe libneko0

html5ライブラリのインストール

  • haxelibをセットアップする前に、ライブラリ用のディレクトリ(/usr/lib/haxe/lib)を作っておく必要あり

実行したコマンド:

sudo mkdir -p /usr/lib/haxe/lib
sudo haxelib setup
sudo haxelib install html5

コンパイル方法

haxe -lib html5 -js game1.js -main Game1

または、ビルドファイルを使って: haxe compile.hxml

感想

  • 良さげな点
    • ActionScript3やJavaに近い文法なので、似たような感覚で書ける
    • 静的型チェックがあるので、メソッド名の間違いとかのエラーがコンパイル時に分かる
    • 生成されたJavaScriptのコードが読みやすい。インデントもされていて、そのままデバッグに使える
    • 型推論が強力なので、メソッドの引数/返り値の型を多くの場合省略出来る
    • インライン展開もできる
    • 他の言語(AS3/C++/PHP/C#)も出力できるらしい。Java出力も現在開発中らしいので、Androidアプリ開発にも使えそうで期待。
  • 気になった点(単に勉強不足なだけかも)
    • 整数の割り算や、整数用のmin, max, abs関数が、標準で用意されていない???
    • 無名クラスが書けないので、haxe.Timerを継承したクラスを作るために、別の場所に名前付きクラスを書く必要があった
    • インスタンスフィールドの宣言の場所に初期値を書けない。コンストラクタで代入する必要あり