Haxe+OpenFL+Box2Dについていろいろ

先月末くらいから Haxe + OpenFL + Box2D でよくわからないものを作ってみたりしました。 そのときに思ったことをつらつらと書いてみます。


  • flash ターゲットはもちろん、windowsmac ターゲットも普通に動く
  • 画像、音、キーボード、マウスは完璧
  • TextField がかなり怪しい
    • フォントサイズ指定しても、環境によって大きさが違って崩れる
    • ttfフォント指定してもだめだし、同じフォントなのに高さが違ったりする
    • wrapping も挙動不審
    • mobile系のターゲットだとそもそも表示されないこともある
  • Asset がすこし不安
    • 動作自体は全く問題ないんですが、いざ配布するというときに中身が丸見えでそれに対応する方法がなさそう
    • ネイティブのファイルIOがあるので、それを使って自前で用意する必要がありそう


  • iOSターゲットが割と動いて楽しい
  • ただしビルドとデバッグがひたすら苦痛
    • シミュレータならそうでもない
    • そもそもC++コンパイルが遅すぎる
    • 1からコンパイルすると4年前のマシンで10分ほどかかる
  • マルチタッチも簡単
  • Box2D が悪いのかひたすらメモリを食いつぶすバグが出来て困ってます
    • Instruments とか使ってみたけどC++のコードを元に情報が表示されるので、なにがなんだかわからない

  • OpenFL版Box2Dは、本家をどれくらい追いかけられてるのかが不明
    • 確か本家の新しいバージョンだとBodyからContactが取れなかったはずだけど、OpenFL版は取れる
  • 困ったらソース読みましょう
    • openfl/box2d
    • samples/TestBed は非常に役に立ちますが、なかなかエグい実装
  • 最初は HaxeFlixel も使っていたんですが、それについていた Nape という物理エンジンの機能が少なすぎてやりたいことができなかったため、HaxeFlixel を諦めて OpenFL + Box2D という形になりました
    • OpenFL + HaxeFlixel + Box2D だと世界が3つになって管理が非常に難しい
    • OpenFL + Box2D だと2つの世界の橋渡しをするだけなのでまだ楽

  • Mac で開発する場合は Atom を入れるとよさげ
  • Haxe 向けのパッケージが充実
  • lint と autocomplete を動かすためには、プロジェクトディレクトリに hoge.hxml が必要
    • openfl display flash > hoge.hxml みたいな感じにすると生成できます
    • atom の tree view で hoge.hxml を右クリックすると Set as active HXML file という項目があるはずなので、それをクリックするとよい

  • 【完全な余談】
  • Contributors | Box2D にいる "Motokimi Kuzume" さんが気になる
    • ベアルファレス というプレステのゲームの開発チームの人らしい
    • そのゲームのシナリオとかを書いていて、パネルでポンの音楽スタッフでもある 葛目将也 さんはご兄弟なんですかね?

2D でマルチプラットフォームなゲームを作りたければ Haxe + OpenFL は割とありな選択肢だと思います。 特にWindows + Mac + Linux みたいな感じだったらソース書き換える必要すらないかと。

ガリガリ気張って書かなければいけないこともなく、かといって果てしないブラックボックスということもないこのバランス感が好きです。