ラストはおまけ。
↓のエントリーで書いた、ポーズ機能を作り直した話を少々。
coro3.hatenablog.jp
この時の実現方法は、ポーズキーを押したら、gosubでポーズルーチンに飛ばし、無限ループにして、次にポーズキーが押されるまで、元の処理にreturnしないというものだった。
いろいろと情報を見てると、この方法は一部ヤバかった。
無限ループにしたときは、await命令を入れてないとだめというルールがあったのだ。
ただし、そのために1つだけHSPのスクリプトを作る上で約束事があります。 HSPでは「キーを押さないと進まないなどの無限にループになる可能性のある部分では、 必ずwaitかawait命令を入れる必要がある」という約束事を覚えておいてください。
HSP3プログラミングマニュアルより
で、いくらポーズ機能を告知していなくても、このままヤバいものを公開しておくのも嫌なので、ポーズ機能を作り直すことにした。
今のルーチンへ単純にawait 5とかを入れるだけでも良かったが、この方法だと、redrawができないので、新たに何か表示を付け加えられない。
そこでもう少しいろいろ調べたら、スプライトの描画を行うes_drawには、処理を保留するフラグの引数があった。
値 マクロ名 内容 ――――――――――――――――――――――――――――― 0 ESDRAW_NORMAL すべての処理を実行する 1 ESDRAW_NOMOVE 移動処理を保留する 2 ESDRAW_NOANIM アニメーションを保留する 4 ESDRAW_NOCALLBACK コールバックルーチンを保留する 8 ESDRAW_NODISP 表示を保留する 16 ESDRAW_NOSORT ソートを保留する
es_drawのヘルプより
複数の処理を保留したければ、HSP3ではお約束の通り、足した数を指定すればよい。
今回、ポーズ機能で使用したのは、1の移動処理保留と、2のアニメーションの保留。
なので、引数には3を指定すれば、その間、スプライトは表示されるけど、es_adirの自動移動は停止するし、もともとアニメパターンで定義していたスプライトは、アニメーションを停止できた。
こんな感じ。
es_draw ,,(pauseflg=1)*3,0,10000 ;スプライト描画
ポーズボタンを押したら、pauseflgを1にする。1になっていれば、論理式が成立して3を、通常の状態なら0を処理保留フラグとして指定する。
あとはポーズ中に移動を受け付けないようにしたり、ゲーム内カウンタがintの最大値を超えないように、カウンタリセットの処理を加えた。
何より、redraw 0~redraw 1の処理を行うので、ポーズ中は、画面内に「PAUSE」の文字を点滅表示できるようになったので、わかりやすくなった。
培養臼の作成に関するエントリーは、いったんこれで終了。
次からは、次作に向けての準備などについて書いて行こうと思う。