ゲーム開発デモ版 Ver 0.60 を公開しました

2018-03-21_Ver0.60

Ver 0.50 の公開から5か月ほど経ってしまいましたが、ようやく 0.60 を公開しました。割と早い段階でひととおり修正などが終わったら公開しようかと思っていたのですが、修正が終わる前にこれも直したい、あれも付け加えたいなどやってたため遅くなってしまいました。

今までと同じ通り戦闘ステージのみを遊べるようになっています。正直なところ Ver 0.40 以降からはそんなに変わったところはないと思います。実際には戦闘ステージ以外のメニュー画面の作りなどもやっているので、デモ版に反映されているところが少ないというところが実情です。

基本的な機能については大体できている感じで、後はいくつかの機能追加とコンテンツの作りこみが今後の作業範囲となっているので、おそらく今後リリースするデモ版もあんまり変わり映えはしないと思います。デモ版にいろんなコンテンツを埋め込んでみてもいいのですが、それだとデモ版であるにも関わらず重いものに出来上がってしまうので、実際に作り上げたものが遊べるのは本リリースの時だと思います。

更新内容とかはデモ版のページに書いてありますのでそちらを参照してください。一部操作キーが変わりましたが、それ以外は今までのデモ版と大体同じ動きになっています。

デモ版は以下のページ先で遊べます。例のごとく Silverlight を使っているので、対応する Web ブラウザは Internet Explorer のみです。初めてプレイされる方はSilverlight のインストールと GPU の有効化設定を行ってください。

開発に関してちょっと余談。

現在開発は Visual Studio 2015 で行っているのですが、いつのころからかアップデートをしてから Silverlight のアプリをデバッグ実行しようとしても Silverlight の Develop 版をインストールしてくださいとエラーがでて、まったくデバッグ実行できなくなってしまいました。まあ、Silverlight の開発サポートも停止されているので仕方ないところもあるのですが、前のバージョンの Visual Studio をインストールするのも嫌なので実行時のログ出力だけで頑張っています。とはいっても実際の開発は UWP で行っているので、そちらで一通り動いたら Silverlight で動かしてみるって感じなので、Silverlight 版でテストするということは実際にはそんなにないです。ただ Silverlight で動かしたときの固有のエラーが出たりすると原因を探すのが結構大変なのですが…( ^ ^;)

]]>

MonoGame 3.6 の UWP10 プロジェクトでキーボード操作を行うと遅延する

通常 Keyboard.GetState メソッドでキーボードの状態を取得すれば現フレームの段階でのキーの押下状態を取得できます。一度に複数のキーを同時に押しても問題ありません(キーボードの配線によってはキー同時押下の上限はあります)。

しかし、UWP10 のプロジェクトを作成し、Windows 10 の環境で実行すると、押下状態を瞬時に取得することはできず、段階的に1キーずつ取得されるような動作になってしまいます。しかも、しばらく押したままにして離すと、一定時間押下中判定のままになってしまい、その後これまた段階的に1キーずつ放すような状態の取得を行います。

ちなみに UWP8.1 のプロジェクトで同じ処理を行うとまったく問題はありません。

参考にその動作を録画してみたので、実際に見てみるとわかると思います。最初が UWP8.1 のプロジェクトでそのあとが UWP10 のプロジェクトでの動作です。

この件についてコミュニティで探してみると同じような報告があり、どうやら MonoGame 3.6 での Windows 10 用の実装に問題があるようです。3.6 リリース後に修正したとの書き込みがあり、とりあえず修正したものを使いたい場合は開発ビルド版を使ってくださいとのことですが、ダウンロードページでそれをダウンロードしようとしてもファイルが見つからないようでした (リンクミス?)。

とりあえずは現状で我慢するか、開発版を探す、UWP8.1 を使う、3.7 を待つのいずれかになりそうです。私はずっと UWP8.1 版を使っていたので気づきませんでした( ^ ^;)。

]]>

ゲーム開発デモ版 Ver 0.50 を公開しました

