Ввод с клавиатуры - 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- функция, принимающая аргументTrue(при подтверждении) илиFalse; -
msg- текст (к нему тоже применяется система переводов).