スプラッシュ・スクリーンや各章の節目等でアニメーションを跳ばせないようにしたい部分が出てきた。
Pause
トランジションの引数にhard=True
を加えればよいのかと言えばそうでもなかったので、今回は一時的なキーマップの無効化について記載することにした。
キーマップについて
ドキュメントを読めば理解できることだが、config.keymap
辞書に設定が格納されている。
キーマップの変更
上記の辞書config.keymap
の値を変更すればよい。
config.keymap['hide_windows'].append('K_SPACE') config.keymap['dismiss'].remove('K_SPACE')
この例ではSpaceキーでウィンドウの表示/非表示を行い、デフォルトのdismiss
アクションを無効化している。
キーマップの無効化
左クリックやEnterキーによる次テキストへの移動はconfig.keymap['dismiss']
に該当する。
特定のキーマップを無効化したい場合は、押した時のアクションを空にすればよい。
key 'dismiss' action NullAction()
キー単位の動作の無効化も同様に、key 'mouseup_1' action NullAction()
等とすればよい。
しかし、この操作をラベル内に記述すると後の操作でアクションを元に戻す必要が出てくる。
そこでスクリーンで導入することにした。(記述はinit
ブロックで行う)
screen disable_dismiss: key 'dismiss' action NullAction()
無効化したい場面でshow screen disable_dismiss
を実行し、無効化を破棄するならばhide screen disable_dismiss
とすればよい。
しかし、他のアクションの無効化には対応しておらず汎用性に欠けるので少しカスタマイズを行う。
screen disable_actions(*acts): for act in acts: key act action NullAction()
これでほとんどのアクションに対応はずだ。
複数を無効化したい場合は、disable_actions("dismiss", "game_menu")
のように引数で指定すればよい。
使用例
前回扱ったスプラッシュ・スクリーンの表示時にdismiss
アクションを無効化する。
image bg white = "#fff" image splash = "splash.png" label splashscreen: show screen disable_actions("dismiss") scene black $ renpy.pause(1.0) scene bg white with dissolve show splash at truecenter with dissolve $ renpy.pause(2.0) scene black with dissolve $ renpy.pause(1.0) hide screen disable_actions return
注意点1
dismiss
アクションはトランジションwith Pause(1.0)
やpause(1.0)
といった一時停止処理時のクリックには該当しない。
そのため、これらを使用しても画面は強制遷移してしまう。また、pause
は指定秒後に下の行を実行するというもので、2行でセットとなる。一時停止時に強制遷移させると下のテキストは表示されない。
このような理由から、$ renpy.pause(1.0)
による代用を推奨しておく。
注意点2
キーマップの変更と同様、一時的にconfig.keymap
から値を削除すればいいじゃないか、と考える人もいるだろう。
筆者はこれで失敗した。
init
ブロック外で、
config.keymap['dismiss'].remove('mouseup_1')
等の操作を行いキーマップから削除すると、該当アクションは無効化されるが、
config.keymap['dismiss'].apeend('mouseup_1')
で再び追加しても有効化はされない。
明示的に再読込を行えば解決する可能性もあるが、config.keymap
の変更はinit
ブロック内で完結するべきである。
あとがき
今週月曜日にノベルベームのベータ版(体験版の位置づけ)第1節が公開された。
指定された動作のみを実装したのでとても簡素であるが、調べた演出方法は後々追加していこうと思う。
コメント