2017-10-21_ゲームデモ版0.50

最近全然投稿できていなくてかなり間が空いてしまいましたがなんとかやっています。

制作動画のほうも一応話すネタとかはあるのですが、収録するタイミングが全然取れなくてあちらの方も投稿が止まっている状態です。ただ、制作のほうはスローペースですが作っており、今回デモ版を公開するに至りました。

とはいうものの、Ver 0.50 は何をメイン機能として公開しようかと考えていたのですが、これといって押せるような機能はなく、プレイしてみるとわかるのですが見た目とかは Ver 0.40 と大して変わっていません。まあ正直なところゲーム基盤は大体できてきたかなーっていう感じで、後は微調整とかテストとかコンテンツ制作とかデータとか作りこんでいく段階になっているので、今後のバージョンもそんなに見た目とかは操作感とかは変わらないかと思います。

Ver 0.50 の公開が遅くなったのもこのせいで、どの段階で区切りをつけようかと考えていてずるずる伸びていってしまったので、とりあえず現状でいったん区切ろう、ということで今回公開しました。

ちなみにゲームについてですが、操作方法とかは Ver 0.40 と同じです。ステージも1つのみで開始時にゲーム難易度を選択できます。今回仲間メンバーの数をかなり増やしたので、Ver 0.40 のように 0 になることはほとんどなく、難易度も前よりは簡単になっていると思います。ただ、敵味方共に強い攻撃を使うことがあるので油断せずに戦ってください。

ゲームは以下のページから遊ぶことができます。いつものように Internet Explorer & Silverlight でプレイしてください。

ほんとは UWP 版でプレイしてもらいたいのですが、こんな感じにデモ版のような感じで配布できるのかがわかっていないので様子見しています。Silverlight 版だとどうしてもカタついた動きになってしまうんですよね。

]]>

Windows Phone 用ゲーム「エイッとウォーズ」をKATANA01で動かしてみた

初の Windows 10 Mobile 端末として KATANA01 を2週間ぐらい前に購入しました。現在スマフォは MADOSMA を使っているのですが、唯一の Windows Phone 8.1 としてこのまま残す予定なので、実際に Windows 10 Mobile でテストする際は KATANA01 を使っていくつもりです。

Twitter でもちょろっと post しましたが、KATANA01 は Windows 10 Mobile 端末の中でも最低限スペックであるため(一応国内では)、これで問題なくアプリやゲームを動かせればほかの端末でのパフォーマンスチェックはすべてクリアできるので、開発にとってはかなり役立ってくれるはずです。(もちろん端末固有の機能があれば別途調査はしないといけないですが)

で、せっかく Windows 10 Mobile を入手したので、なんか動かしたいなと思ったのですが、そういえば以前に、Windows 8.1 向けに作ったゲーム「エイッとウォーズ」を Windows Phone 8.1 に移植して公開したものがあったのでためしに動かしてみました。

KATANA01 をほぼ購入状態のままエイッとウォーズをインストールして起動させてみたのですが、なぜかタッチが反応せず、ゲームが進めない状態に。ほかのアプリは動いいているので、もしや MonoGame が正常に動かないんじゃと思い、ためしに Windows 8.1 UAP を新規で作成したプロジェクトに Mouse や Touch の制御を追加して実行してみたら案の定反応せず。

割と困っていたのですが、そういえば先日 Windows 10 Mobile のアップデートが出ていたので、一応更新をかけて再起動してみました。そうしたらなぜか正常に動かすことができました。

DSC01800_2

原因が単に OS の再起動だけだったのか、電話の更新によるものだったのかはわかりませんが、とりあえずめでたしです。もしエイッとウォーズをダウンロードして動かない方がいらっしゃれば電話の更新をしてみてください。

で、実際に MonoGame Windows 8.1 UAP で作られたゲームなのですが、問題なく動作しています。とりあえず最初のステージから最終ステージまで一気に遊んで確認しました。パフォーマンスも特に問題なく。

