0

私が取り組んでいる Android ゲームでは、ゲームはバックグラウンドで Android によって強制終了されます。ゲームは AndEngine を使用して構築されているため、シーンを使用してメニューとゲームの間を移動する単一の OpenGL アクティビティ内ですべてが実行されます。ゲームシーンがアクティブな間 (つまり、ユーザーが実際にゲームをプレイしている間) にバックグラウンドに移動された場合、ゲームを存続させたいと考えています。

  • Androidがそれを殺さないようにフォアグラウンドサービスとして実行することについて読んだことがありますが、ゲームは単一のアクティビティにすぎないので、それは可能ですか?

最適には、ゲームがバックグラウンドで進行中の場合に進行中の通知を表示し、ユーザーがクリックしてゲームをフォアグラウンドに戻すことができるようにしたいと考えています。(この動作の例は GBA Emulator GameBoid です)

4

1 に答える 1

1

Androidでの一時停止/再開状態の処理

一時停止と再開の状態の処理は、Androidでは一般的にトリッキーであり、AndEngineではさらにトリッキーです。Androidでの一時停止と再開の一般的な処理について読むことから始めたいと思うかもしれません。そのため、たとえば、電話がかかってきたときやユーザーが電源ボタンを押したときに、Androidによってどのメソッドが呼び出されるかがわかります。これらのQ&Aを見てください:

次に、AndEngine固有のものについて説明します。1つのアプローチ(ここから取得)は、JSONを使用して状態をシリアル化することです。@plastic-surgeonは次のように述べています。

私が見つけた解決策は、エンジンの状態をJSONとしてシリアル化し、共有ストレージとして保存することでした。それは多くの作業ですが、それはそれを節約します。andengineは一時停止後にエンジンとテクスチャを再初期化するため、ゲーム用にandengineの一部を書き直したい場合を除いて、選択肢は多くないと思います。(あなたができる)

私のJSONには、各スプライトの位置タイプの速度などを記録します。保存されるものの複雑さは、ゲームの複雑さによって異なります。次に、各クラスに、JSONを入力として受け入れる逆シリアル化メソッドを追加しました。

@plastic-surgeonのおかげで、私はGSONを発見しました。彼が言うように、それは完全にそして完全にかけがえのないものです。

通知の投稿

さて、あなたの質問の最後の部分については、「ゲームがバックグラウンドで進行中の場合は、進行中の通知を表示したいのですが」、次のいずれかについて話していると思います。

通知

状態の一時停止と再開に関する基本的なハンドルを取得したら、通知に取り組みます。通知を行うには、通知領域への通知の表示についてよく読んでください。アイデアを与えるためのサンプルコードを次に示します。

NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!");
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ResultActivity.class);

// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
            0,
            PendingIntent.FLAG_UPDATE_CURRENT
        );
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(mId, mBuilder.build());

通知の作成と表示の詳細については、Googleのデベロッパードキュメントをご覧ください。

于 2013-02-21T02:00:11.873 に答える