キーマップのカスタマイズ link
変数 config.keymap
はイベント名からそのイベントを発生させるキーシンボルのリストへのマップを含みます。
注釈
多くの人々は Ren'Py のキーバインディングのデフォルト設定を経験しているので、ゲーム間でのそれらの一致を期待します。
Ren'Py ではキーシンボルはマウスボタン、ジョイスティック、キーボードキーを表す文字列です。
マウスボタンは 「 mouseup_# 」や「 mousedown_# 」の形式でキーシンボルを使用します。ここでの # はボタン番号です。 Ren'Py は5 つのボタン 1, 2, 3 をそれぞれ左、中、右ボタン、 4, 5 はホイールアップ、ホイールダウンと解釈します。例えば「 mousedown_1 」は左ボタンを押したとき「 mousedown_4 」はホイールを上方に回した時です。
2 種類のキーシンボルが存在します。 1 つ目はキーが押されると生成される文字を含める文字列です。 これはアルファベットキーと数字に対するバインディングに便利です。例えばこれらのキーシンボルには 「 a 」、「 A 」、「 7 」 があります。これらは大文字小文字が判別されるため、 "a" は "A" とマッチしないので注意してください。この種のキーシンボルはイベントがテキストを生成するときのみ使えます。例えばあるキーが解放されてもテキストは生成されないため "keyup_a" にはマッチしません。
キーボードのキーシンボルにはそのキーのシンボル名も可能です。これは pygame.constants から所得するどんな k_ 定数も可能で、この形式のキーシンボルは「 K_BACKSPACE 」,「 K_RETURN 」, 「 K_TAB 」のようになります。この種類のキーシンボルの完全なリストは こちら で見つけられます。
キーボードのキーシンボルには以下の接頭辞がアンダースコア区切りでつくかもしれません。 :
- alt
alt キーが押されているとマッチします。 alt キーが押されていないとこの接頭辞がないキーシンボルがマッチします。
- meta
meta、コマンド、ウィンドウズキーが押されているとマッチします。 meta キーが押されていないとこの接頭辞がないキーシンボルがマッチします。
- ctrl
ctrl キーが押されているとマッチします。 ctrl キーが押されていないとこの接頭辞がないキーシンボルがマッチします( ctrl キーは普通スキップに使用するので不便です)。
- osctrl
これは Mac では alt, それ以外では Ctrl になります。
- anymod
Alt、Meta、または Ctrl キーの状態に関係なく一致します。
- shift
Shift キーが押されているとマッチします。
- noshift
Shift キーが押されていないとマッチします。
- caps
caps lock キーがオンでッチします。
- nocaps
caps lock キーがオフでマッチします。
- num
Num lockキーがオンでマッチします。
- nonum
Num lockキーがオフでマッチします。
- repeat
キーが押しっぱなしでリピートされているときマッチします。 repeat やその他の接頭辞がないとリピートにマッチしません(マウスボタンでは動作しません)。
- anyrepeat
最初のキー押下と repeat の両方にマッチします。
- keydown
そのキーが押されているとマッチします(default)。
- keyup
そのキーが離されるとマッチします。
例えば "shift_alt_K_F5" は shift と alt を押しながら F5 キーを押した場合にマッチします。"shift_mouse_1" は shift を押しながら左マウスボタンを押した場合にマッチします。
バインディングを変更するには、 変数 config.keymap
の適切なリストを更新します。以下のコードは 't' キーを say ステートメントを進行させるキーのリストに加え、そのリストからスペースキーを取り除きます。
init python:
config.keymap['dismiss'].append('K_t')
config.keymap['dismiss'].remove('K_SPACE')
デフォルトのキーマップは renpy/common/00keymap.rpy にあります。バージョン 8.1.0 では以下のようになっています
config.keymap = dict(
# Bindings present almost everywhere, unless explicitly
# disabled.
rollback = [ 'any_K_PAGEUP', 'any_KP_PAGEUP', 'K_AC_BACK', 'mousedown_4' ],
screenshot = [ 'alt_K_s', 'alt_shift_K_s', 'noshift_K_s' ],
toggle_afm = [ ],
toggle_fullscreen = [ 'alt_K_RETURN', 'alt_K_KP_ENTER', 'K_F11', 'noshift_K_f' ],
game_menu = [ 'K_ESCAPE', 'K_MENU', 'K_PAUSE', 'mouseup_3' ],
hide_windows = [ 'mouseup_2', 'noshift_K_h' ],
launch_editor = [ 'shift_K_e' ],
dump_styles = [ ],
reload_game = [ 'alt_K_r', 'shift_K_r' ],
inspector = [ 'alt_K_i', 'shift_K_i' ],
full_inspector = [ 'alt_shift_K_i' ],
developer = [ 'alt_K_d', 'shift_K_d', ],
quit = [ ],
iconify = [ ],
help = [ 'K_F1', 'meta_shift_/' ],
choose_renderer = ['alt_K_g', 'shift_K_g' ],
progress_screen = [ 'alt_shift_K_p', 'meta_shift_K_p', 'K_F2' ],
accessibility = [ 'K_a' ],
# Accessibility.
self_voicing = [ 'alt_K_v', 'K_v' ],
clipboard_voicing = [ 'alt_shift_K_c', 'shift_K_c' ],
debug_voicing = [ 'alt_shift_K_v', 'meta_shift_K_v' ],
# Say.
rollforward = [ 'any_K_PAGEDOWN', 'any_KP_PAGEDOWN', 'mousedown_5', ],
dismiss = [ 'K_RETURN', 'K_SPACE', 'K_KP_ENTER', 'K_SELECT', 'mouseup_1' ],
dismiss_unfocused = [ ],
# Pause.
dismiss_hard_pause = [ ],
# Focus.
focus_left = [ 'any_K_LEFT', 'any_KP_LEFT' ],
focus_right = [ 'any_K_RIGHT', 'any_KP_RIGHT' ],
focus_up = [ 'any_K_UP', 'any_KP_UP' ],
focus_down = [ 'any_K_DOWN', 'any_KP_DOWN' ],
# Button.
button_ignore = [ 'mousedown_1' ],
button_select = [ 'K_RETURN', 'K_KP_ENTER', 'K_SELECT', 'mouseup_1', ],
button_alternate = [ 'mouseup_3' ],
button_alternate_ignore = [ 'mousedown_3' ],
# Input.
input_backspace = [ 'any_K_BACKSPACE' ],
input_enter = [ 'K_RETURN', 'K_KP_ENTER' ],
input_next_line = [ 'shift_K_RETURN', 'shift_K_KP_ENTER' ],
input_left = [ 'any_K_LEFT', 'any_KP_LEFT' ],
input_right = [ 'any_K_RIGHT', 'any_KP_RIGHT' ],
input_up = [ 'any_K_UP', 'any_KP_UP' ],
input_down = [ 'any_K_DOWN', 'any_KP_DOWN' ],
input_delete = [ 'any_K_DELETE', 'any_KP_DELETE' ],
input_home = [ 'K_HOME', 'KP_HOME', 'meta_K_LEFT' ],
input_end = [ 'K_END', 'KP_END', 'meta_K_RIGHT' ],
input_copy = [ 'ctrl_noshift_K_INSERT', 'ctrl_noshift_K_c', 'meta_noshift_K_c' ],
input_paste = [ 'shift_K_INSERT', 'ctrl_noshift_K_v', 'meta_noshift_K_v' ],
input_jump_word_left = [ 'osctrl_K_LEFT', 'osctrl_KP_LEFT' ],
input_jump_word_right = [ 'osctrl_K_RIGHT', 'osctrl_KP_RIGHT' ],
input_delete_word = [ 'osctrl_K_BACKSPACE' ],
input_delete_full = [ 'meta_K_BACKSPACE' ],
# Viewport.
viewport_leftarrow = [ 'any_K_LEFT', 'any_KP_LEFT' ],
viewport_rightarrow = [ 'any_K_RIGHT', 'any_KP_RIGHT' ],
viewport_uparrow = [ 'any_K_UP', 'any_KP_UP' ],
viewport_downarrow = [ 'any_K_DOWN', 'any_KP_DOWN' ],
viewport_wheelup = [ 'mousedown_4' ],
viewport_wheeldown = [ 'mousedown_5' ],
viewport_drag_start = [ 'mousedown_1' ],
viewport_drag_end = [ 'mouseup_1' ],
viewport_pageup = [ 'any_K_PAGEUP', 'any_KP_PAGEUP'],
viewport_pagedown = [ 'any_K_PAGEDOWN', 'any_KP_PAGEDOWN' ],
# These keys control skipping.
skip = [ 'K_LCTRL', 'K_RCTRL' ],
stop_skipping = [ ],
toggle_skip = [ 'K_TAB' ],
fast_skip = [ '>', 'shift_K_PERIOD' ],
# Bar.
bar_activate = [ 'mousedown_1', 'K_RETURN', 'K_KP_ENTER', 'K_SELECT' ],
bar_deactivate = [ 'mouseup_1', 'K_RETURN', 'K_KP_ENTER', 'K_SELECT' ],
bar_left = [ 'any_K_LEFT', 'any_KP_LEFT' ],
bar_right = [ 'any_K_RIGHT', 'any_KP_RIGHT' ],
bar_up = [ 'any_K_UP', 'any_KP_UP' ],
bar_down = [ 'any_K_DOWN', 'any_KP_DOWN' ],
# Delete a save.
save_delete = [ 'K_DELETE', 'KP_DELETE' ],
# Draggable.
drag_activate = [ 'mousedown_1' ],
drag_deactivate = [ 'mouseup_1' ],
# Debug console.
console = [ 'shift_K_o', 'alt_shift_K_o' ],
console_older = [ 'any_K_UP', 'any_KP_UP' ],
console_newer = [ 'any_K_DOWN', 'any_KP_DOWN' ],
# Director
director = [ 'noshift_K_d' ],
# Ignored (kept for backwards compatibility).
toggle_music = [ ],
viewport_up = [ ],
viewport_down = [ ],
# Profile commands.
performance = [ 'K_F3' ],
image_load_log = [ 'K_F4' ],
profile_once = [ 'K_F8' ],
memory_profile = [ 'K_F7' ],
)
ゲームパッドのバインディグは少し違う動作をします。ゲームパッドバインディグはゲームパッドのイベントをひとつ以上の Ren'Pyのイベント名に対応させて動作します。デフォルトの設定は以下の通りです。
config.pad_bindings = {
"pad_leftshoulder_press" : [ "rollback", ],
"pad_lefttrigger_pos" : [ "rollback", ],
"pad_back_press" : [ "rollback", ],
"repeat_pad_leftshoulder_press" : [ "rollback", ],
"repeat_pad_lefttrigger_pos" : [ "rollback", ],
"repeat_pad_back_press" : [ "rollback", ],
"pad_guide_press" : [ "game_menu", ],
"pad_start_press" : [ "game_menu", ],
"pad_y_press" : [ "hide_windows", ],
"pad_x_press" : [ "button_alternate" ],
"pad_rightshoulder_press" : [ "rollforward", ],
"repeat_pad_rightshoulder_press" : [ "rollforward", ],
"pad_righttrigger_pos" : [ "dismiss", "button_select", "bar_activate", "bar_deactivate" ],
"pad_a_press" : [ "dismiss", "button_select", "bar_activate", "bar_deactivate"],
"pad_b_press" : [ "game_menu" ],
"pad_dpleft_press" : [ "focus_left", "bar_left", "viewport_leftarrow" ],
"pad_leftx_neg" : [ "focus_left", "bar_left", "viewport_leftarrow" ],
"pad_rightx_neg" : [ "focus_left", "bar_left", "viewport_leftarrow" ],
"pad_dpright_press" : [ "focus_right", "bar_right", "viewport_rightarrow" ],
"pad_leftx_pos" : [ "focus_right", "bar_right", "viewport_rightarrow" ],
"pad_rightx_pos" : [ "focus_right", "bar_right", "viewport_rightarrow" ],
"pad_dpup_press" : [ "focus_up", "bar_up", "viewport_uparrow" ],
"pad_lefty_neg" : [ "focus_up", "bar_up", "viewport_uparrow" ],
"pad_righty_neg" : [ "focus_up", "bar_up", "viewport_uparrow" ],
"pad_dpdown_press" : [ "focus_down", "bar_down", "viewport_downarrow" ],
"pad_lefty_pos" : [ "focus_down", "bar_down", "viewport_downarrow" ],
"pad_righty_pos" : [ "focus_down", "bar_down", "viewport_downarrow" ],
"repeat_pad_dpleft_press" : [ "focus_left", "bar_left", "viewport_leftarrow" ],
"repeat_pad_leftx_neg" : [ "focus_left", "bar_left", "viewport_leftarrow" ],
"repeat_pad_rightx_neg" : [ "focus_left", "bar_left", "viewport_leftarrow" ],
"repeat_pad_dpright_press" : [ "focus_right", "bar_right", "viewport_rightarrow" ],
"repeat_pad_leftx_pos" : [ "focus_right", "bar_right", "viewport_rightarrow" ],
"repeat_pad_rightx_pos" : [ "focus_right", "bar_right", "viewport_rightarrow" ],
"repeat_pad_dpup_press" : [ "focus_up", "bar_up", "viewport_uparrow" ],
"repeat_pad_lefty_neg" : [ "focus_up", "bar_up", "viewport_uparrow" ],
"repeat_pad_righty_neg" : [ "focus_up", "bar_up", "viewport_uparrow" ],
"repeat_pad_dpdown_press" : [ "focus_down", "bar_down", "viewport_downarrow" ],
"repeat_pad_lefty_pos" : [ "focus_down", "bar_down", "viewport_downarrow" ],
"repeat_pad_righty_pos" : [ "focus_down", "bar_down", "viewport_downarrow" ],
}
ゲームパッドのボタンには "pad_*button*_press" や "pad_*button*_release" の形式でイベント名があります。アナログ軸イベントには "pad_*axis*_pos" や "pad_*axis*_neg", "pad_*axis*_zero" 形式のイベント名があります。ゲームパッドの入力が続けば、 "repeat_" 接頭辞付きで生成されます。
特別な初期化なしに動作しないゲームパッドはデフォルトでは無効です。これにはPCでの動作に特別な初期化を必要とする Nintendo Switch Pro Controller を含みます。このブロックリストは config.controller_blocklist
で制御されます。
- renpy.clear_keymap_cache() link
キーマップのキャッシュをクリアします。これにより Ren'Py を再起動せずに
config.keymap
の変更を反映します。