編集:コードから一歩離れたので、これは私にとってより理にかなっています。助けてくれてありがとう。
先日、Coding Horror でスタック オーバーフローを発見しましたが、すごいですね。私が現在解決しようとしている問題についてコミュニティに質問するとします。
midp 2.0 電話用の j2me を使用して、ローグライク ゲームを開発しています。プロジェクトはまだ開発の基本段階にあり、どのように機能するかを理解しています。私が現在立ち往生している部分は、スレッドに関係しています。
ゲームには、HaxCanvas
GameCanvas を拡張するカスタム クラスがあり、Runnable を実装します。run メソッドが repaint() を呼び出してから 50 ミリ秒スリープするため、フレーム レートは 20 FPS になります。これにより、ゲームの残りの部分をどこにでも再描画する必要がなく、後でアニメーションや効果を簡単に作成できるようになります。(少なくとも理論的には)。
ゲームの流れは GameManager クラスによって制御されます。このクラスは、マップ上のすべての NPC をループし、プレイヤーの番になるまで順番を繰り返します。この時点で、プレイヤーが動き回ったり攻撃したりできるようにするための入力を取得する必要があります。gameManager.runUntilHeroTurn()
私はもともと myのkeyPressed
メソッドで呼び出していましたHaxCanvas
。しかし、j2me システムスレッドを読んだ後、コールバックでしばらく実行される可能性のあるメソッドを配置するのは悪い考えであることに気付きました。getKeyStates()
ただし、数字キーにアクセスする必要があり、これをサポートしていないため、入力処理には keyPressed を使用する必要があります。
ゲームループを独自のスレッドに配置しようとすると、災害が発生しました。ゲームが数ターン実行された後、スタック トレースのない奇妙な「キャッチされない ArrayIndexOutOfBoundsException」が表示されます。
だから私は私の質問はこれだと思います:
j2me の「ターン ベース」ゲームの場合、ゲーム ループを実装して、プレイヤーのターンのときにのみ入力処理を許可する最良の方法は何ですか?