• ベストアンサー

SurfaceViewの一時停止や再開方法

はじめてのjavaで、はじめてAndroidのゲームを作ってます。 SurfaceviewでThreadを使って簡単なSTGゲームを作ってるのですが (1)端末のメニューボタンを押した時に、ゲームを一時停止したいのですがどうすればいいのかわかりません。 (2)端末のホームボタンを押して中断した場合、すぐに復帰してもゲームが最初からになってしまいます。 ホームボタンを押したら一時的に中断して、復帰したときに途中から続行させたいのですが、どうすれば途中から続行できるようになるのかわかりません。 ググってもちんぷんかんぷんでした!どうか教えてください。よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

アプリケーションを切り替えた時・ホームボタンを押した時に、アプリケーションが発行されるイベントを調べ、その時にアプリケーションの状態をファイルに書き込みます。 自分のアプリケーションに復帰した時のイベントもあるので、その時ファイルからメモリに情報を読み戻します。 別の方法として同じイベントにおいて、Bundleという方法があるようですが…調べてみてください。申し訳ありません。 http://y-anz-m.blogspot.jp/2010/03/androidbundle.html http://techbooster.jpn.org/andriod/application/3706/

hsptarou
質問者

お礼

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

hsptarou
質問者

補足

ありがとうございます! 一時的な保存で良いので、まさに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); } } }

関連するQ&A