Haxeを使って、PS VitaとFlash、両方で動くゲームを作れるか

すごく頑張ればできるかもしれないけど、色々と障害が多そう。特にパフォーマンス。

一度コードを書けば、それをFlashJavaScriptC#などにコンパイルできるHaxe (http://haxe.org/)を使えば、ブラウザ上はFlashで、モバイルデバイスとしてはPS Vitaで動くゲームが簡単に作れるんじゃないかと思って、ちょっとだけ試してみた。

Flashで作ったundermine (http://wonderfl.net/c/bv3w)っていうゲームをHaxeに移植して、そこからFlashC#コンパイルした。C#コンパイルできれば、PSM SDK (http://www.playstation.com/psm/developer/index_j.html)を使ってVita上で動作させることができる。

もちろんFlash固有のAPIや、PSM SDKでのグラフィックス描画などはHaxeでは吸収してくれないので、NME (http://www.haxenme.org/)のようなマルチプラットフォーム描画ライブラリを使うか、オレオレライブラリをターゲットプラットフォーム向けに書かないとダメ。Vita向けのHaxeライブラリはなさそうなので、今回はオレオレライブラリをごくごく部分的に書いた。

問題としては、HaxeC#向けコンパイラ (http://haxe.org/doc/targets/csharp)がまだ開発中でこなれてないのと、PSM SDKVitaVM実装がこなれてないの、ダブルこなれてない効果を受けたせいか、Vita上でパフォーマンスを出すのが難しそうというところ。

Haxeから生成されるC#は、Haxeがもともと一部動的型付けを許容する言語であるためか、フィールドやメソッドへのアクセスに一段よけいにメソッドがかまされることがあるように見える。inlineとかでバリバリにチューンすれば回避可能なのかもしれないけど、それを頑張るのも大変そう。

PSM SDKVita向け実装も、フォーラムでいくらなんでも遅すぎるじゃないのとツッコミ (http://community.eu.playstation.com/t5/General/Did-Sony-limited-CPU-speed-with-PSS-SDK/m-p/16027363#M1129)受けていて、結構パフォーマンスに気を使う必要がありそう。

なので現時点では、HaxeVitaFlash間のマルチプラットフォームを狙うのは難しそうかなあ。Haxe自体は気の利いたActionScriptという感じでなかなか書きやすい印象。マルチプラットフォームの恩恵を受けなくても、単にFlashを作るために使ってみるのはいいかも。FlashDevelopからも使いやすいし。

PSM SDKも、C#Vita向けゲームが簡単に書ける環境として、使っていて非常に楽しい。せっかく高機能なC#で書けるんだし、無理して他言語でマルチプラットフォーム対応を狙わなくてもいいかもね。