ターン制御がうまくいかなかった理由
実は、Rot.jsのゲームエンジンはロック中でもキー入力ができるということがわかりました。
ゲームエンジンのロックは、あくまでエネミーにターンが進まないようにするためであり、キー操作を制御するものではなかったわけです。
なので、移動が終わってからキーボードリスナーを削除するのでは遅すぎます。
考えてみれば理にかなっています。ステータスや所持品の確認をしただけで自分のターンが終わってしまったら、やりずらくて仕方ないです。
Rot.jsはUNIX時代のローグライクゲームを対象にしたライブラリなので、アニメーションによる遅延とかは考慮されていないのだと思います。
今回、tweenerでの移動は400ミリ秒かかるように設定しています。
そのため、移動終了までの400ミリ秒の間はリスナーが生きてますので、キー入力がされていきます。
なので、キーが押されたらすぐにリスナーを削除する必要があります。
phina.jsでは、tweener.playingで移動中かどうかをチェックできます。
今回はそれを使って、移動アニメーションが実行中の場合はキー入力を受け付けないようにしました。
盲点だったこと
ちなみに、プレイヤーのtweener.playingだけでは不十分です。
ちゃんとマップのtweener.playingも確認しなければなりません。
そうしないとマップスクロールのアニメーションが遅延してしまいます。
Mapスクロールも付けて完成
エンジントラブルを解決し、Mapスクロールを付けたものがこちらになります。
Rot.jsのゲームエンジンは、すこしカクつきがあります。
個人的に少し気になるので解決したいですが、ゲームをプレイする上では特に問題がないので、余裕のある時にちまちまやろうと思います。
本日の進捗は以上です。
それでは。