4

私の状況を説明させてください:

ラウンドベースのペイ・トゥ・プレイのゲームを開発したいと思っています。つまり、ピンボールなどのゲームの 1 ラウンドに対して 1 コインを支払うということです。

問題は、中断が発生した場合、理想的にはゲームを一時停止し、ユーザーが望むたびに再開することです。それを実装するのは難しいようです。ゲームがバックグラウンドに置かれたとします。ゲームの状態を ApplicationDidEnterBackground に保存します。ただし、バックグラウンドでゲームが終了する場合と終了しない場合があります。したがって、次の起動は「新たなスタート」または「最後に保存された状態からの再開」になる可能性があります。

アプリがバックグラウンドで十分長い間 (たとえば 1 週間) 放置されている場合、他のアプリがメモリをめぐって争っているため、ある時点でゲームが終了することはほぼ確実です。ユーザーがアプリを再度起動すると、新しいラウンドからプレイすることになります。つまり、以前に完了していなかったゲームがなくなったことを意味します。

顧客の観点からすると、これは不公平です。

私が考えることができるのは、アプリがフォアグラウンドに移動するたびに、保存されたゲームがあるかどうかを確認するように実装することです。もしあれば、代わりに再開します。これはセキュリティ上の問題を引き起こします:

最も原始的な plist 形式またはその他の形式で保存されたゲームは永続化され、セキュリティ上の問題が生じます。(プレイヤーがゲームの状態を編集し、トップ スコアとして 1000 万ポイントを獲得するとどうなるか...など)

これらの問題に対処するための推奨される方法はありますか?

一部のアプリはゲームの保存を単にあきらめ、再開時に新しいラウンドが開始されます。それらはゲームをプレイするために支払われるものではありません。

ゲームの状態を保存するアプリをしばらく見たことがありますが、終了すると、次の起動時に新しいラウンドが開始されます。これは、プレーヤーが実際にラウンドにお金を支払った場合と同様に受け入れられないようです。

また、クラッシュの可能性を考慮すると、有料の顧客がゲームを完全にプレイできるようにするための適切な解決策を思いつくことはできません。関連する経験を持つ人が自分の考えや意思決定方法を共有してくれると本当に助かります.

4

2 に答える 2

3

ラウンド終了を支払いに結びつけてみませんか?ラウンドが終了しない場合、支払いは行われません。ラウンドが終了した時点でユーザーのクレジットが不十分な場合は、現在のラウンドを終了するために (アプリ内購入を介して) すぐに追加のクレジットを購入するオプションをユーザーに与えることができます。

これにより、開発者としてのタスクが簡素化され、不快でない方法で追加の支払いをユーザーに促す方法も提供されます。

于 2011-08-15T06:13:48.840 に答える
2

これは、 NSCodingを使用してゲームの状態を保存するための優れたチュートリアルです。NSCoding で行われるように、プレーヤーがファイルを編集することに問題はありません。ユーザーが本当にファイルのエンコードを解除して内容を変更する方法を知りたい場合は、ファイルに書き込む前にデータに何らかの暗号化を行うことができるため、ユーザーができる方法はありません。それを変更。それが役立つことを願っています!

于 2011-08-15T05:28:42.050 に答える