XNAで作ったWindows Phoneアプリの思い出

※この記事は「Windows Phone Advent Calendar 2014」の19日目の記事です。この手の記事を書くのは初めてですので、間違いなどございましたら、ご指摘頂ければと考えます。よろしくお願いします。

はじめに

国内ではWindows Phone 8.1が出ないだの、通話できる鈍器が出ただのと言っていた2014年、ひっそりと市場から退場した技術があります。

Microsoft XNAです。

Windows/Xbox 360とWindows Phone 7で採用された開発プラットフォームですが、次世代のXbox One、Windows Phone 8では採用されず、今年4月1日に終了しました。

マイクロソフト、ゲーム開発環境「XNA」を2014年4月に終了
http://ggsoku.com/2013/02/microsoft-xna-end/

…と書いていたら、がりっちさんのネタとかぶってしまいました。おおう。

思い出話です

Phoneの開発では、Silverlight/XAMLというUI開発が快適な開発環境があり、自分も使うことは無いと思ってましたが、とあるネタアプリの開発において、どうしても使わざるを得ない状況になり、手を出してみました。その経緯を、思い出話として書いてみたいと思います。

きっかけ

アプリを作るきっかけは、ニコニコ動画で見かけた一本の動画でした。

電話機でぽっぴっぽーを演奏してみた
http://www.nicovideo.jp/watch/sm17265128

ビジネスホンを楽器にするという発想に妙にはまった自分は、「じゃあ、Windows Phoneだって電話だし、同じことができてもいいよね!」と、Phone愛用者にありがちなこじらせ柔軟な発想に基づき、開発に入りました。

レスポンス性の確保

このアプリでポイントとなったのは、レスポンス性の確保でした。楽器として演奏するには、ボタンクリックをレスポンス良く受け付け、かつ同時に音源を鳴らす処理を実行する必要があります。

最初は、XAMLでボタンを描いてOnClickで音源を鳴らしてみたり、Silverlightのビヘイビアでクリック検知と音源再生の同時処理を試みたりしました。が、

  • クリックを取りこぼす
  • 音源再生が遅れる/鳴らない
  • 押したボタンが凹んだまま戻らない(!)

といった現象が頻発し、とても演奏なんてできる状態になってくれません。Silverlight/XAMLはリアルタイム処理を想定していないでしょうから、最初から無理な相談だったんですが。

で、諦めの悪かった自分は、XNAに手を出してみることにしたのです。

開発環境としてのXNA

いざ触ってみたXNAは、Silverlight/XAMLとは全く異なる思想の開発環境でした。

・イベントドリブンでない
メイン処理が30分の1秒ごとに呼び出される。キー入力やデータ処理、画面描画をその中で実施する必要がある。

・用意される関数は低レベル
キー入力、描画、音源再生などは低レベルのものが用意されているが、チャタリング対策やアニメーションといった処理は、全て自前で実装が必要です。

実はWindows PhoneのXNAは、Silverlight/XAMLとの兼用もできるようになっていますので、モノによっては分業するという手段もとれます。が、今回自分がやりたかったのは、Silverlight/XAMLでは無理だったことなので、全部XNAで実装することにしました。

自身は過去に組込機器(バスの運賃表示機とかカードリーダとか)のエンジニアをやってまして、ベタに書くのは慣れた方法でもありました。

例えば、ボタン部品はありませんので、

  •  画面タッチされたら、座標でどのボタン画像が押されたか判定し、
  •  押されたボタンに応じた音源を鳴らし、
  •  押されたボタン画像は表示位置を右斜め下にずらし、
  •  過去に押されたボタン画像はちょっとずつ戻るように座標を変更し、
  •  画面にビジネスホンのボタン画像を表示する(実際には画面全体を再描画する

という処理を書きました。

また、1ループの処理は30分の1秒以内に収める必要があります(間に合わないと、次のループ処理がキャンセルされて、いわゆる「処理落ち」になります)。が、ネタアプリにそんな心配は無用ですね。

成果

XNAでの実装は強力で、理論上は秒間15連射まで検知可能になっています(実際にできるかは置いておいて)。レスポンス性の確保という当初の目的は十分に達成できました。もちろん、最新のWindows Phone 8.1でも正常に動作します。

PoppipoPhone
http://www.windowsphone.com/ja-jp/store/app/poppippophone/20a05d6f-ea33-4822-ad79-149f4302ad24

最後に

Windows Phone 7世代のアプリは、8になってから正常動作しないものが出てきています。

そんな中、XNAアプリは処理落ちの要素も少なく、逆に端末の処理クロック向上の恩恵を受けて、安定動作しているのではと思われます。XNAアプリを少しでも長く使えるよう、Windows Phone 10でもサポートが継続すればいいな、と願っています。

そして、Windows Phoneは、本当にアプリの開発が楽しい端末です。長らくプログラミングから離れていた自分が復帰したのは、日経ソフトウェアの特集記事と出会い、手を動かしてみたのがきっかけです。もっと多くの人にWindows Phoneが広がる、そんな2015年を期待したいと思います。

明日のWindows Phone Advent Calendar

マイクロソフトの太田一郎さん(@ichiohta)です。「Windows 8プログラミング本格入門」持ってます!

おわり。

XNAで作ったWindows Phoneアプリの思い出” へのコメントが 2 点あります

  1. ピンバック: Windows Phone Advent Calendar 2014 勝手に中間解説 後編 - 高橋 忍のブログ - Site Home - MSDN Blogs

  2. ピンバック: Windows Phone Advent Calendar 2014 カレンダーリンク - 高橋 忍のブログ - Site Home - MSDN Blogs

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*