Windows Phone開発

Windows Phone向けにゲームを作ってみたので感想。
まずWindowsで動くように作ってからWindows Phoneに移植する形で開発した。色々あったライブラリ群をWindows Phone用に機能を限定して移植する作業も一緒に。ライブラリの大半のコードはそのままで動く、かと思いきや微妙に機能が削られている点が多くてなかなか面倒だった。
使えなかったものを挙げていくと、まずExpressionTreeのCompileメソッド。これはセキュリティとかを考えたら仕方が無いのかもしれないし、そもそも普通は使わない。
続いてデフォルト引数機能。何故か使えない。オーバーロード使ったほうがお行儀がいいってことなのか。
それからSortedDictionary。貧弱な環境のために少しでも速くしようと思って使おうとしたらなかった。非ジェネリックのコレクションクラスがごっそりなくなっていたのは分かるがこれは何故。
XNAでのプログラマブルシェーダ。これが使えないのが一番デカイ。でも仕方が無いんだろうな。
Enumの色々なメソッドも使えない。これはC#につい最近追加されたばかりの処理だった気がする。
ジェネリクスでの暗黙的な型変換も気が利かない。自前でキャストしてやればいいだけの話だが。
そしてさっきバグの原因になっていたのがfloatに大きい数を入れた時の扱い。floatで角度を扱うところにRandom.Nextの値を入れた所で判明。Windowsだとfloatに大きいintの値が入ってもなんとかしてくれるのだけど、WPだとNaNになってしまう。CPUのアーキテクチャとかそこらへんの問題なのだろうか。
使えないと言えば、Main関数も存在しない。XNAだとGameクラスのコンストラクタをエントリポイントとして扱っているようだ。それはいいのだが、Windows用のGame1クラスのソースコードをWP用プロジェクトに入れてビルドしたら何故かそのクラスを認識してくれなかった。
ファイル読み込みでFile.Openとか使うと怒られるのも忘れずに。TitleContainer使ってあげましょう。

と色々文句を垂れてみたけれどおおむね快適に開発できる。タッチ操作が面倒だと思っていたが、単純なシングルタッチ操作であればMouseクラスでLeftClickとPositionとして扱えるため何も書く必要がなかった。

作ったのはそのうちマーケットプレイスで公開する予定。ソースコードも公開するかも。