あいてぃーとふぼふ

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

ということで、前回はアイデアを2つにまで絞り込みました。今回はもう少しアイデアを煮詰めたうえで、どちらか一方のアイデアに絞り込みたいと思います。

あっち向いてホイ(仮)はどうですか?

とりあえず、アプリケーションの完成形をイメージするために、先行してイラストを描いてみました。う~ん…やはりというかなんというか。とりあえず、実現するとかなり気持ち悪い感じのアプリケーションになるであろうことは明らかですね(汗。作ってみるのも面白そうではありますが、プレイするにしても賢者モードの発動が必要不可欠となります。そもそも他人に紹介するのも勇気がいります。はじめてのアプリですので、やはり色々と宣伝はしたいですし…。うむむ…

メトロちゃん(仮)はどうですか?

やはり同様に、メトロちゃんを描いてアプリケーションのアイデアを煮詰めてみました。色々と考えてみましたが、基本的なストーリーはこうなりました。ロボットやリンゴが覇権を争うスマフォ業界において彗星のごとく現れたメトロちゃんが、WP7のシェアを拡大するために地球を一周してロボットやリンゴを一掃します。ただしこの際、敵を倒すためにはタイミングよく画面下のアプリケーションバーボタンを押す必要があります。つまり、俗にいう「リズムゲー」にするのが、比較的簡単に実現できそうで面白いかな~と思ったわけです。実装自体もSilverlightの機能を最大限に利用すれば、100行足らずのソースコードで実現できるかもしれません。

キミに決めた!

ということで、今回作成するアプリケーションは「メトロちゃん(仮)」に決定しました!「あっち向いてホイ(仮)」も非常に捨てがたいんですが、一発目のアプリがアレだと何だか人間性を疑われそうで怖いです。ということで、次回からは実装に入りつつ技術的な懸念事項や画面構成などを検討したいと思います。

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

今回は、作成するWP7アプリケーションのアイデアを考えてみたいと思います。ということで、実際にわたしが考えたアイデアを以下に公開しちゃいます!それにしても、やっぱりアイデアを出すのが一番大変だったりしますよね~。なんだかお疲れにゃんキャット

アイデアA:リーマン(仮)

このゲームでは、上司の絡み酒にしこたま付き合わされたサラリーマンが、押し寄せる吐き気をコントロールしつつ愛する家族の待つ我が家を目指すというゲームです。プレイヤーが操作するサラリーマンは、基本的に千鳥足のため常にふらふらしています。このため、加速度センサーの傾きでうまく制御しつつ、マンホールや通行人を避けて進みます。もしこれらに当たってしまうと、「SUSHIORI=STOCK(寿司折りストック)」…つまりライフが減少してしまいます。また、プレイ中は常に「GERO=GAGE(ゲロゲージ)」が上昇していくため、定期的に電信柱を見つけてゲージを解放してあげる必要があります。この際、ゲージのギリギリ具合によって「SOKAI-POINT(爽快ポイント)」が溜まる仕組みとなっており、このポイントによるランキング機能も実装することにしましょう。寿司折りがなくなるか、ゲロゲージが最大値をオーバーすると「GEeeM=OVER(ゲェームオーバー)」となります。他にも、ゲロゲージを一定時間溜めてフラッシュオーバーさせることにより発動可能な「GERO=SENSITIVE(ゲロの領域)」などの要素も考えてみました。ということで、個人的にはイチオシのアイデアです!…がいかんせん、全体的に下品すぎましたかね。でも結構気に入ったので時間があれば作ってみたいかも。

アイデアB:あっち向いてホイ(仮)

このゲームはとてもシンプルで、美少女と「ジャンケン」して「あっち向いてホイ」をするだけの内容です。西暦20xx年、ピュアな紳士たちの社交場では「あっち向いてホイ」が大流行~、みたいな時代背景です(謎。システムとしては、「ジャンケン」の入力にアプリケーションバーのボタンコントロールを利用したり、「あっち向いてホイ」の入力にToolkitのGestureServiceクラスなどを利用すれば、実装自体はそこまで難しくなさそうです。また肝心の美少女も、1枚絵と上下左右を向いた差分を用意すれば、これまた工数は抑えられそうです。ただし、バカ正直に作成すると単調なゲームになってしまいそうなので、リズミカルに入力しないと失敗するような要素を設けたりしたいところですね。また、何連勝できたかをランキングとして記録できるようにすれば、最低限のやりこみ要素も確保できそうです。でもこれ…実現したらかなり気持ち悪い感じのゲームになりそう…。

アイデアC:メトロちゃん(仮)

このゲームは、あえてユルい感じを演出することにより万人受けを狙います(言い切った)。でも正直いうと、あまり具体的な内容は決まっていません。だって1日で3つもアイデア出すとか無理ですよ…(汗。でも工数などを考慮すると、今回作成するアプリでは、ワンキーだけで遊べるような単純&爽快なゲームが一番ニーズに合っているのかもしれません。イラストに関しても、ユルいデフォルメキャラクターなら描くのも大した手間じゃありませんしね。

どれを採用する?

ということで、3つのアイデアを出してみたわけなんですが、このうちのどれを採用するか…それが問題ですね。あ、でも「リーマン」は除外しますよ!だってアプリケーションの審査で撥ねられそうな内容ですし、そもそも前回決めたコンセプトは「萌え系アプリ」だったわけで。…ってあれ?じゃあ、なんで「リーマン」なんて考えたんだろ…(´・ω・`;)

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

わたしもそろそろなにかしら、WindowsPhone7のアプリケーションを作って公開したいなぁ~。ということで!ここから数回にわたり、WP7アプリケーションの開発工程を記していきたいと思います。なおこの企画は、なんか突発的に思いついたのものですので、突然終了するかもしれないことをあらかじめお断りしておきます!(`・ω・´)ゞ

課題を決めよう!

今回は、あくまでマーケットプレイスにアプリケーションを公開することが最優先事項よ♪@みずほ先生。このため、あまり高度なアプリケーションは作成しません。…といいますか、高度なアプリを作るスキルがありません。また仕事や夏コミなどの都合上、あまり時間を割くこともできません。このため、できれば6月中に簡単なアプリをマーケットプレイスに公開するところまで漕ぎ着けたいところです。今回はこれを最重要な課題としましょう。

開発プラットフォームを決めよう!

WP7アプリケーションの開発に使用するプラットフォームは、UIアプリの開発に特化した「Silverlight」と、ゲームアプリの開発に特化した「XNA」のいずれかを選択することが可能です。「Silverlight」を利用する場合、XAMLと呼ばれるマークアップ言語とイベント駆動型のプログラミング手法により、比較的短かい期間でUIベースのアプリケーションを構築することが可能です。また「XNA」を利用する場合、低レベルかつ豊富なAPIを利用することができるため、自由度が高く高速なアプリケーションを構築することが可能です。前述のとおり今回は、開発にあまり時間を割くことができません。このため、開発効率の高いSilverlightを選択することにします。

コンセプトを決めよう!

とはいえ、単純なアプリケーションをただ作ってもあまり面白くないですよね。なので、WP7のアプリケーションを公開しているマーケットプレイスをすこし調べてみました。その結果、予想していた通り…いわゆる萌え系アプリはまだ少ないようです。このため、このあたりに付け入る隙(?)がありそうですね。ということで、コンセプトは萌え系アプリで行きましょう!でも萌え系というからには、どうしてもゲーム要素が強くなりそうです。限られた工数で実現するためには…どうしましょうか?そうですね!難しいことは明日考えましょう⊃_д_)⊃

コミックマーケット80当落発表!

すっかり忘れていましたが、今日は毎年夏に開催される日本最大級の同人誌即売会…略して「夏コミ」のサークル当落発表日です!今回で80回を数えるこのイベントは、毎年8月の第二週の金~日曜日を利用した三日間で開催されます。わたしも密かにサークル参加の申し込みをしておりました♪さてさて、当落結果は…?

サークルカットはこちら!

受かってましたー!(゚´Д`゚)゚ということで、モトスクウェアソリューションは「2011年8月13日(土)」に東京ビックサイトの「東地区 “S” ブロック 21b」で出展させていただきます~!詳細な告知は近日中に別ページでご紹介させていただくつもりですが、取り急ぎサークルカットはこちらになっております!同人誌の内容は、VS2010の擬人化キャラクター「ローザ」とWP7の擬人化キャラクター「メトロ」が、先行き不安なWindowsPhone7について、その概要をコミカルチックに解説します。あとそれとは別に、CD-Rか何かの媒体でWP7開発のハウツー集みたいなものも配布できればいいなぁ~なんて考えてます。まだ全然未着手ですが…。

ということで、ご都合のよろしい方はぜひとも上記のスペースまでお越しいただけましたら幸いです~。お茶菓子は出せませんが、とびきりの笑顔でおもてなしさせていただきます…( ◞≼●≽◟ ◞౪◟ ◞≼●≽◟ )

Windows8のデモムービー!

Windows8のデモムービーが公開されました!

先月開催されたMDF(マイクロソフトが主催する技術者向けのフォーラム)でも、バルマーさんが「来年のリリースするWindows 8は…」みたいな発言をしていました。このため今後は、2012年のリリースに向けて色々と情報が出てきそうな感じです(*≧∀≦)ノ

ユーザインタフェイスはメトロ!

Windows8のユーザインタフェイスには、WindowsPhone7と同様にMetroデザインが採用されるようです。上記のデモムービーや左記の画像でも、スタート画面などにMetro独特のライブタイルなインタフェイスが使用されていることがご覧いただけます。もちろん、Officeなどのアプリケーションを利用する場合は、従来のWindows7などと同様にデスクトップ画面が表示される模様です。また、Windows8のソフトウェアキーボードなどもWindowsPhone7とだいぶ似ていますよね。このことからも、マイクロソフトは今後もMetro UIを推していくようです♪

  

Windows8のベータ版は8月公開予定?

一部の情報筋による情報では、Windows8 のベータ版は8月ごろのリリースを予定しているようです。なおベータ版のOSは、MSDNを通じて技術者のみにリリースされるのが通例です。しかしながら、ムービーを見る限りでは現時点でもかなりの仕上がりなようですので、その完成度次第ではRC版を待たずに一般の方々に公開される可能性もありそうですね。なのはともあれ、今後の展開に期待です♪

WPDT7.1βの密かな改善点

最新のWP7アプリケーション開発環境である「WPDT7.1β」では、様々な新機能が追加されました。しかしながら、従来の機能に対する改善も色々と盛り込まれているようです。今日はその一部をご紹介しますね!

ターゲットの既定値がエミュレータに!

「VisualStudio 2010 Express for Windows Phone」を起動した際のターゲットの既定値が「Windows Phone Emulator」に変更されました。従来のWPDT7.0では、既定値が「Windows Phone Device」であったため、デバイスを接続していない時に実行エラーになるなど、なにかと煩わしかったものですが…。このあたりは地味にうれしい改善点ですね♪

アプリケーションアイコンに透明PNGが指定可能に!

アプリケーションアイコンの画像に透明PNGを利用することが可能になりました。透明PNGを利用した場合、透明部分にアクセントカラーが表示されます。これにより、WP7の標準アプリに利用されているアイコンと統一感を出すことができるようになりました。また従来のWPDT7.0では、アプリケーションアイコンをプロジェクトのルートディレクトリに配置しないとビルドエラーとなりましたが、WPDT7.1ではルートディレクトリ以外に移動させることが可能となりました。

画面遷移の履歴が消去可能に!

NavigationServiceクラスのRemoveBackEntryメソッドを利用して画面遷移の履歴を削除することが可能になりました。これにより、遷移履歴に残したくないような画面も気軽に利用することができます。なお、履歴が存在しない状態で本メソッドを実行した場合はInvalidOperationExceptionがスローされる…とMSDNには記載されていますが、実際には特に例外はスローされません。でも念のため、利用する際にはCanGoBackプロパティで履歴の存在有無を確認することを推奨します。

コマンドが利用可能に!

ボタンコントロールなどでコマンドが利用可能になりました。従来のWPDT7.0ではMvvmLightのButtonBaseExtensionsクラスなどを利用してコマンドをバインドさせる必要がありました。しかしながら、SL4ベースとなったWPDT7.1では、ボタンコントロールの標準機能としてコマンドが利用できるようになります。

Binding以外のクラスが依存関係プロパティとして利用可能に!

従来のWPDT7.0では、依存関係プロパティを作成する際にBindingクラス以外を使用するとXamlParseExceptionが発生しました。このため、PrismのBindingListenerクラスなどを利用してBindingクラスから無理くり何とかバインドソースを取得したりする必要がありました。しかしながら、最新のWPDT7.1βでは、Bindingクラス以外の一般的なクラスを依存関係プロパティで使用することが可能になります。これで依存関係プロパティがだいぶスッキリ記述できるようになりました。

他にも改善点は多々ありますが、続きはまた後日~。

WindowsPhone7アプリケーション開発入門!

マイクロソフトが実施している「WindowsPhone7アプリケーション開発入門」セミナーに参加してきました!森博之さんが講師を務めるこのセミナーでは、WP7アプリ開発の概要から実装までを網羅する内容となっています。さすがに概要から学ぶのは退屈かな~…とも思いましたが、わたし自身もWP7に関する情報を色々と発信していきたいと考えていますので、イチから学ぶいい機会と思い仕事をサボって参加してきました。

迷った!

セミナーは大手町にある大手センタービルという会場で開催されました。普段なら前もって会場までの行き方を調べておく性質なのですが、今回は前日のゴタゴタであいにく下調べを忘れてしまいました。仕方がないので、東京駅からセミナー会場のある大手センタービルまではWP7に搭載されているGPSを頼りに向かったのですが、ものの見事に迷いました!しかもわたし、WP7以外のスマートフォンなんて持っておらず、通常の携帯もパケットし放題ではないという鬼仕様!街中でエルシャダイに会ったら間違いなく「そんな装備で大丈夫か?」と尋ねられるくらい貧弱な装備です。パンツ一枚のアーサー@魔界村みたいなものですよ。しかもWP7ってまだ日本語が打てませんので、住所を調べたくてもなかなか検索にヒットせず…。この日ほどWP7に腹を立てたことはありません!おかげで1時間近く歩き回って堂々の遅刻…。ホント、東京はよくわからんですばい。

一部の層には意外な人気!

平日ということもあり参加者は少ないかな~なんて思っていましたが…意外や意外!30名くらい入れそうなセミナールームがほぼ満席状態でした。やっぱりWP7の人気はスゴイですね~(一部の層で)!ちなみに、実機持ちはわたしを含めて数人程度でした。でもこれが普通。むしろ今まで参加した勉強会のように実機持ち9割とかが異常なわけで。

セミナーの内容は?

今回のセミナーが対象とする技術者レベルはSilverlightの修得者を前提としています。このため、XAMLやデータバインド等の基礎知識は一切省略して、WP7のアプリ開発に重点を置いた内容となっていました。しかし、あらためて概要から聞いてみると気付かされることの何と多いことか!WP7の実行モデルや各コントロールの特性など、じつは漠然と理解したまま放置していたものがすべてクリアになった感じです。ちなみにアジェンダは以下の通りとなっており、10時から17時まで一日中WP7づくし!といっても座学だけではなく、HandsOnLabな実習も含めた内容で退屈しません。

  1. WindowsPhone7開発概要
  2. WindowsPhone7開発入門
  3. 画面操作
  4. WindowsPhone7 FeatureAPIs
  5. MVVM・非同期処理

なおHandsOnLabでは、ターゲットを「Device」に指定しているためにエミュレータでのデバッグ実行ができずに悩んでいる方も多数おられました。最新のWPDT7.1では「Emulator」が既定値となりますのでこのようなことはなくなるのですが…。なるほど確かに、WP7開発ならではのあるあるですよね~。

今後の予定!

本セミナーと同じ内容のセミナーが6月末日にも開催されます。森さんにお聞きしたところ、現状では今回と同様の内容で実施しますが、WPDT7.1のRTMがリリースされているようであれば、それをベースにした内容にするかもしれないとのこと!セミナーは無償ですので、興味がおありの方は是非ともどうぞ~。

Windows Phone 7 アプリケーション開発入門

明日の自分に期待したい

今日は帰宅が遅くて更新する時間が取れなかったので、落書きメトロちゃんでお茶濁しです~(;≧Д≦)明日こそは…トゥモローこそは頑張って更新したいっ!

どうでもいいですけど、トゥモローっていうと「生きもの地球紀行」のエンディングテーマだった杉本竜一さんの「Tomorrow」って曲を思い出します。わたし結構好きだったんですよ、生きもの地球紀行!あの曲を聴くとなぜだか無性に涙腺が緩くなるんですよね~。まぁどうでもいいですけどね。

生き物地球紀行

WP7のゲームループはUIスレッド?(後編)

前回の検証結果(左記の画像)より、XNAのゲームループ(GameTimerクラスのイベントハンドラ)はUIスレッド上で動作することがわかりました。でも、これには大きな危険が潜んでいます。

UIスレッドの占有はダメ!

お気づきの方も多いと思いますが、この事実から読み取れる危険…、それはUIスレッドの占有には今まで以上に注意しなくてはならないということです。何を当たり前のことを…と思うかもしれませんが、ちょっと待ってください!たとえば、SilverlightのUIコントロールのイベントハンドラにおいて長時間処理を実行した場合、そのぶん、同様にUIスレッドを利用するGameTimerクラスのイベント発行が遅延してしまいます。このため、ゲームループのFPS(1秒間に処理する回数)が低下しますよね。この際に厄介なのは、OnUpdateイベントまでもがUIスレッドで動作するという事実です。これはつまり、UIスレッドの占有による弊害は、描画のコマ落ちなんて生易しいものではなく、ゲームの処理落ちに直結するということです。

XNAのみを利用する場合、処理に時間を喰ってしまった際は、意図的に描画処理をスキップして更新処理を優先させたりします。こうすることにより、描画のコマ落ちは発生しますが、ロジックの処理落ち(ボタンを押したのに認識されない等)を回避させることは可能です。ただしSilverlightと相互運用させる場合、こういう危険性を理解しないまま使用してしまうと後々厄介なことになりそうです。

まとめ!

後編に引っ張りましたけど、いいたいことはこれだけです。う~…ん、個人的にはOnUpdateイベントがUIスレッドである必要性が理解できません。Silverlightコントロールから値を取得するだけならば別段UIスレッドである必要はないわけですし…。でも、UpdateとDrawの実行順序を保証させたいがためだとすれば…なんとなく理解できるかも?いやでも…なんでかなー…。

ということで、全体的な完成度は少し残念な感じの「WPDT 7.1β」ではありますが、ことSilverlightとXNAの相互運用に関してはホント素晴らしいと思います。 SilverlightとXNAの共存なんて、まるで夢物語のようですね~♪いうなれば、仮面ライダーBLACKとシャドームーンが共闘するくらいアツイ 展開!…かな?かな?

WP7のゲームループはUIスレッド?(前編)

「WPDT 7.1β」では、SilverlightとXNAを相互運用することが可能となりました。この機能を利用することにより、例えばSilverlightのコントロールとXNAのゲームロジックを同一の画面内で共存させることが可能となります。個人的にイチ押しの機能です。

ちなみにこの機能は、Silverlight5のDrawingSurfaceクラスにおいて、より洗練された形で実装されています。ですがそれでも、利用する際にはXNAに関する知識が少なからず必要となります。また、WP7も将来的にはSilverlight5ベースになるでしょうし、今のうちからXNAの使い方を理解しておくのも良いと思います。

話が少しそれましたが、左記画像のアプリではこの機能を利用して、UIコントロールをSilverlightで制御し、ローザさんの3DモデルをXNAで制御しています。メッシュデータの利用方法など、XNAの基礎知識に関してはまた別の機会にご紹介するとして、今日の本題はXNAのゲームループからSilverlightのUIコントロールを操作することは可能か?という内容です。たとえば、3Dモデルのアニメーションが終わったらUIコントロールの状態を変更する、みたいなことが可能かどうかということですね。

まずはおさらい!

SilverlightとXNAを相互運用する場合、WP7.1ではGameTimerクラスを利用します。早い話、このタイマーがOnUpdateイベントとOnDrawイベントを交互に発行…つまりゲームループを発生してくれるので、これらのイベント内でXNAの更新処理と描画処理をしてあげればよいわけです。概略は右記画像のとおりです。仕組みは単純ですね~!このため、当然ではありますが、SilverlightのUIコントロールをXNAのゲームループから参照しても、別にビルドエラーにはなりません。でもじゃあ実行時に、XNAのゲームループ内からSilverlightのUIコントロールを操作した場合は…一体どうなるのでしょう?

やってみよう!

ということで、やってみました!結論から先に申しますと、XNAのゲームループからSilverlightのUIコントロールを操作することは可能です!やったね、たえちゃん!…ん?でも待てよ。たしかSilverlightのUIコントロールはUIスレッド以外から操作することはできないはず…。なのにうまく動くのは…なぜ?

調べてみよう!

これを検証するために、左記のようなコードにおいて、SilverlightのイベントハンドラとXNAのゲームループのスレッドIDを取得し比較してみました。すると面白いことに、上記のスレッドIDは完全に一致します。このことから、XNAのゲームループはUIスレッド上で実行されていることがお分かりいただけると思います。GameTimerクラスは、普通のTimerというよりはむしろDispatcherTimerに近い感じなんですね。ともあれこれで、XNAのゲームループ内からSilverlightコントロールをガンガン更新しても何ら問題ないことがわかりました。実際に、最大FPSで回しているゲームループからテキストボックスのテキストを(1秒間に数十回)変更しても、問題なく更新されます。

潜む危険…

…でも、この事実に喜んでばかりもいられません。なぜなら、この事実にはある重大な危険性が潜んでいるからです。ということで、続きは次回の投稿で!