キーマップのカスタマイズ 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" とマッチしないので注意してください。

キーボードのキーシンボルにはそのキーのシンボル名も可能です。これは pygame.constants から所得するどんな k_ 定数も可能で、この形式のキーシンボルは「 K_BACKSPACE 」,「 K_RETURN 」, 「 K_TAB 」のようになります。この種類のキーシンボルの完全なリストは こちら で見つけられます。

キーボードのキーシンボルには以下の接頭辞がアンダースコア区切りでつくかもしれません。

alt

alt キーが押されているとマッチします。 alt キーが押されていないとこの接頭辞がないキーシンボルがマッチします。

meta

meta、コマンド、ウィンドウズキーが押されているとマッチします。 meta キーが押されていないとこの接頭辞がないキーシンボルがマッチします。

ctrl

ctrl キーが押されているとマッチします。 ctrl キーが押されていないとこの接頭辞がないキーシンボルがマッチします( ctrl キーは普通スキップに使用するので不便です)。

shift

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

noshift

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

repeat

キーが押しっぱなしでリピートされているときマッチします。この接頭辞がないとリピートにマッチしません。

keydown

そのキーが押されているとマッチします(default)。

keyup

そのキーが離されるとマッチします。

例えば "shift_alt_K_F5" は shift と alt を押しながら F5 キーを押した場合にマッチします。

バインディングを変更するには、 変数 config.keymap の適切なリストを更新します。以下のコードは 't' キーを say ステートメントを進行させるキーのリストに加え、そのリストからスペースキーを取り除きます。

init:
    $ config.keymap['dismiss'].append('t')
    $ config.keymap['dismiss'].remove('K_SPACE')

デフォルトのキーマップは、Ren'Py の実装コードの内部に含まれています。バージョン 7.4では以下のようになっています:

config.keymap = dict(

    # Bindings present almost everywhere, unless explicitly
    # disabled.
    rollback = [ 'K_PAGEUP', 'repeat_K_PAGEUP', 'K_AC_BACK', 'mousedown_4' ],
    screenshot = [ 's', 'alt_K_s', 'alt_shift_K_s', 'noshift_K_s' ],
    toggle_afm = [ ],
    toggle_fullscreen = [ 'f', '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', 'h', 'noshift_K_h' ],
    launch_editor = [ 'E', 'shift_K_e' ],
    dump_styles = [ ],
    reload_game = [ 'R', 'alt_shift_K_r', 'shift_K_r' ],
    inspector = [ 'I', 'shift_K_i' ],
    full_inspector = [ 'alt_shift_K_i' ],
    developer = [ 'shift_K_d', 'alt_shift_K_d' ],
    quit = [ ],
    iconify = [ ],
    help = [ 'K_F1', 'meta_shift_/' ],
    choose_renderer = [ 'G', 'alt_shift_K_g', 'shift_K_g' ],
    progress_screen = [ 'alt_shift_K_p', 'meta_shift_K_p', 'K_F2' ],
    accessibility = [ "K_a" ],

    # Accessibility.
    self_voicing = [ 'v', 'V', 'alt_K_v', 'K_v' ],
    clipboard_voicing = [ 'C', 'alt_shift_K_c', 'shift_K_c' ],
    debug_voicing = [ 'alt_shift_K_v', 'meta_shift_K_v' ],

    # Say.
    rollforward = [ 'mousedown_5', 'K_PAGEDOWN', 'repeat_K_PAGEDOWN' ],
    dismiss = [ 'mouseup_1', 'K_RETURN', 'K_SPACE', 'K_KP_ENTER', 'K_SELECT' ],
    dismiss_unfocused = [ ],

    # Pause.
    dismiss_hard_pause = [ ],

    # Focus.
    focus_left = [ 'K_LEFT', 'repeat_K_LEFT' ],
    focus_right = [ 'K_RIGHT', 'repeat_K_RIGHT' ],
    focus_up = [ 'K_UP', 'repeat_K_UP' ],
    focus_down = [ 'K_DOWN', 'repeat_K_DOWN' ],

    # Button.
    button_ignore = [ 'mousedown_1' ],
    button_select = [ 'mouseup_1', 'K_RETURN', 'K_KP_ENTER', 'K_SELECT' ],
    button_alternate = [ 'mouseup_3' ],
    button_alternate_ignore = [ 'mousedown_3' ],

    # Input.
    input_backspace = [ 'K_BACKSPACE', 'repeat_K_BACKSPACE' ],
    input_enter = [ 'K_RETURN', 'K_KP_ENTER' ],
    input_left = [ 'K_LEFT', 'repeat_K_LEFT' ],
    input_right = [ 'K_RIGHT', 'repeat_K_RIGHT' ],
    input_up = [ 'K_UP', 'repeat_K_UP' ],
    input_down = [ 'K_DOWN', 'repeat_K_DOWN' ],
    input_delete = [ 'K_DELETE', 'repeat_K_DELETE' ],
    input_home = [ 'K_HOME' ],
    input_end = [ 'K_END' ],
    input_copy = [ 'ctrl_noshift_K_INSERT', 'ctrl_noshift_K_c' ],
    input_paste = [ 'shift_K_INSERT', 'ctrl_noshift_K_v' ],

    # Viewport.
    viewport_leftarrow = [ 'K_LEFT', 'repeat_K_LEFT' ],
    viewport_rightarrow = [ 'K_RIGHT', 'repeat_K_RIGHT' ],
    viewport_uparrow = [ 'K_UP', 'repeat_K_UP' ],
    viewport_downarrow = [ 'K_DOWN', 'repeat_K_DOWN' ],
    viewport_wheelup = [ 'mousedown_4' ],
    viewport_wheeldown = [ 'mousedown_5' ],
    viewport_drag_start = [ 'mousedown_1' ],
    viewport_drag_end = [ 'mouseup_1' ],
    viewport_pageup = [ 'K_PAGEUP', 'repeat_K_PAGEUP' ],
    viewport_pagedown = [ 'K_PAGEDOWN', 'repeat_K_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 = [ 'K_LEFT', 'repeat_K_LEFT' ],
    bar_right = [ 'K_RIGHT', 'repeat_K_RIGHT' ],
    bar_up = [ 'K_UP', 'repeat_K_UP' ],
    bar_down = [ 'K_DOWN', 'repeat_K_DOWN' ],

    # Delete a save.
    save_delete = [ 'K_DELETE' ],

    # Draggable.
    drag_activate = [ 'mousedown_1' ],
    drag_deactivate = [ 'mouseup_1' ],

    # Debug console.
    console = [ 'shift_K_o', 'alt_shift_K_o' ],
    console_older = [ 'K_UP', 'repeat_K_UP' ],
    console_newer = [ 'K_DOWN', 'repeat_K_DOWN'],

    # Director
    director = [ 'noshift_K_d' ],

    # Ignored (kept for backwards compatibility).
    toggle_music = [ 'm' ],
    viewport_up = [ 'mousedown_4' ],
    viewport_down = [ 'mousedown_5' ],

    # 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 で制御されます。