あいてぃーとふぼふ

実録☆WP7アプリケーション開発!(第7話)

ということで、前回までのような感じで実装を進めていくと、WP7のアプリケーションが作れます!かなりザックリですが、実装なんて十人十色です。べ、別に面倒くさくなった訳じゃないんだからねっξ〃Д〃)ξ ということで、今回からはアプリケーションの実装が完了したという前提で、アプリケーションをマーケットプレイスに登録するまでの過程を記載していきます。

マーケットプレイスとは?

WP7のアプリケーションを一般に公開するための唯一の方法は、マイクロソフトが運営している「MarketPlace(マーケットプレイス)」と呼ばれるサイトにアプリケーションを登録することです。しかしながら、マーケットプレイスにアプリケーションを登録するためには、必ず「AppHub(アップハブ)」と呼ばれるサイトからアプリケーションの審査を申請する必要があります。これによりマイクロソフトは、マーケットプレイスに危険なアプリや品質の悪いアプリケーションが登録されないようにしているわけです。要約すると、WP7のアプリは必ずAppHubの審査を経てマーケットプレイスに公開する必要があるということです。まぁ開発者の観点からしてみても、マイクロソフトにアプリケーションのテストをしてもらえるのであれば文句はありません。

MVVMによるゲーム開発

わたしが作成しているWP7アプリケーションの実装作業は概ね完了しました。バグ取りやパフォーマンスチューニングもほぼほぼ完了していますので、残りの作業はゲームバランスの調整とイラストの作成くらいです。このため、来週中にはAppHubの審査に出せそうです。

今回のアプリケーションは、左記の画像のように画面上部から落ちてくるキャラクターを、リズムに合わせてタイミングよく画面下部のアプリケーションボタンでクリックするというゲームです。プラットフォームにはSilverlightを利用しており、MVVMアーキテクチャにより実装しています。このため、ゲームロジック自体のステップ数はコメントも含めて、なんと200行未満で記述できています。自分でも、ゲーム開発とMVVMがここまで相性がいいとは驚きです。ちなみに、落下してくるキャラクターはObservableCollectionで制御し、メインとなるゲームロジックはすべてビューモデルに集約させています。なお、今回のアプリを実装した時にいくつかハマったポイントがありましたので、備忘録として以下に記載しておきますね。

PivotコントロールのSelectedIndexにバインドするとハマる

表題のとおりです。PivotコントロールのSelectedIndexにバインドすると画面表示時に例外が発生する場合があります。正確にいうと、バインディングしたソースの値が0以外の場合、確実に例外が発生します。たとえば今作成しているアプリでは、ストーリーモードとしてPivotコントロールによるコミックを実装しています。このため、最後に表示されたページのインデックスを分離ストレージに保存しておき、再度画面を表示したときにそのページを復元できるようにしています。この際、 PivotコントロールのSelectedIndexにビューモデルのプロパティをバインドしているわけですが、最後に表示したページが最初のページ以外(つまりインデックスが0以外)である場合、確実に例外が発生します。

このため、今回はこれを回避するようなビヘイビアを作成してその場を凌ぎました。どうやらLoadedイベントの発生以降であれば、SelectedIndexへのバインドも問題ないようでしたので、OnAttachedでバインディングを一旦廃棄して、Loadedで再構築しています。こんな感じで、バグの回避と未サポートの機能を補うためのビヘイビアやトリガーアクションが大量に出来上がりました(汗。

他にもハマりどころがたくさんあるので、隙をみて小出しにしていきたいと思ってるんだからねッξ〃Д〃)ξ