[ゲーム制作]しゃべりながらゲーム制作やってみます #15 アイテムとかほにゃらら

もしかしたら次でいったん最初のとりあえず動く版完成するかもしれません。

]]>

[ゲーム制作]しゃべりながらゲーム制作やってみます #14 操作とか壁とかほにゃらら

デモ版までの道のりは長い、と言いながら、詰めをやってると割と近いと感じてきます。

]]>

MonoGame を使って MADOSMA (Windows Phone) で動くゲームを作ってみた検証メモ

前振り

日本でも 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 に移植できるんじゃないかと思いました。

222

シンプルなゲームとは言っても数百のスプライトを60FPSで動かすという意外に負荷のかかるゲームです。これが Windows Phone で動けばゲーム制作に希望が持てるので、検証するにはもってこいのゲームだと思いました。

移植

エイッとウォーズ」は「Windows 8」向けのゲームです。今回「UWP」として作り直すので、UWP プロジェクトを新規で作り、Windows 8 時代のコードをそのまま持ってきました。MonoGame のバージョンも 3.0 から 3.4 に上がるので、フレームワークに差異がないか(多少は)心配しましたが特に問題ありませんでした。(さすが XNA)

コンテンツ(画像などのリソース)については XNA Framework のコンテンツパイプラインを使わず MonoGame のコンテンツパイプラインで作り直しました。SpriteFont で一部ビルドできないフォントがあったので別なフォント名にしましたが、それ以外については問題なくコンパイルできました。MonoGame でのコンテンツの作り方は以下のページにまとめてあります。

コードについてはほぼ変えていません。1か所だけ、マウスカーソルを表示するように設定していると WP で実行時にアサートが発生するのでシンボル条件で WP では表示しないようにしました。これだけです。

で、実行した結果の写真です。MADOSMA でゲームが動きました。ちゃんとタッチして操作できます。

WIN_20150705_181947

何気に 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 で公開していいのか不明だからです。一応確認してみますが、運がよければ公開します、ぐらいで思っていただければと思います。

]]>

[ゲーム制作]しゃべりながらゲーム制作やってみます #11~#12 ユニットの構成と AI

今回は AI についての実装と説明をしています。ただ実装部分については説明するのが難しいので、動きの仕様説明と実際のデモを中心にやっています。

次回の動画公開ですが、収録タイミングがないためしばらく間が空くかもしれません。

 

]]>

3Dモデルアニメーションソフト「エルフレイナ」Ver 1.24 公開しました

報告をうけた不具合がありましたので修正してバージョンアップしました。

アニメーションモードに移行したときにモデルの線表示を ON にしても表示されない不具合を直しています。

]]>

ビルド時に「MakePRI : warning 0xdef00520: Invalid qualifier」の警告がでる原因

メモです。

「.NET for Windows Store apps」を参照しているプロジェクトにおいてビルドすると「MakePRI : warning 0xdef00520: Invalid qualifier:xxxxx」という警告がでる場合があります。

原因がわからなく、そのままでも問題なかったので放置していたのですが、原因がわかりました。

プロジェクト内にファイル名が「xxx.xxxx.xx.txt」のように複数のピリオドを持つファイルが含まれていると警告が出るようです。ファイル名を変えたらでなくなりました。

]]>

[MonoGame] カスタムコンテンツプロセッサーを利用した高度な日本語表示を行う

日本語の表示となるとゲームプログラムにおいては相変わらず不得意な分野になるのですが、もちろん MonoGame でも同様です。

標準の SpriteFont では英数字ぐらいなら問題ないのですが日本語を含めると高確率で壁にぶち当たってしまいます。

Tips ではその問題を解決するために「ひにけにGD」さんのサイトで配布されている XNA での日本語描画の仕組みを使い、MonoGame で代用できるようにしてみました。

]]>

MonoGame の Tips 始めました

最近 MonoGame の更新が Win10 対応や VS2015 対応とかで積極的になっているようなので、MonoGame に関連する Tips でも作っていこうかなと思いました。

ただ、今回の Tips は連載的なものではなく、気づいた点があったら書き込んでいくという形になるので不定期な更新になると思います。(とは言っても今までも不定期でしたが…)

あと、書くお題については初心者にもわかるように初歩的なものから順番に、というものにはならないと思います。そもそも MonoGame は XNA Framework のクラスライブラリなどをベースに作られているものなので、入門的なプログラムについては XNA の Tips を見れば大体動かせると思います。一応私の方でも以前に XNA の Tips の入門的なものは書いているので、プログラムでわからないことがあればそちらをご覧ください。

そのため、今回書く MonoGame の Tips は以下のようなものになると思います。

  • MonoGame 専用の Tips
  • ゲームプログラム中級者あたりを目安にした Tips

前述通り、初心者向けの Tips については XNA の Tips にあるものを見ていただければある程度わかると思います。今までゲームプログラミング Tips は入門的な部分を書くのに手一杯だったので、今後は少し高度な Tips とかも書いていきたいと思っています。

 

さて今回、MonoGame を始めるにあたっての Tips を3つほど書きました。MonoGame での開発を始めるにあたっての最初の部分なのですが、一応 MonoGame が絡んでくる場所なので書いておきました。

あともう一つ「コンテンツ・パイプライン」について書く予定なのですが、ちょっと時間がかかりそうなので、こちらはでき次第上げたいと思います。

]]>

[ゲーム制作] しゃべりながらゲーム製作やってみます #07~#10 弾撃ちと当たり判定

今回はゲームの重要部分でもある弾の発射と当たり判定について作っています。収録があまりにも長くなってしまったので動画を初めて分割しました。しかも4分割で。

なかなか最初のゲームのリリースにたどり着かないので、もしかしたら今後は少しはしょって動画を上げるかもしれません。

   ]]>