Привязывание собственных действий к клавишам

Чтобы добавить какие-либо действия, выполняемые при нажатии определённых клавиш, в Ren'Py используются особый класс renpy.Keymap.

При добавлении объектов этого класса в список дисплейблов низшего слоя (config.underlay) и добавления клавиш в поле config.keymap они ловят нажатия на клавиши и выполняют указанные действия.

Пример:

init python:
    config.underlay.append(renpy.Keymap(
        my_action = Play("audio", sfx_achievement)
    ))
    config.keymap["my_action"] = ["shift_K_j"]

У каждой клавиши в Pygame (основа движка Ren'Py) есть свой код. Их список вы можете увидеть ниже.

Список доступных в Pygame клавиш
Код ASCII-символ (если имеется) Расшифровка
K_BACKSPACE \b Обратный пробел, "BACKSPACE"
K_TAB \t Табуляция, "TAB"
K_RETURN \r Возврат, "ENTER"
K_PAUSE Н/Д Клавиша "PAUSE BREAK", "PB"
K_ESCAPE ^[ Клавиша "ESCAPE", "ESC"
K_SPACE Пробел
K_EXCLAIM ! Восклицательный знак
K_QUOTEDBL " Двойная кавычка
K_HASH # Решётка
K_DOLLAR $ Символ доллара
K_AMPERSAND & Амперсанд
K_QUOTE ' Одинарная кавычка
K_LEFTPAREN ( Левая скобка
K_RIGHTPAREN ) Правая скобка
K_ASTERISK * Звёздочка, астериск
K_PLUS + Плюс
K_COMMA , Запятая
K_MINUS - Минус
K_PERIOD . Точка
K_SLASH / Слеш, правый слеш
K_BACKSLASH \ Обратный слеш, левый слеш
K_0 0 0
K_1 1 1
K_2 2 2
K_3 3 3
K_4 4 4
K_5 5 5
K_6 6 6
K_7 7 7
K_8 8 8
K_9 9 9
K_COLON : Двоеточие
K_SEMICOLON ; Точка с запятой
K_LESS < Знак "меньше"
K_GREATER > Знак "больше"
K_EQUALS = Знак равенства
K_QUESTION ? Восклицательный знак
K_AT @ Собачка
K_LEFTBRACKET [ Левая квадратная скобка
K_RIGHTBRACKET ] Правая квадратная скобка
K_CARET ^ Карет
K_UNDERSCORE _ Символ нижнего подчёркивания
K_BACKQUOTE ` Обратная кавычка
K_a a Латинская А, кирилличская Ф
K_b b Латинская B, кирилличская И
K_c c Латинская C, кирилличская С
K_d d Латинская D, кирилличская В
K_e e Латинская E, кирилличская У
K_f f Латинская F, кирилличская А
K_g g Латинская G, кирилличская П
K_h h Латинская H, кирилличская Р
K_i i Латинская I, кирилличская Ш
K_j j Латинская J, кирилличская О
K_k k Латинская K, кирилличская Л
K_l l Латинская L, кирилличская Д
K_m m Латинская M, кирилличская Ь
K_n n Латинская N, кирилличская Т
K_o o Латинская O, кирилличская Щ
K_p p Латинская P, кирилличская З
K_q q Латинская Q, кирилличская Й
K_r r Латинская R, кирилличская К
K_s s Латинская S, кирилличская Ы
K_t t Латинская T, кирилличская Е
K_u u Латинская U, кирилличская Г
K_v v Латинская V, кирилличская М
K_w w Латинская W, кирилличская Ц
K_x x Латинская X, кирилличская Ч
K_y y Латинская Y, кирилличская Н
K_z z Латинская Z, кирилличская Я
K_DELETE Н/Д Клавиша "DELETE", "DEL"
K_KP0 Н/Д 0 на нумпаде
K_KP1 Н/Д 1 на нумпаде
K_KP2 Н/Д 2 на нумпаде
K_KP3 Н/Д 3 на нумпаде
K_KP4 Н/Д 4 на нумпаде
K_KP5 Н/Д 5 на нумпаде
K_KP6 Н/Д 6 на нумпаде
K_KP7 Н/Д 7 на нумпаде
K_KP8 Н/Д 8 на нумпаде
K_KP9 Н/Д 9 на нумпаде
K_KP_PERIOD . Точка на нумпаде
K_KP_DIVIDE / Слеш на нумпаде
K_KP_MULTIPLY * Звёздочка на нумпаде
K_KP_MINUS - Минус на нумпаде
K_KP_PLUS + Плюс на нумпаде
K_KP_ENTER \r "ENTER" на нумпаде
K_KP_EQUALS = Знак равенства на нумпаде
K_UP Н/Д Стрелка вверх
K_DOWN Н/Д Стрелка вниз
K_RIGHT Н/Д Стрелка вправо
K_LEFT Н/Д Стрелка влево
K_INSERT Н/Д Клавиша "INSERT", "INS"
K_HOME Н/Д Клавиша "HOME", "HM"
K_END Н/Д Клавиша "END"
K_PAGEUP Н/Д Клавиша "PAGE UP", "PGUP", "PU"
K_PAGEDOWN Н/Д Клавиша "PAGE DOWN", "PGDN", "PD"
K_F1 Н/Д Клавиша "F1"
K_F2 Н/Д Клавиша "F2"
K_F3 Н/Д Клавиша "F3"
K_F4 Н/Д Клавиша "F4"
K_F5 Н/Д Клавиша "F5"
K_F6 Н/Д Клавиша "F6"
K_F7 Н/Д Клавиша "F7"
K_F8 Н/Д Клавиша "F8"
K_F9 Н/Д Клавиша "F9"
K_F10 Н/Д Клавиша "F10"
K_F11 Н/Д Клавиша "F11"
K_F12 Н/Д Клавиша "F12"
K_F13 Н/Д Клавиша "F13"
K_F14 Н/Д Клавиша "F14"
K_F15 Н/Д Клавиша "F15"
K_NUMLOCK Н/Д Клавиша "NUM LOCK", "NUM"
K_CAPSLOCK Н/Д Клавиша "CAPS LOCK", "CAPS"
K_SCROLLOCK Н/Д Клавиша "SCROLL LOCK", "SL"
K_RSHIFT Н/Д Правая клавиша "SHIFT"
K_LSHIFT Н/Д Левая клавиша "SHIFT"
K_RCTRL Н/Д Правая клавиша "CTRL"
K_LCTRL Н/Д Левая клавиша "CTRL"
K_RALT Н/Д Правая клавиша "ALT"
K_LALT Н/Д Левая клавиша "ALT"
K_RMETA Н/Д Правая клавиша "META", "COMMAND"
K_LMETA Н/Д Левая клавиша "META", "COMMAND"
K_LSUPER Н/Д Правая клавиша "WINDOWS"
K_RSUPER Н/Д Левая клавиша "WINDOWS"
K_PRINT Н/Д Клавиша "PRINT SCREEN", "PRTSCR", "PS"
K_MENU Н/Д Клавиша открытия контестного меню

Помимо клавиш клавиатуры в комбинации можно передать и нажатие кнопок мыши. Для этого используются ключи в формате mouseup_<Число> или mousedown_<Число>, где число:

1 Левая кнопка мыши
2 Средняя кнопка мыши
3 Правая кнопка мыши
4 Колёсико вверх
5 Колёсико вниз
6 Передняя боковая кнопка мыши
7 Задняя боковая кнопка мыши

Также каждой клавише можно дать некоторые модификаторы, которые будут требовать соблюдение некоторых условий.
Пример использования:

"shift_ctrl_anyrepeat_K_g"
Список доступных модификаторов
Префикс Что требует
meta Требуется зажать клавишу "META", "COMMAND" или "WINDOWS"
ctrl Требуется зажать клавишу "CTRL"
osctrl Требуется зажать клавишу "ALT" на компьютерах Macintosh или клавишу "CTRL" в других системах
anymod Требуется зажать клавишу "CTRL", "ALT", "META", "COMMAND" или "WINDOWS"
shift Требуется зажать клавишу "SHIFT"
noshift Требуется не зажимать клавишу "SHIFT"
caps Требуется включённый "CAPS LOCK"
nocaps Требуется выключенный "CAPS LOCK"
num Требуется включённый "NUM LOCK"
nonum Требуется выключенный "NUM LOCK"
repeat Требуется зажать клавишу
anyrepeat Требуется нажать или зажать клавишу
keydown Требуется нажать клавишу (стандартный модификатор)
keyup Требуется отпустить клавишу

Для большей части привязанных к клавишам действий в игре были использованы экранные действия, но также можно использовать и обычные Python-функции.

Имейте ввиду, что без использования экранного действия Function или каррирования функции аргументы передать не получится.

Обновлено