Ввод с клавиатуры - TrueCat17/Ren-Engine GitHub Wiki
Простой пример использования: некоторые игры спрашивают имя игрока в начале игры.
Также ввод с клавиатуры используется при указании названия нового проекта в Лаунчере
или при редактировании мест в РПГ-Редакторе.
В скрине ввода, как и в консоли (открывается при нажатии Shift+O
) поддерживается множество операций:
- Копирование (
Ctrl+C
); - Вставка (
Ctrl+V
); - Удаление текущей строки (
Ctrl+D
); - Удаление символов работает как с
Backspace
, так и сDelete
; - Курсор ввода можно перемещать стрелками, а также кнопками
Home
(в начало строки) иEnd
(в конец); - При нажатии
Ctrl
во время перемещения и удаления используются не отдельные символы, а их группы (пробелы, буквы/цифры, знаки); -
Enter
завершает ввод, как и кнопкаOk
.
Есть ещё 2 кнопки (могут отключаться в параметрах вызова):
- Сброс вводимого текста на значение по умолчанию;
- Отмена ввода текста и закрытие скрина (отключено при вызове из сценария из-за отсутствия смысла).
$ renpy.input(var_name, prompt, default = '', allow = None, exclude = '', length = None, mask = None, reset_btn = None)
Здесь:
-
var_name
- имя переменной (строка), в которую будет записан результат; -
prompt
- "подсказка" о том, что требуется ввести (может быть пустой строкой); -
default
- значение по умолчанию в поле ввода; -
allow
- строка с допустимыми для ввода символами (None
- разрешить все); -
exclude
- строка с запрещёнными для ввода символами (используется приallow is None
); -
length
- максимальное кол-во символов в строке ввода (по умолчанию -32
); -
mask
- строка из1
символа, которым будет заменяться содержимое при показе (например,'*'
сделает вид пароля); -
reset_btn
- нужно ли показывать кнопку для сброса (по умолчаниюTrue
, если указанdefault
).
К параметру prompt
применяется
Система переводов.
В renpy эта функция имеет более удобный вид:
$ var_name = renpy.input('prompt', 'default', ...)
К сожалению, по некоторым причинам на данный момент сделать такой же интерфейс этой функции в Ren-Engine невозможно.
Кроме того, важно отметить, что вызов этой функции должен быть последним в блоке python
кода
(или единственным, как это обычно и бывает в команде $
).
Кстати, параметр var_name
не обязательно должен быть именно названием переменной.
Это также может быть "путь" к ней: 'my_obj.params.some_prop'
или даже 'my_dict.some_key'
(да, у словаря тоже через точку).
Реализовано это через getset_attr
, подробности можно прочесть в ScreenLang (раздел "Действие").
Пример:
label start:
"My name is..."
$ renpy.input('player_name', 'My Name', 'Alex')
"Exactly - %s." % player_name
Для вызова из скрина удобнее использовать другую функцию, с помощью которой и работает renpy.input
, показанная выше:
input.ask_str(callback, prompt, default = '', allow = None, exclude = '', length = None, mask = None, reset_btn = True, cancel_btn = True)
Здесь:
-
callback
- функция (или другой вызываемый объект), что принимает результат (строку); -
cancel_btn
- нужно ли отображать кнопку отмены + должен ли к ней приводить клик по "затемнению фона"; - остальные параметры являются теми же самыми, что и в
renpy.input
выше.
Пример:
init python:
my_param = 'some'
def set_my_param(value):
global my_param
my_param = value
show_screen('my_screen')
screen my_screen:
zorder 10
textbutton my_param:
xalign 0.5
action input.ask_str(set_my_param, 'My Param', default = my_param, allow = alphabet + '_')
Также есть функции input.ask_int
и input.ask_float
, которые имеют те же параметры, но в allow
по умолчанию разрешаются только цифры и некоторые знаки.
Внимание: адекватный порядок этих знаков или разумный диапазон значений не гарантируется, а callback
по-прежнему принимает строку.
Изменения касаются лишь символов, допустимых ко вводу - и не более.
Для параметров allow
и exclude
удобно использовать уже готовые наборы символов, что было показано в примере выше:
-
numbers
- цифры от0
до9
; -
alphabet
- латинские буквы отa
доz
; -
alphabet.upper()
- большие латинские буквы отA
доZ
.
Переменные numbers
и alphabet
являются обычными строками.
Изменять их значения запрещается.
Что касается нелатинских символов (кириллица, иероглифы и т. д.), то их ввод возможен только копипастом (Ctrl+V
).
Хоть это никак и не связано с клавиатурой, экран input
также отвечает и за вывод подтверждений (текст и кнопки Да/Нет).
Запросить подтверждение можно функцией input.confirm(action, msg)
, где:
-
action
- действие (функция), что выполняется при выборе варианта "Да"; -
msg
- текст (к нему тоже применяется система переводов).