1

Androidの[ホーム]または[戻る]ボタンをクリックした後、ゲームを再起動する際に問題が発生します。

スレッドで部分的な解決策を見つけました: アプリを閉じて再度開くとAndroidがクラッシュしますが、再起動後のゲームが正しく機能しません。移動する画像/スプライトのみが表示されますが、タッチは表示されません。

//これはゲームビューにあります

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) { // ce se spremeni zaslon

}

public void surfaceCreated(SurfaceHolder holder) {

    createSprites();
    start();

}

public void start() {
    loop.setRunning(true);
    if (!mGameIsRunning) {
        loop.start();

        mGameIsRunning = true;
    } else {
        loop.onResume();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    while (retry) {
        try {
            loop.join();
            retry = false;

        } catch (InterruptedException e) {
        }
    }
}

//これはゲームスレッドです

    while (running) {
        canvas = null;
        try{
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) {
                beginTime = System.currentTimeMillis();
                framesSkipped = 0;
                this.gameView.update();
                this.gameView.render(canvas);
                synchronized (mPauseLock) {
                    while (mPaused) {
                        try {
                            mPauseLock.wait();
                        } catch (InterruptedException e) {
                        }
                    }
                }
                timeDiff = System.currentTimeMillis() - beginTime;
                sleepTime = (int)(FRAME_PERIOD - timeDiff);

                if (sleepTime > 0){
                    try{
                        Thread.sleep(sleepTime);                        
                    } catch (InterruptedException e) {
                    }
                }
            }
        } finally {
            if (canvas != null){
                surfaceHolder.unlockCanvasAndPost(canvas);
            }

        }
    }
}
public void onPause() {
    synchronized (mPauseLock) {
        mPaused = true;
    }
}

public void onResume() {
    synchronized (mPauseLock) {
        mPaused = false;
        mPauseLock.notifyAll();
    }
}

間違いや他の解決策があるかどうか誰かに教えてもらえますか?

手伝ってくれてありがとう。

または、誰かがゲームを停止して再開するための良い方法を教えてくれたら、お願いします。

家に帰ったときに動作するように修正しましたが、押して再起動すると画面が真っ暗になります。

//現在のゲームビューコード

public void surfaceCreated(SurfaceHolder holder) {
    if (loop==null)
        loop = new GameLoop(getHolder(), this);
     if(loop.getState() == Thread.State.TERMINATED)
     {
         loop = new GameLoop(getHolder(), this);
     }   

    start();

}

public void start() {
    if (!mGameIsRunning) {
        mGameIsRunning = true;
        loop.setRunning(true);
        loop.start();

    } else {
        loop.onResume();
        loop.start();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    loop.onPause(); 
}

方法に問題があるように感じますが、surfaceDestroyホームキーとバックキーの違いがわからないのでわかりません。

4

0 に答える 0