ゲームのデモ版をリリースしたのでそのゲームの解説として動画を上げました。本来は先に解説をしてゲームをリリースするつもりだったのですが、収録タイミングが合わなかったので先にゲームをリリースしてからの解説となりました。
ゲームリリース時の話とかは前のブログでも書いてるのでそちらをご覧ください。
]]>ニコニコ動画に上げているゲーム制作動画を見られている方はなんとなくわかっていたかもしれませんが、とりあえずゲームとして動くバージョンができたので公開しました。
開発中のβ版ですらないものなので、ゲームとして面白いかどうかはわかりません。ただ、このシステムをベースにいろいろ手を加えていく予定なのでそれは次以降のお楽しみということにしておいてください。ゲームの正式版は Silverlight になるわけではなく、Silverlight 版はあくまでも開発中の段階のものをデモ的に公開するために使っています。ストアや exe で配布するもの面倒なので。
ゲームは Silverlight で作ってあるので IE11 とかで遊んでください。Google Chrome の場合は Silverlight が動くように設定を変える必要があります。ゲームはすべて CPU で処理しているので、低スペックの PC だとフレーム落ちする可能性があります。
詳しい説明はリンク先のページにいろいろ書いてあるのでそちらをご覧ください。
]]>エイッとウォーズ Ver 1.02 が Windows ストアで公開されました。本バージョンは機能追加やバグ修正がメインではなく、Windows Phone 版同時リリース(ユニバーサル Windows アプリ & MonoGame)がメインとなっています。
詳しいことはだいたい直前のブログで書いてしまったのでそちらをご覧ください。
ゲーム内容は Windows でも Windows Phone でもほぼ同じ内容になっています。ただし動作環境はそれぞれ「Windows 8.1」「Windows Phone 8.1」以降に変わりました。(Windows 8 では Ver 1.01 がダウンロードできるようですが確認はしてません)
テスト段階では確認できなかったのですが、ゲームの保存データについては Windows と Windows Phone で同期されることを確認しました。ただ、前の投稿でも書いた通り、即座に同期されるわけではないので、両方で同時にプレイするとか間髪入れずに切り替えて遊ぶとかするとうまくデータが更新されないので注意してください。一応お互いのデータの差分はチェックしているので、過去のプレイデータが消えるということはないと思います。
まだ、エイッとウォーズをプレイしたことがないという方は Windows または Windows Phone どちらでもいいので遊んでみてください。Windows で既にプレイしたよって言う方は、同じゲームが Windows Phone でも動くのかっていうのを試してみるものいいかと思います。MADOSMA では動作確認したんですが、それよりも低スペックでの端末では確認していないので、ストアのコメントとか(このブログでもいいです)にどうだったか書いていただけると、今後の開発に役立てるかと思います。(一応 MADOSMA は問題なく動きます。敵味方乱立するフィールドをスマフォで体験してください)
とりあえず初のユニバーサル Windows アプリの公開でしたが、割とうまくリリースまでこぎつけたのでよかったと思います。今後もユニバーサル Windows アプリは何らかの形で作っていきたいと思っているので、機会があればよろしくお願いします。
]]>自身初の Window Phone 用ゲーム「エイッとウォーズ」をリリースする予定でいます。エイッとウォーズは Windows ストア用のゲームとしてすでにリリースしており、そちらの移植版となります。なのでゲーム内容は Windows ストア版と同じになります。
もともと Windows Phone 版としてはリリースする予定はなかったのですが、今後の Windows Phone 用のゲームやアプリをリリースしていくことを考えると、経験という意味ではやってみておいた方がいいかなと思ったので、UWP アプリとしての公開テストを含めてリリースすることにしました。
ちなみに Windows ストアゲームから Windows Phone ゲームへの移行については以前ブログに書きましたのでそちらをご覧ください。
ゲーム内で使用している素材についてなのですが、もともとアプリコンテスト向けに配布されていたものを使用していたので、本来はコンテスト以外で使用はできないのですが、@ITコンテスト担当の方に問い合わせたところ使ってもOKという返事をいただいたので、そのまま使用させていただくことにしました。(あくまでも個人レベルでの問い合わせですので、他に使う方がいるのであれば問い合わせたほうがいいと思います)
前のブログで、Windows Phone にゲームを移行した際、懸念事項として残っていた「ゲームをプレイしていると勝手にサスペンドする」という件についてなのですが、結果的には解決できていません。フォーラムで質問してみたのですが回答は得られず、過去の投稿でも同じような現象が発生している人がおられたようなのですが、やはりそちらも未解決のままでした。
しかたないので、ゲーム起動時に図のような注意書きを表示するようにしました。ゲームをしている最中にサスペンド状態になってしまうのですが、画面の手順に従って操作すればそのまま続きから再開することは可能です。起動時に毎回表示されますが、右下の「ひょうじしない」ボタンを押していただければ次回以降は表示されません。
エイッとウォーズは UWP として移行したので Windows で遊んだセーブデータと Windows Phone で遊んだセーブデータは同期されるようになっています。例えば Windows で 5ステージ目まで進んだ後に Windows Phone でエイッとウォーズを起動すると5ステージ目から開始することができます。前に書いた通り、Windows と Windows Phone のゲーム内容はまったく同じなのでどちらかで遊んだ方が有利というのはありません。
ただし、データの同期には一定の時間がかかります。どのぐらい時間がかかるかは OS と Microsoft のサーバーに依存するので定かではないのですが、最大で 10分くらいは見たほうがいいです。なので Windows と Windows Phone で頻繁に行き来はしないほうがいいと思います。
冒頭の通り、Windows Phone 版エイッとウォーズは Windows ストア版エイッとウォーズの移植版となります。すでに Windows ストア版をやったことがある人は新鮮味はないと思いますが、逆に Windows ストアで動いていたゲームが Windows Phone でどんな感じに動くかやってみるのもいいかもしれません。とりあえず MADOSMA で動かした限りは Windows タブレットと遜色なく動作することが確認できました。
リリースについては最終調整を行った後申請を行うので、リジェクトがなければ近日中に公開できると思います。
]]>前振り
日本でも Windows Phone 8.1 が搭載されたスマフォ(MADOSMA) が発売され、ようやく Windows Phone アプリ開発にも本腰が入れられるようになりました。正直今までは Windows Phone 自体が日本になかったので(7.8 には目をそらしつつ)、Windows Phone アプリの開発についてもほとんど触れていませんでした。
ですが、最近はユニバーサル Windows アプリ(UWP)開発なるものが出てきて、Windows Store App と Windows Phone 8.1 のアプリを同時開発できるなど、WP 開発の敷居も少し下がったような感じがします。MonoGame でも最新バージョンではこの UWP に対応したりしています。
ということでせっかく MADOSMA も入手したので、MADOSMA で動くゲームを作ってみようかと思いました。
しかし、ここで問題になるのは MonoGame を使ってちゃんと WP で動くゲームを作れるか、ということです。正直これは作ってみないとわからないのですが、かといってかなり作りこんだ後に、「実はパフォーマンス上の問題が…」「実はリソースの問題が…」なんてことになったら元も子もないので、やはり事前に調査は必要になってくると思います。
が、さらに問題になるのは、その検証するのを作るのもかなり大変だということです。「とある機能」を検証すること自体は必要な機能の数だけ検証すればいいのですが、実際に出来上がるゲームは多数の「とある機能」が複雑に絡み合って動くものなので、こればかりは実際にゲームを構築したあとにならないとわからないものです。
とまあ結局何が言いたいのかというと、1から作って検証するのもめんどくさいので、すでに作ったゲームでとりあえず動くか検証しようというのが今回の話です。
私の実況動画でもたまに出していますが、以前 Windows ストア向けに作ったゲームがあって、それをそのまま Windows Phone で動かしてみようと思いました。
「エイッとウォーズ」というゲームなのですが、タッチでキャラクターを動かして戦わせるというシンプルなゲームです。タッチ操作前提のゲームなので、意外とそのまま Windows Phone に移植できるんじゃないかと思いました。
シンプルなゲームとは言っても数百のスプライトを60FPSで動かすという意外に負荷のかかるゲームです。これが Windows Phone で動けばゲーム制作に希望が持てるので、検証するにはもってこいのゲームだと思いました。
「エイッとウォーズ」は「Windows 8」向けのゲームです。今回「UWP」として作り直すので、UWP プロジェクトを新規で作り、Windows 8 時代のコードをそのまま持ってきました。MonoGame のバージョンも 3.0 から 3.4 に上がるので、フレームワークに差異がないか(多少は)心配しましたが特に問題ありませんでした。(さすが XNA)
コンテンツ(画像などのリソース)については XNA Framework のコンテンツパイプラインを使わず MonoGame のコンテンツパイプラインで作り直しました。SpriteFont で一部ビルドできないフォントがあったので別なフォント名にしましたが、それ以外については問題なくコンパイルできました。MonoGame でのコンテンツの作り方は以下のページにまとめてあります。
コードについてはほぼ変えていません。1か所だけ、マウスカーソルを表示するように設定していると WP で実行時にアサートが発生するのでシンボル条件で WP では表示しないようにしました。これだけです。
で、実行した結果の写真です。MADOSMA でゲームが動きました。ちゃんとタッチして操作できます。
何気に 60 FPS で動いているものすごいです。一部のステージではキャラ数が多すぎて 50 FPS ぐらいには落ちるのですが、スマフォのせいかはわかりませんが遅延しているようには感じられませんでした。XNA のころは WP は標準 30FPS に設定しているぐらいなのでたぶん問題ないのでしょう。
と、オールクリア的な書き方をしているのですが、やはり WP ならではの問題はありました。解決未解決も含めて3つほどありましたので書いておきます。
WP 特有の機能です。普通に WP を使っている場合は縦向きで上から指を下にスライドするとアクションセンターが表示されます。このゲームは横向きなので左側から指をスライドするとアクションセンターが出てきます。
このゲームはキャラクターを移動させるためにキャラをタッチしてスライドして移動するのですが、キャラクターが左端にいるときに移動させようとするとアクションセンターが移動します(おまえじゃない)。
画面外からスライドしてアクションセンターが出るのであればまだ許容はできたのですが、ゲーム内の1キャラ分画面内をタッチしてもアクションセンターが反応するので厄介でした。Windows タブレットのころもチャームなどサイドから出てくるメニューはあったのですが、あちらは画面外からタッチしないとでないのでなんとかなったのですが WP はそうはいきませんでした。
とりあえず対応策としてはキャラクターの移動できる範囲を両サイド 50px ほど中にせばめました。狭めたところで難易度はほとんど変わらないのでこれで対応することにしました。
最初普通にプレイするには全然問題なかったのですが、しばらくゲームしてると、効果音に雑音が入るようになってきました。ゲームを続ければ続けるほどよりひどくなります。最初は雑音かと思っていたのですがよくよく聞いてみると音の再生スピードがだんだん遅くなってくるような感じに聞こえました。
原因は定かではないのですが、このゲームはやたら効果音が再生されるので、内部バッファ的なものが溜まりすぎてうまく音声が調整できなくなったのではないかと思います。ちなみに BGM (MonoGame では Song クラス)の再生の方は
問題ありませんでした。(要は BGM は普通に聞こえるのに効果音がおかしくなる状態)
これはプログラムで対処しました。効果音の再生には「SoundEffect.Play」を使用しているのですが、このメソッドは連続で使うと内部的に「SoundEffectInstance」をプールします。おそらくこのインスタンスをプールするあたりの制御がうまくいってないような感じがしたので、「SoundEffect.Play」メソッドは使わず事前に「SoundEffectInstance」を作成してプログラム側でこれを使いまわすようにしました。とりあえず全クリするぐらい耐久テストしてみましたが今のところ再生される音が遅延することはなくなりました。
未解決でありながらやっかいな現象です。
ゲームをしていると画面が止まります。
一瞬ハングしたのかと思ってしまうのですが、「アプリ間の切り替え」画面をいったん表示させて再度ゲームを選択すると停止した状態から動き出します。なのでおそらくサスペンドしてしまっているのではないかと思います。
原因が全く分からないので、どういったタイミングで停止してしまうのかを調査してみました。するとどうやらタッチ操作をしたタイミングで停止するようです。もちろん毎回ではなくタッチしてもまったく止まらないこともあれば止まることもある、という状態です。
タッチ系の処理が悪さをしているのかとおもって「TouchPanel.GetCapabilities」や「TouchPanel.GetState」「Mouse.GetState」など関連しそうなところをつけたり消したししてみましたが、処理を入れなくても停止するようでした。
ちなみにどの状態でも停止するかというとそういうわけでもなく、MonoGame を新規で作った時にできるサンプルコードを実行したときはいくらタッチ操作をしても停止することはありませんでした。おそらく高負荷な状態で発生しているような気もしました。
さらにコードのどの部分で停止しているかも調査してみました。すると Game.Draw メソッドが終わった後なので、停止場所はフレームワーク内部ということになります。ちなみに停止している間は Update メソッドも Draw メソッドも呼ばれないので、残念ながら手をつけられる範囲ではないようです。
まあ、まとめることは特にないのですが、とりあえず MonoGame で Windows Phone 向けのゲームを作るのは「あり」だと思います。最後の未解決問題の件はありますが、「高負荷な状態」「頻繁にタッチをする」という条件下で発生するようなので、そういう形にならないように作ればなんとかなるのではないかと思います。仮に停止してしまったとしてもいったんアプリ間切り替えに移動して再度ゲームを選択してもらえば一応続けられます。この問題が WP 全体の問題なのか MADOSMA だけの問題なのかわからないので、別な環境でもおいおい調査してみたいと思います。
ちなみに調査用に移植したこの「エイッとウォーズ」なのですが、Windows Phone アプリとして公開するかどうかは微妙です。なぜかというとこのゲームの元はコンテスト用に作ったものなので、Windows Phone で公開していいのか不明だからです。一応確認してみますが、運がよければ公開します、ぐらいで思っていただければと思います。
]]>