キーマップのカスタマイズ 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 」 があります。

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

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

alt

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

meta

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

ctrl

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

shift

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

noshift

shift キーが押されていないとマッチします。 K_ keysym はマッチ時に shift キーの状態を無視します。

repeat

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

例えば "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 の実装コードの内部に含まれています。バージョン 6.99 では以下のようになっています:

config.keymap = dict(

    # Bindings present almost everywhere, unless explicitly
    # disabled.
    rollback = [ 'K_PAGEUP', 'repeat_K_PAGEUP', 'K_AC_BACK', 'mousedown_4' ],
    screenshot = [ 's' ],
    toggle_fullscreen = [ 'f', 'alt_K_RETURN', 'alt_K_KP_ENTER', 'K_F11' ],
    game_menu = [ 'K_ESCAPE', 'K_MENU', 'mouseup_3' ],
    hide_windows = [ 'mouseup_2', 'h' ],
    launch_editor = [ 'E' ],
    dump_styles = [ ],
    reload_game = [ 'R' ],
    inspector = [ 'I' ],
    full_inspector = [ 'alt_I' ],
    developer = [ 'D' ],
    quit = [ ],
    iconify = [ ],
    help = [ 'K_F1', 'meta_shift_/' ],
    choose_renderer = [ 'G' ],
    progress_screen = [ 'alt_P' ],

    # Accessibility.
    self_voicing = [ 'v', 'V' ],
    clipboard_voicing = [ 'C' ],

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

    # 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' ],
    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_delete = [ 'K_DELETE', 'repeat_K_DELETE' ],

    # Viewport.
    viewport_up = [ 'mousedown_4' ],
    viewport_down = [ 'mousedown_5' ],
    viewport_drag_start = [ 'mousedown_1' ],
    viewport_drag_end = [ 'mouseup_1' ],

    # These keys control skipping.
    skip = [ 'K_LCTRL', 'K_RCTRL' ],
    toggle_skip = [ 'K_TAB' ],
    fast_skip = [ '>' ],

    # Bar.
    bar_activate = [ 'mousedown_1', 'K_RETURN', 'K_KP_ENTER' ],
    bar_deactivate = [ 'mouseup_1', 'K_RETURN', 'K_KP_ENTER' ],
    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_O' ],
    console_older = [ 'K_UP', 'repeat_K_UP' ],
    console_newer = [ 'K_DOWN', 'repeat_K_DOWN'],

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

    # Profile commands.
    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", ],

    "pad_guide_press" : [ "game_menu", ],
    "pad_start_press" : [ "game_menu", ],

    "pad_y_press" : [ "hide_windows", ],

    "pad_rightshoulder_press" : [ "rollforward", ],

    "pad_righttrigger_pos" : [ "dismiss", "button_select" ],
    "pad_a_press" : [ "dismiss", "button_select" ],
    "pad_b_press" : [ "button_alternate" ],

    "pad_dpleft_press" : [ "focus_left", "bar_left" ],
    "pad_leftx_neg" : [ "focus_left", "bar_left" ],
    "pad_rightx_neg" : [ "focus_left", "bar_left" ],

    "pad_dpright_press" : [ "focus_right", "bar_right" ],
    "pad_leftx_pos" : [ "focus_right", "bar_right" ],
    "pad_rightx_pos" : [ "focus_right", "bar_right" ],

    "pad_dpup_press" : [ "focus_up", "bar_up" ],
    "pad_lefty_neg" :  [ "focus_up", "bar_up" ],
    "pad_righty_neg" : [ "focus_up", "bar_up" ],

    "pad_dpdown_press" : [ "focus_down", "bar_down" ],
    "pad_lefty_pos" : [ "focus_down", "bar_down" ],
    "pad_righty_pos" : [ "focus_down", "bar_down" ],
}

Gamepad buttons have an event name of the form "pad_*button*_press" or "pad_*button*_release". Analog axis events have the form "pad_*axis*_pos", "pad_*axis*_neg", or "pad_*axis*_zero".