LunarLander API デモを使用して、Android 用の RPG に取り組んでいます。私はすでにこのデモを使用してゲームを作成しているので (Porcupine Assassin、チェックしてみてください!)、Canvas クラスとその性質についてよく理解しています。
私の問題は、RPG ではインベントリや統計などにアクセスする方法が必要なことです。そのため、Inventory.java クラスを開始するように [戻る] ボタンを設定しました。インベントリ アクティビティを終了()してゲーム (SurfaceView) に戻ろうとすると、問題が発生します。
これは SurfaceCreated() コールバックです。
public void surfaceCreated(SurfaceHolder holder) {
thread.setRunning(true);
thread.start();
}
「IllegalThreadStateException: thread already started」が原因で FC が発生していたので、SurfaceCreated() コールバックに try/catch を入れました。try/catch では FC は発生しませんが、黒い画面に戻ります。
try/catch を取り出して、最初にチェックを追加してみました: if(!thread.isAlive())。そうすれば、スレッドがすでに開始されている場合、何もしません。奇妙なことに、同じ FC の「スレッドが既に開始されています」を取得したため、thread.isAlive() は false を返したに違いありません.. ??
API からの onWindowFocusChanged() メソッドもあります。
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (!hasWindowFocus) thread.pause();
else thread.setState(STATE_RUNNING);
}
私はこのゲームの側面にかなり熱心で、RPG の基礎のほとんどをレイアウトしました。しかし、私の頭を悩ませているのは、このすべての Android/Java のことです。誰かが私を正しい方向に向けることができますか?