キーマップのカスタマイズ 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

これはマッキントッシュでは alt, それ以外では Ctrl になります。

shift

Shift キーが押されているとマッチします。

noshift

Shift キーが押されていないとマッチします。

caps

caps lock キーがオンでッチします。

nocaps

caps lock キーがオフでマッチします。

num

Num lockキーがオンでマッチします。

nonum

Num lockキーがオフでマッチします。

repeat

キーが押しっぱなしでリピートされているときマッチします。 repeat やその他の接頭辞がないとリピートにマッチしません(マウスボタンでは動作しません)。

any

最初のキー押下と 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_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" : [ "button_alternate" ],

    "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 の変更を反映します。