はじめてのjavaで、はじめてAndroidのゲームを作ってます。
SurfaceviewでThreadを使って簡単なSTGゲームを作ってるのですが
(1)端末のメニューボタンを押した時に、ゲームを一時停止したいのですがどうすればいいのかわかりません。
(2)端末のホームボタンを押して中断した場合、すぐに復帰してもゲームが最初からになってしまいます。
ホームボタンを押したら一時的に中断して、復帰したときに途中から続行させたいのですが、どうすれば途中から続行できるようになるのかわかりません。
ググってもちんぷんかんぷんでした!どうか教えてください。よろしくお願いします!
No.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);
}
}
}
すみません。上の補足は気にしないでください。
普通に出来ました。runの中で初期化してたというアホみたいな理由で毎回最初からになっていただけでした。。
でも結果的に解決できたので嬉しいです!
本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ブルーレイ・プレーヤー・レコーダー シャープ BD-S520 録画中の一時停止画面 4 2022/10/13 17:59
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- デスクトップパソコン ノートンが爆弾を残しているのか、Windowsディフェンダーが重いのかどっちなのでしょうか? 5 2023/05/06 12:01
- 洗濯・クリーニング・コインランドリー 【止まってばかりの洗濯機…これって洗えてますか?】 ※長文です。すみません とても困っておりますので 4 2022/03/30 11:50
- Android(アンドロイド) AQUOS sense6sの物理ボタン(アシスタントキー)に再生・一時停止を割り当てる方法 2 2022/08/09 00:37
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- 画像編集・動画編集・音楽編集 CyberLinkPowerDirectorでDVD作成時タイトル/チャプターのボタンが押せない 1 2023/04/09 12:30
- 健康・生活トーク エレベータを降りるときに、、、 1 2023/03/02 23:44
- モニター・ディスプレイ 長文です。デスクトップPCのHDMI入力機能について 4 2022/09/20 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
IISワーカープロセスが原因でCP...
-
GDIはいつ使われていますか?
-
ASP(VB).NETでの背景色変更
-
[VB.2005]クライアントからWEB...
-
32ビットのアプリで、64ビットO...
-
Delphiでヘルプメニューを右端に
-
C#のメモリマップドファイルに...
-
unzip32.dllの利用について(64b...
-
JavaアプリケーションからHTML...
-
Java でネイティブアプリケーシ...
-
JavaとObjective-c間でJNIエラー
-
SurfaceViewの一時停止や再開方法
-
RTT計測
-
プラグインとパッチの違いは?
-
HTMLアプリケーションの作成
-
VBAの「for i=1 to cells(…」...
-
データベースのデータをTextBox...
-
Javaでのエラーについて
-
使用しているJUnitのバージョン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
VBのWPFとはなんでしょうか?
-
IISワーカープロセスが原因でCP...
-
unzip32.dllの利用について(64b...
-
プラグインとパッチの違いは?
-
帳票出力について
-
このVBAでExcelアプリケーショ...
-
32ビットのアプリで、64ビットO...
-
C#のメモリマップドファイルに...
-
ログオフ中でもアプリケーショ...
-
C++からC#へ
-
意味が分からないエラー
-
予約システムの開発ツール
-
HTMLアプリケーションの作成
-
JAVAプログラムをWEB表示させる...
-
java3dが動かない
-
外部アプリケーションの呼び出し方
-
AccessとVBの違いについて
-
Javaアプレットで作成したレー...
-
SurfaceViewの一時停止や再開方法
おすすめ情報