SOLUTIONモトスクウェアソリューションは、システム開発やイラスト制作などのIT関連業務を手掛ける個人事業です。Day(こくぶんさん命名)!わたし以外のセッションでは、未確認飛行Cでおなじみの岩永さんに、スマートフォン第一人者のえいるさん、そしてWindowsPhone7の大御所Microsoftの高橋忍さんが登壇されます。そんな中でお話しさせていただくのは非常に恐縮なのですが、ともあれWP7の最高糖度な一日になること請け合いです!題材はSL+XNAでお話しします!わたしのセッションでは、WindowsPhone7.1の新機能である「SilverlightとXNAの相互運用」についてお話しさせていただきます。なんだか難しそうな感じのこの機能ですが、じつはとても簡単に使用することが可能なんです!ということで、SL+XNAの概要とその実装方法などをみなさんと共有できればうれしいな~と思います♪ちなみに本セッションでは、SilverlightやXNAの知識は別段必要ありません。お伝えしたいこと!LTでもお話しします!なんと、今回はLT(ライトニングトーク)でもお話しさせていただきます(汗。いやむしろ、私にとってはこちらが本番でして...夏コミの宣伝をさせていただきたいと思います。#61なお当日は、会場にて各セッションのスライドなどが配布される予定ですので、ノートパソコン等を持参されることをお勧めします。WPSDK昨日お話ししたWindowsPhone7に関する「ジューシー」なサプライズ...、それは「ベータ版Mangoの配布」と「開発環境のバージョンアップ」の2つのビックニュースでした!ベータ版Mangoの配布!AppHubに登録しており、かつ既に実機を持っている開発者に対して、WindowsPhone7の次期バージョンアップ版であるMangoのベータ版が配布されることが決定されました。...確かにうれしいのですが、その際に秘密保持へ同意する必要がありまして、これによるとスクリーンショットなどの情報を第三者に公開することはできないようです。秘密保持が変更されてスクリーンショットはOKになりましたです!≧∀≦)ノもっとも、今回のMangoは日本語表示もできないようですので、ある意味ではエミュレータの方が多機能といえるかもしれません。このため、技術的な新機能やパフォーマンスの検証といった、本当に開発者向けのものとなりそうです。対象となる開発者には別途アップデート手順を記載したメールが送付されてくるとのことですので、とりあえず気長に待ちましょう。開発環境のバージョンアップ!WP7アプリの開発環境がβ1からβ2にバージョンアップされました。...この期に及んで「β2」とかバージョン刻んでくるあたりに一抹の不安を覚えますが、β1のクオリティが今ひとつでしたのでこれはこれで安心できるかもです(汗。SDK(WPSDK)」に変更されました。リリースノートを見る限りあまり多くの変更点はありませんが、小さな変更や改善がチラホラ見受けられましたので、以下に簡単なレビューを記載します。最新のWPSDKのダウンロードはこちらからどうぞ。Beta2一部のプロジェクトテンプレート名が変更!一部プロジェクトテンプレートの名称が変更されています。生成されるプロジェクトの内容に違いはないようです。以下の後者に至っては作成される既定のプロジェクト名まで昔のままです。そこも直しておいてほしかったにゃ。Ammalysis」を利用することはできませんでした。今回のβ2からはそれが可能になりました。実のところ、SL+XNAの肝であるUIElementRenderクラスは、使い方を誤ると簡単にメモリリークしてしまいますので、この対応は非常に嬉しい限りです。このように、β1では一部できなかったことがβ2で平然とできるようになっている...という感じの変更が多いように感じます。他にも、キーボードの種類が追加されていていて、日本語でのQWARTY入力が可能になっていたりします。タスクの切り替え機能などは相変わらず使用できません。今回のβ2でも一部機能は未実装のままですが、β1で遭遇した不具合らしき現象もすべて解決されていますので、これなら開発にも十分耐えられるレベルに仕上がっていると思います。まとめ!ということで、このタイミングでようやっとMangoに関する表立った動きが出てきました。̄)ななふぉさんに捕捉していただきました!2011年06月29日カテゴリー:技術情報タグ:WindowsPhoneなななんと!WindowsPhone7の情報発信基地であるななふぉさんに「MetroGnome」を紹介していただいちゃいました~!(。音ゲー「MetroGnome」ななふぉさんといえば、いま日本で最もWindowsPhone7の情報を扱っているブログサイトでして、その更新頻度はカラータイマーの如しです。そんなななふぉさんによると、明日6月30日の深夜には、なんらかの「ジューシー」なサプライズがあるらしいとのことですよ!≧∀≦)ノ「ジューシー」なサプライズとは...?「ジューシー」ということは、おそらくWP7の次期アップデートである「Mango」のことで間違いなさそうですが、問題はその内容です。「開発者向けに実機Romの配布が正式に決定した」とか「実機Romの配布日を発表する」といった内容だったら非常にうれしいところですね。Division)のBillCoxさんですので、その可能性は大いに期待できそうです。ちなみにMangoでは、待ちに待った日本語対応が含まれています。メトロ先週末に、WindowsPhone7用のゲームアプリケーション「MetroGnome」をマーケットプレイスに公開しました。反応がうれしい~♪アプリケーション公開後は、Twitterやマーケットプレイスなどを通じて、たくさんの方々にアプリをダウンロードしていただくことができました。この場を借りて、プレイしていただいた皆様に改めてお礼申し上げますです~!(T△T)その後も、アプリケーションの感想や改善案など、皆様からいろいろな反応をいただくことができて本当に嬉しい限りです!IT業界におけるシステム開発では、開発者がエンドユーザと直接触れ合える機会は比較的少ないと思うのですが、WP7アプリケーション開発では、マーケットプレイスを通じてエンドユーザから直接反応をいただくことができちゃいます。MetroGnomeをやってみたマーケットプレイスからの反応もうれしい~♪マーケットプレイスには、エンドユーザがアプリケーションの評価や感想などを投稿・参照することのできる仕組みが用意されています。今回のアプリケーションは、日本のマーケットプレイスが未開設のため英語圏のマーケットプレイスに公開したのですが...、予想に反して海外の方々からも多数の評価やコメントをいただくことができました~(つД`)もう外国人さん大好きです!なお、これらの評価や感想はWP7から投稿・参照することが可能なのですが、サイトを通じて参照することもできます。「WP7applist」というサイトで「MetroGnome」を検索すると、マーケットプレイスからは参照することのできないアプリケーションの順位などまで確認することができるみたいです。「MetroGnome」は、現在約20000あるアプリの内のおよそ1700番くらいみたいです。...って、予想外に順位が高くてビックリです!∑(*゚д゚*)エンドユーザさんがいるからこそです♪WP7アプリをマーケットプレイスに公開することにより、ひさしく忘れていた「モノづくりの喜び」を実感することができました。それもこれも全部、アプリを利用していただいた人たちのおかげです!仕事に追われるとついつい忘れてしまいがちですが...、そんな気持ちを思い出させてくれるのも、WP7アプリ開発の魅了かもです。SOLUTION(モトスクウェアソリューション)は、WindowsPhone7用のゲームアプリケーションとして「MetroGnome(メトロノーム)」を開発しました。英語圏のマーケットプレイスにおきまして無料で公開しておりますので、WP7をお持ちの方は是非ともプレイしていただければ幸いです~♪以下に、アプリケーションの簡単な概要を記載しましたので、参照にしていただけるとうれしいです!≧∀≦)ゲーム内容についてこのアプリケーションは、音楽にあわせてボタンを押していくリズムゲームです。画面上方から落下してくる「アップル」だったり「ドロイド」てきな”なにか”を、画面下部の丸ボタンに重なるタイミングでタップしてください。その”なにか”は、BGMのリズムに合わせてどんどん落下してきますので、タイミングよく”ツブして”いきましょう!ただし、BGMが終わるまでに画面右上のMarketShareを70%以上にできないとゲームオーバーとなりますのでご注意ください。モードについてモードは「ストーリー」と「アタック」の二種類をご用意しています。ストーリーモードでは、平和なスマフォランドに起きたにんげんたちの反乱を、スマフォのお姫様「メトロ」がなんとかする物語です。「アップル」と「ドロイド」にそそのかされてしまったというにんげんたちを救うため、メトロはアップルとドロイドに戦いを挑みます!すべてのてきをたおして、スマフォランドに平和を取り戻しましょう!また、ストーリーモードでクリアした楽曲は、アタックモードでいつでもプレイすることが可能です。練習して高得点を狙いましょう!素材について本アプリケーションで使用しているフォントとBGMは、以下のサイト様(順不同)で公開されている素晴らしいフリー素材を使用させていただきました。この場を借りて改めてお礼申し上げます。Trial&Error様さいごに本アプリケーションは、WindowsPhone7用アプリケーションのテストベットとして作成しました。このため、不具合などにより多々ご迷惑をお掛けするかとは存じますが、何卒ご容赦くださいますようお願い申し上げます...と、先に謝っておきます。マーケットプレイスに公開されるアプリケーションは、日本にお住いの方々はもちろん、海外の皆さんにもご利用いただくことが可能です。このため、外国の人たちが日本の素晴らしいフリー素材を活用したアプリで楽しんでくれるかも?...なんて考えるだけで、なんだかうれしいですよね~♪なお、アプリケーションのインストールは右記のリンク、もしくはマーケットプレイスの[Game]-[Music]カテゴリ、もしくは検索から実施することが可能です。いうことで、「MetroGnome」をひとつよろしくお願い致します~(*≧∀≦)ノ実録☆WP7アプリケーション開発!(第9話)2011年06月23日カテゴリー:技術情報タグ:WindowsPhone突然ですが、この連載もいよいよ最終回(打ち切り)!今回は、作成したWP7アプリケーションをAppHubの審査に申請して公開する手順を記載します。AppHubの申請手順AppHubに申請を依頼する手順は大きく5つに分類されます。各手順ごとに順を追ってみていきましょう!手順1アプリケーションの名前やバージョン情報の設定、およびXAPファイルのアップロードを実施します。現状では、まだ日本のマーケットプレイスが開設されていないため、「既定の言語」には”英語(インターナショナル)”を指定しておくとよいでしょう。「バージョン」には”0.1”など”1.0′′未満の値を指定することも可能です。「アプリケーションパッケージ」でアップロードするXAPファイルは、必ずReleaseビルドしたXAPファイルを指定します。その他の「開発者メモ」や「テスターノート」、「技術的な例外適用を必要とする」といった項目は、特別なテスト手順がある場合やテスターさんと連絡を取りたい場合に利用するとよさそうです。今回は、これらの項目にWP7アプリ(ゲーム)のプレイ方法などを一切記載しませんでした。手順2アプリケーションの説明やカテゴリ、キーワードなどを指定します。気を付けるべきポイントは「詳細説明」の記載方法です。前述のとおり今回は”英語(インターナショナル)”なマーケットプレイスにアプリを公開するため、説明文は英語で記載する必要があります。今回のアプリでは日本人をメインターゲットとして利用していますので、日本語の説明文も併せて記載する必要があります。UIは日本語表記のみである旨を英語で記載する必要があります。この3つの条件を満たすことにより、英語なマーケットプレイスでも日本人向けのアプリを公開することが可能となります。その他の項目はよくわからないのでデフォルトのままにしましたが、問題なく審査を通過することができました。手順3各種画像をアップロードします。マーケットプレイス用の画像を「173×173」「99×99」「200×200」のスリーサイズで指定します。この際に指定する画像は、3つとも同一の絵柄とし、かつXAPファイル内の画像「ApplicationIcon」や「Background」と酷似した内容とする必要があります。「背景の画像」はオプションですが、アプリケーションがピックアップされた際にマーケットプレイスのトップ画面で利用する背景画像を「1000×800」で指定します。「スクリーンショット」には、文字通りアプリケーションのスクリーンショットを「480×800」で最大8枚まで指定することが可能です。本手順で指定する画像は、すべて透明色を利用していないPNG画像を指定する必要がありますので注意してください!手順4試供版の有無や金額などを指定します。今回ぼアプリは無償としますので、「アプリケーションの価格」には”$0.00”を指定します。アプリを有料とする場合は口座の情報やらなんやらをあらかじめ海外のマイクロソフトに提出しておく必要があるようです。これは非常に面倒くさそうですので、有料なアプリを公開するのは日本のマーケットプレイスが開設されてからでも遅くはないんじゃないかな~と思います。手順5最後に「申請して認定を依頼」ボタンを押下すれば作業が完了します。お疲れ様でした~♪なお、申請完了後に任意のタイミングでアプリを公開したい場合は「認定をパスした後~」にチェックを入れればOKです。その場合は、公開を指示してからアプリケーションが公開されるまでに1日近くかかる場合もありますのでご注意ください。審査期間はどのくらい?今回作成したWP7アプリの場合、審査期間にはおよそ3日を要しました。審査期間中は一日ごとに「変更済み」の日付が更新されるようですので、審査プロセスがきちんと実施されていることを認識することが可能です。入試の結果発表を待つ学生たちのような気分で、ジ~ッと審査結果を待ちましょう。ホントは全12話の予定でした...じつはこの連載...、本当は全12話の予定でした。当初の予定では、10話でAppHubの申請が却下されたときの内容を公開し、11話でアプリの修正とAppHubへの再申請を実施、そして12話でアプリ公開&大団円!となるハズでした。...でしたのですが、8話でクソマジメに審査規約を読み込んでしまったせいか、なんとAppHubの審査に一発で通ってしまいました。べつにうれしくなんかないんだからねッξ〃Д〃)ξ...ということで総括!今回作成したアプリケーション「MetroGnome」では、コンセプトの立案から実装完了までに約2週間、審査期間をあわせても実に3週間足らず(しかも片手間)で公開まで漕ぎ着けることができました!このように、非常に短期間で開発できるところもWP7アプリの魅力です♪ということで、無事アプリケーションの公開と相成りましたので、今回をもちまして本連載は一旦終了とさせていただきます~。却下(リジェクト)された時の手順などを記載することができなくなってしまいましたが...一発で申請に通った事例も珍しいとは思いますので、これはこれでアリなのかなと。したような流れで、WP7アプリの作成と公開が可能となります。Phone」を紐解いてみましょう。...規約は主に以下の7章で構成されています。文章多めですが、くじけずに順を追ってみていきましょう。Requirementsこの章では、アプリケーションが審査を経てマーケットプレイスに公開されるまでのプロセスが記載されています。...みたいなことが記載されています。...みたいなことも記載されています。図解もされていますので、一度眺めておけばよいレベルの規約だと思います。Policiesこの章では、主にアプリケーションが満たすべき要件に関する規約が記載されています。50MB以上のデータをダウンロードするような場合は、パケット代とかの問題もあるからちゃんとユーザに通知してよね!とか、位置情報を取得する場合はちゃんとマイクロソフト謹製のAPIを使ってよね!みたいなことが記載されています。ほかにも、トライアル版を提供するならフル版の機能や品質が十分わかるものにしてよね!といった内容や、プッシュ通知を使うアプリケーションで留意すべき項目などが記載されています。実装よりも要件レベルの内容ですので、設計段階で目を通しておきたい規約となっています。Policiesこの章では、主にアプリケーションの商標や表現に関する規約が記載されています。許可を取ってくださいね~、といった内容が記載されています。過度に暴力的だったり直接的にエッチな内容は禁止されています。Requirementsこの章では、アプリケーションの実体となるXAPファイルや、審査を申請する際の規約が記載されています。重要なことが記載されていますので、各節ごとに内容を見ていきましょう。Validationアプリケーションの本体となるXAPファイルに関する内容が記載されています。Blendでプロジェクトを作成していればすべて満たされているはずの規約が記載されています。XAPファイルの最大サイズは255MBまでという点には留意しておきたいところです。Validationソースコードに関する規約が記載されています。COMの呼出しやP/Invokeの利用は禁止されていたり、XAPファイルはReleaseビルドで生成する必要があります。「System.Windows.Controls」名前空間に属するクラスのメソッドを利用している場合は、「Microsoft.Xna.Framework.Game」と「Microsoft.Xna.Framework.Graphics」アセンブリを利用してはいけないとのことです。DetectionCapabilitiesに関する内容が記載されています。Capabilitiesとは、そのアプリケーションでどんな機能を利用するかをあらかじめ宣言しておく項目であり、「WMAppManifest.xml」に定義します。このため、アプリケーションで利用する機能はちゃんと宣言して、利用しない機能の宣言はしっかりと削除しておきましょうといった内容が記載されています。Tool」を利用すると便利だそうですが、最近はAppHubにXAPをアップロードする際に自動で判定されるそうです。Capabilitiesに関してはあまり気にしなくて良いかもしれません。ValidationアプリケーションのUIに使用する言語に関する内容が記載されています。UIに使用する言語は、マーケットプレイスでターゲットとして申請した国の言語をちゃんと利用しましょうとのことです。当たり前といえば当たり前ですよね。Iconography審査後にマーケットプレイスで利用する画像に関する内容が記載されています。200」の3種類のサイズの画像を用意する必要があります。この画像は、4.1節で作成した「ApplicationIcon.png」や「Background.png」に酷似した画像である必要があります。800」の画像を用意するとのことですが、これは任意だそうです。これらの画像はすべて透明色を利用していないPNG形式である必要があります。800」のサイズで複数用意しましょうとのことです。これも、透明色を利用していないPNG形式である必要があります。Requirementsこの章では、開発者にとって最も重要な規約が記載されています。これらの規約を意識して、しっかりと実装を行いましょう!各節ごとに内容を見ていきます。Reliability5.1.1項では、アプリケーションは複数の端末で同じように起動しなければいけないと記載されています。現状では、端末の画面サイズは1つに統一されていますので、この規約をあまり意識する必要はないかもしれません。挙げるなら、端末の性能に依存したロジックの組み方をしないように気を付けるくらいでしょう。5.1.2.項では、アプリケーションは予期せぬエラーで突然終了していはいけないと記載されています。...と記載されています。落ちるにしても、きちんとわかりやすいエラーメッセージを表示すれば問題ないそうです。メッセージの内容があまりに汎用的過ぎる場合はやはりNGにするそうです。5.1.3項では、アプリケーションは3秒以上固まってはいけないと記載されています。俗にいう3秒ルールです(違。回避できない場合は、プログレスバーとかビジーインジケータを表示して、ちゃんと動いていることをアピールできれば問題ないそうです。Management5.2.1項では、起動後5秒以内に最初の画面が表示されることと記載されています。基本的に「SplashScreenImage.jpg」を利用していれば問題なさそうですが、それでも起動後20秒以内にはアプリケーションが操作できる必要があるとのことです。俗にいう20秒ルールです(違。5.2.2項では、アプリケーションを終了させた後に速攻で再度起動した場合においても、上記の5.2.1項を満たしている必要があるとのことです。5.2.3項では、...あれ?この項は消されたのかな?5.2.4項では、バックボタンに関する規約がこれでもかと記載されています。バックボタンを押したら必ず前の画面に戻る必要があるんだからね!とか、最初の画面でバックボタンを押したらアプリケーションを終了させてよね!とか、コンテキストメニューとかダイアログを表示している時にバックボタンを押したら前の画面に戻らずにそれらのウインドウを閉じるだけにしなさいよね!とか、ゲームをプレイしている時にバックボタンを押した場合はポーズ状態にするだけでいいんだからねっ!とか。バックボタンまじ天使。5.2.5項では、メモリの使用量に関する規約が記載されています。基本的にDeviceStatusクラスのApplicationPeakMemoryUsage値...つまりメモリ使用量が90MBを超えないことが条件だそうです。5.2.6項では、トライアル版に関する規約が記載されています。トライアル版であるかどうかを判定するAPIはあまり頻繁に呼び出さないでよね!だそうです。Functionality5.3.1項では、とにかくアプリケーションは電話の邪魔をするなということが記載されています。アプリケーションを実行しているときに電話がかかってきてもすぐに出られるようにだとか、アプリケーションを終了させた後ですぐに電話がかけられること、みたいな内容です。電話が使えなきゃ電話じゃないじゃない、ということみたいです。5.3.2項は、5.3.1項のSMSもしくはMMSバージョンです。5.3.3項は、電話がかかってきても勝手にアプリケーションを終了させないでよね!ということが記載されています。電話がかかってきた後でどうするかはあくまでユーザが決める、ということですね。Security5.4.1項は、アプリケーションがウイルスなど悪意のあるものではないことと規約されています。5.4.2項は、MSILがタイプセーフであることが規約されています。MSILとは、C#で記載したプログラムをコンパイルした後に生成される低レベルな言語のことであり、この状態でアンセーフなコードにならないことを規約しています。C#でプログラミングする際に明示的にアンセーフモードなどを利用しない限り問題はないはずです。Validation5.5.1項は、マーケットプレイスの説明文に利用する言語を規約しています。マーケットプレイスでターゲットとする国の言語を利用しなさいよね!とのことです。5.5.2項は、UIの文字とか画像などが、テーマの背景色(ダークもしくはライト)によって見えなくなってしまわないことを規約しています。BlendのDeviceタブを利用して、しっかりとテーマごとの見え方を確認する必要があるということですね。Phone」を積極的に利用することも非常に有効です。Informationこの節では、アプリケーション名やバージョン情報や連絡先などを、簡単に見つけられる場所に記載することを規約しています。...ということらしいです。Typesこの章では、アプリケーションの種類に応じて追加で満たすべき規約について記載されています。ここも各節ごとにさらりと見てみましょう。Application位置情報を利用するアプリケーションの規約が記載されています。ユーザが位置情報センサーを無効にしてもアプリ落ちんなよ?といったことや、位置情報が取得できなくなった旨をちゃんとユーザに通知しましょう、みたいな内容です。Applicationプッシュ通知を利用するアプリケーションの規約が記載されています。そのアプリケーションでプッシュ通知を利用するかどうかは独自の設定画面から設定できるようにしておいてくださいね、みたいな内容です。ScreenApplicationIdleDetectionModeをDisabledに設定した場合の規約が記載されています。この機能を無効化すると、画面がロックされててもバックグラウンドでアプリケーションを動作させ続けることが可能なのですが、それをする場合はちゃんとバッテリー消費量が最小になるような仕組みをしっかり実装しておいてよね!みたいな内容が事細かに記載されています。UI更新やタイマーの類は一切止めてよね!とか、その状態でバッテリーが120時間以上持続するようにしてよね!みたいな内容です。是が非でもApplicationIdleDetectionModeを使いたくなくなる規約です。Applicationハブに連携するアプリケーションの規約が記載されています。アプリケーションは必ずハブのマーキーリストに表示されるようにしてねとか、履歴リストとか新着リストと必ず同期させてねといった内容がズラリと並んでいます。...てことらしいです。Mediaハブに連携しないアプリケーションでBGMとかを使う場合の規約が記載されています。ボリュームとかは独自の設定画面から変更できるようにしておいてね!といった内容や、音楽を再生している時にアプリケーションを起動した場合は、再生中の音楽を停止してBGMを流していいかどうかをユーザに確認してよね?といった内容が記載されています。Extras写真を加工するアプリケーションの規約が記載されています。写真を選択しないでアプリを起動した場合は、PhotoChooserで選択画面をちゃんと表示してよね!とか。あと、写真を加工するアプリケーションなら当然「Extras.xml」は含まれているんでしょうね?とか記載されていますが、WP7.1では「Extras.xml」は不要になりますのでご注意ください。Applications写真を共有するアプリケーションの規約が記載されています。6.6節と同様の規約で、やはり写真を選択しないでアプリを起動した場合は、PhotoChooserで選択画面をちゃんと表示してよね!みたいな内容が記載されています。Historyこの章はそのものズバリ更新履歴ですね。規約が変更された場合に、その箇所と内容が追記されていきます。...ということで一気に紐解いてみましたが...。読んでみるとわかるとおり、その大半がユーザビリティに関する規約だったりします。実録☆WP7アプリケーション開発!(第7話)2011年06月17日カテゴリー:技術情報タグ:WindowsPhoneということで、前回までのような感じで実装を進めていくと、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で再構築しています。こんな感じで、バグの回避と未サポートの機能を補うためのビヘイビアやトリガーアクションが大量に出来上がりました(汗。実録☆WP7アプリケーション開発!(第6話)2011年06月14日カテゴリー:技術情報タグ:WindowsPhone今回からはWP7アプリに関する画面の実装に着手します!手始めにまずは「ABOUT」画面を作成しましょう!ビューモデルの作成まずはビューモデルを作成します。ビューモデルというのは、「ビュー(画面)」と「モデル(データ)」の橋渡しをするためのクラスです。本来ならば、前回作成したようなデータモデルを「モデル」とするのが良いお手本なのですが、今回作成する「ABOUT」画面はモジュールのバージョンや著作権情報などを表示する画面です。このため今回の「ABOUT」画面において「モデル」とする情報は、アセンブリの情報を記述するための「AssemblyInfo.cs」ファイルに記載された内容とします。このファイルから情報を取得できれば「ABOUT」画面にはもってこいですよね!ということで、「AssemblyInfo.cs」の情報を取得するための方法を含め、ビューモデル「AboutPageViewModel」はこんな感じで実装できそうです。今回作成したビューモデルは、いわば読み取り専用のビューモデルです。このため、ビューとビューモデル間において相互にデータをやり取りしたり、ビューからビューモデルの処理(コンストラクタ以外)を呼び出したりすることはありません。これらを行いたい場合は、「INotifyPropertyChanged」や「ICommand」などを利用したりする必要がありますのでご注意ください。最初はカンタンなビューモデルから理解するほうがカンタンです。ビューの作成ビューは適当にコントロールを配置しましょう!ポトぺタでもいいですが、パネルやリソースを積極的に活用すると統一性があって保守しやすい画面になります。この辺りはVSを使用できる人であれば説明不要ですよね(汗。いうことで今回は、せっかくビューモデルを先行して作成しましたので、このビューモデルを利用してビューの調整やバインディングを作成していきましょう。Blend」で表示すると、画面右端とかそのへんに「Data」タブが表示されていると思います。Class」メニューを選択すると、ダイアログが開いてビューモデルを選択することができます。この一覧から先程作成したビューモデルを迷わず選択することにより、「Data」タブの中に「AboutPageViewModelSampleData」みたいな項目が作成されます。じつはこれ、ExpressionBlendがビューモデルをもとに自動生成してくれたサンプルデータです。「Data」タブ内の「AboutPageViewModel」をビューにドラッグアンドドロップすると、このサンプルデータ(ビューモデル)とビューが関連付けられるため、これによりサンプルデータに基づいたビューの実装や調整が可能になります。ちなみにこの状態であれば、データバインドの作成もリストからビューモデルのプロパティを選択するだけで簡単に作成することが可能です。上記の手順では、あくまでビューとビューモデルのサンプルデータが関連付いているにすぎません。このため、ビューと実際のビューモデルを関連付けるためには、例えばビューのXMALの先頭で上記のように記述することで実現することが可能です。実録☆WP7アプリケーション開発!(第5話)2011年06月13日カテゴリー:技術情報タグ:WindowsPhone今回はデータモデルを作成していきたいと思います。設計がしっかりできていればモデルの実装はそれほど難しくありません。データモデルの実装WP7の開発環境に付属してる無償版のVSには、データモデルをデザインするためのツールは付属していません。このため、設計図をもとにしてクラスをひとつひとつ手動で作成する必要があります。非常に面倒ですが...開発環境がタダなので文句は言えませんね。実際の実装イメージは左記のとおりです。こんな感じでデータモデルを作成していきます。各プロパティに付与している属性の意味はのちほどご説明します。シリアライズとデシリアライズデータモデルは、その名の通りデータを保持するオブジェクトです。このため、分離領域やXMLファイルなど、様々な媒体から取得ないしは保存することを前提とします。今回作成するゲームでも、画面上方から落下してくる音符のタイミングやボタンのインデックス、そのほか楽曲の情報などはXMLファイルから読み込むようにしようと思います。このため、XMLファイルをクラスオブジェクトに変換(デシリアライズ)できるような仕組みが必要となります。このXMLファイルはあらかじめ作成しておく必要があるわけですが、手動でチマチマ作成するのは困難です。そこで、実際にゲームをプレイしたデータ(ボタンをおしたタイミングなど)を利用してXMLファイルを作成することができれば、開発工数をグッと短縮できそうです。この場合は逆に、クラスオブジェクトをXMLファイルに変換(シリアライズ)できる必要があるわけです。これらを実現するためには「DataContractSerializer」クラスを利用すると便利です!「DataContractSerializer」クラスを利用する場合、クラスオブジェクトのシリアライズとデシリアライズは左記の実装例のように実現することが可能となります。肝となるのは「WriteObject」と「ReadObject」メソッドのみですので、そのほかの部分はお好きなように実装してください。これだけの実装で、クラスとXMLファイルを相互に変換することが可能となります。データモデルに付与した属性データモデルを作成する際に付与した属性は、「DataContractSerializer」クラスの変換処理に利用されます。「DataContract」属性は、そのクラスがシリアライズおよびデシリアライズ可能であることを示し、「DataMember」属性はそのプロパティを変換の対象にするという意味を持ちます。逆に「IgnoreDataMember」属性を付与すると、そのプロパティを変換の対象から除外することが可能です。前述したデータモデルの例では、「PositionTimeSpan」プロパティを「IgnoreDataMember」属性により対象外としていますよね。本当は「Position」プロパティをTimeSpan型にすれば「PositionTimeSpan」プロパティなんて不要なのですが、TimeSpanを「DataContractSerializer」で変換すると”PT4.449S”といったヘンテコな文字列になりやがります。できれば時間は”00:00:02.551”みたいな形式でXMLに保存&読込できると後々編集しやすいですよね~。このため、XMLに変換されるのは「Position」プロパティの値のみとし、プログラム側では「PositionTimeSpan」プロパティを利用することにより帳尻を合わせています。