DSC01803_2

以前にブログで MADOSMA にインストールして試してみたとき、タッチしまくると画面がフリーズするという現象がありましたが、KATANA01 ではその現象は再現しませんでした。もしかしたら Windows 01 Mobile の影響かもしれません。

とりあえず、MonoGame Windows 8.1 UAP のプロジェクトなら Windows 10 や Windows 10 Mobile でも動かせることが分かったので、ひとまず安心して制作を行うことができます。

(相変わらず Windows 10 UAP のプロジェクトのテンプレートがバージョン不一致で作れないので MonoGame プロジェクトのメンバーの方々なんとかお願いします)

]]>

しゃべりながらゲーム制作やってみます #19 開発環境移行

すみません、動画を投稿していたのにブログのほうで告知するのを忘れていました。

開発環境を移行していたので、しばらく動画投稿できていなかったのですが、1か月ぶりに再開しました。今回は番外編ということで開発環境移行についていろいろ話しています。

番外編なのでほんとは18.5とかにしようと思ってたのですが、番号を並べた際にここだけ浮いちゃうので19にしました。(^^;)

]]>

[予告][ゲーム] Windows Phone 版「エイッとウォーズ」公開について

自身初の Window Phone 用ゲーム「エイッとウォーズ」をリリースする予定でいます。エイッとウォーズは Windows ストア用のゲームとしてすでにリリースしており、そちらの移植版となります。なのでゲーム内容は Windows ストア版と同じになります。

もともと Windows Phone 版としてはリリースする予定はなかったのですが、今後の Windows Phone 用のゲームやアプリをリリースしていくことを考えると、経験という意味ではやってみておいた方がいいかなと思ったので、UWP アプリとしての公開テストを含めてリリースすることにしました。

ちなみに Windows ストアゲームから Windows Phone ゲームへの移行については以前ブログに書きましたのでそちらをご覧ください。

ゲーム内で使用している素材について

ゲーム内で使用している素材についてなのですが、もともとアプリコンテスト向けに配布されていたものを使用していたので、本来はコンテスト以外で使用はできないのですが、@ITコンテスト担当の方に問い合わせたところ使ってもOKという返事をいただいたので、そのまま使用させていただくことにしました。(あくまでも個人レベルでの問い合わせですので、他に使う方がいるのであれば問い合わせたほうがいいと思います)

Windows Phone 版ゲームで残っている懸念事項

前のブログで、Windows Phone にゲームを移行した際、懸念事項として残っていた「ゲームをプレイしていると勝手にサスペンドする」という件についてなのですが、結果的には解決できていません。フォーラムで質問してみたのですが回答は得られず、過去の投稿でも同じような現象が発生している人がおられたようなのですが、やはりそちらも未解決のままでした。

しかたないので、ゲーム起動時に図のような注意書きを表示するようにしました。ゲームをしている最中にサスペンド状態になってしまうのですが、画面の手順に従って操作すればそのまま続きから再開することは可能です。起動時に毎回表示されますが、右下の「ひょうじしない」ボタンを押していただければ次回以降は表示されません。

wp_ss_20150725_0001

ゲームの保存データの同期について

エイッとウォーズは 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 タブレットと遜色なく動作することが確認できました。

リリースについては最終調整を行った後申請を行うので、リジェクトがなければ近日中に公開できると思います。

]]>

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

]]>

[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 が絡んでくる場所なので書いておきました。

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

]]>

MonoGame の SoundEffect.Play メソッドで未定義エラーが発生する原因について

国内にはさっぱり情報がないので海外のサイトを調べていたのですが、いくつかのサイトでは SharpDX の参照 DLL が間違っているせいという答えが書かれていました。しかし情報としては数か月前のものであり、実際に参照を見ても最新版では間違っているようには思えませんでした。

もう少し調べてみたら下記のサイトを見つけ、内容の通りに修正してみたら見事解決。情報が少ないと割と自力解決しなければいけないので苦労しますね…。

]]>