Question

ueshiman on Mon, 28 Jan 2013 07:32:42


現在、C#(XNA)でゲーム開発をしております。
WindowsPhone7.5なのですが、アプリの起動時の挙動で下記の対処に困っております。

アプリ起動中にホームボタンで中断し、再度同じアプリを起動する場合に、「バックキーを長押しし、中断アプリの一覧から起動」する場合と「アプリのアイコンをタップし起動」する場合の2通りがあると思いますが、後者の「アプリのアイコンをタップ」して起動すると、中断中のゲームデータが初期化されてしまいます(アプリの最初から起動してしまいます)。

アイコンをタップする起動方法でも「アプリが既に起動中であれば途中から、そうでなければ通常通り起動」・・・のようにはできないのでしょうか。

初めてゲーム開発をしておりまして、C#に関してもまだまだ初心者でございます。自分だけでは方法を調べることができず、フォームにて質問させていただくことになりました。質問内容は初歩的なことかもしれませんが、ご協力お願いいたします。

Replies

tanaka733 on Mon, 28 Jan 2013 08:34:53


他のWindows Phoneアプリを見ると多くが、「アプリのアイコンをタップして起動」した場合は、以前の状態を復元せずに最初から起動しているような記憶があります。

また、MSDNマガジンの Windows Phone ナビゲーション: 基礎 にも、設計の目安としてそのように動くことをユーザーは期待していると書いてあります。
具体的にはゲームを進めていて途中でうまくいかなくなって最初からやり直したいと思ったとき、ユーザーはタイルから起動して最初の状態で起動することを期待している、ということではないかなと思っています。

ただ、技術的には可能だと思います。
アプリケーションがDeactivated になるイベントで必要な情報を分離ストレージに保存しておき、タイルをタップして起動するときの Launching イベントで保存された情報を確認して、なければ初期起動(もしくはユーザーによる選択を追加してもいいかも)、あればその状態を復元して起動、という処理にすることが可能かと思います。

Azulean on Mon, 28 Jan 2013 09:09:59


タイルからの起動は、既存のインスタンスの終了になってしまうことは Windows Phone 7.5 では避けられないと考えられます。
(参考:Windows Phone のアプリのアクティブ化および非アクティブ化
Windows Phone 8 からはタイルからの起動でも高速に再開するための仕組みが新たにできている状況ですから、そのように考えています。(参考:Windows Phone 8 の高速アプリ再開

もちろん、前回の状態を復元すると言うことはイベントをうまく使えば実現できると思いますが、前述のように OS からは新規起動のように振る舞うわけですから、「起動中であれば」ということは自分で定義し直さないといけません。(メニュー・タイトル画面で終了したとか、前回 Deactivated から一定時間経っていれば新規起動とみなすとか)

ueshiman on Sat, 02 Feb 2013 07:21:47


tanaka733 様

早速のご返信ありがとうございます。

なるほど、ナビゲーションの設計上、そのようになっていたのですね。では、今回のアプリはアプリアイコンから起動したら初期化される状態のままリリースしようと思います。
また、設計上の事を教えていただくだけでなく、さらに技術的な事まで教えていただきありがとうございました!
今後のアプリ開発に役立てたいと思います。

ueshiman on Sat, 02 Feb 2013 07:26:57


Azulean 様

早速のご返信ありがとうございます。
そうですか、7.5にはそのような仕様がないのですね。
現在はWindows8やWindowsPhone8のアプリ開発環境がないので、次回以降「8」のアプリ開発を行う際には仕様変更について考慮しながら設計していこうと思います。今回はあきらめてそのままでリリースいたします。

私はまだまだC#についてもWindowsPhoneアプリ開発についても初心者でございますので、非常に良い勉強になりました。
本当にありがとうございました!