プロが教える店舗&オフィスのセキュリティ対策術

はじめてのjavaで、はじめてAndroidのゲームを作ってます。
SurfaceviewでThreadを使って簡単なSTGゲームを作ってるのですが

(1)端末のメニューボタンを押した時に、ゲームを一時停止したいのですがどうすればいいのかわかりません。

(2)端末のホームボタンを押して中断した場合、すぐに復帰してもゲームが最初からになってしまいます。
ホームボタンを押したら一時的に中断して、復帰したときに途中から続行させたいのですが、どうすれば途中から続行できるようになるのかわかりません。

ググってもちんぷんかんぷんでした!どうか教えてください。よろしくお願いします!

A 回答 (1件)

アプリケーションを切り替えた時・ホームボタンを押した時に、アプリケーションが発行されるイベントを調べ、その時にアプリケーションの状態をファイルに書き込みます。


自分のアプリケーションに復帰した時のイベントもあるので、その時ファイルからメモリに情報を読み戻します。

別の方法として同じイベントにおいて、Bundleという方法があるようですが…調べてみてください。申し訳ありません。

http://y-anz-m.blogspot.jp/2010/03/androidbundle …

http://techbooster.jpn.org/andriod/application/3 …

この回答への補足

ありがとうございます!
一時的な保存で良いので、まさにBundleの方法で作りたいのですが、
onRestoreInstanceStateが呼び出されなくて、書き出しできませんでした・・・。
surfaceview側にも構成の違うParcelable onSaveInstanceState(),onRestoreInstanceState(Parcelable state)があるようで調べても、うまくできません。

もしよければ、↓のソースのScoreの値をホームボタン押したら一時的に保存して、すぐに復帰した場合に続きからカウントされるように書き換えたソースを教えてください。よろしくお願いします。
//----
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView);
}
}

//----
public class MySurfaceView extends SurfaceView implements

SurfaceHolder.Callback, Runnable {

int score;
Thread thread;

public MySurfaceView(Context context) {
super(context);
getHolder().addCallback(this);
}

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {}
public void surfaceCreated(SurfaceHolder holder) {
thread = new Thread(this);
thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
thread = null;
}

public void run() {
Canvas canvas = null;
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(50);

while (thread != null) {
score++;
canvas = getHolder().lockCanvas();
if (canvas != null){
canvas.drawColor(Color.BLACK);
canvas.drawText("score" + score, 0, 50, paint);
getHolder().unlockCanvasAndPost(canvas);
}
}
}

補足日時:2013/06/19 18:37
    • good
    • 0
この回答へのお礼

すみません。上の補足は気にしないでください。
普通に出来ました。runの中で初期化してたというアホみたいな理由で毎回最初からになっていただけでした。。
でも結果的に解決できたので嬉しいです!
本当にありがとうございました!

お礼日時:2013/06/19 19:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!