Инструменты пользователя

Инструменты сайта


Боковая панель

help:menu

Это старая версия документа.


Назад: Динамический код

Меню

QSP позволяет в любом месте игры вызывать всплывающее меню. Такое меню удобно для расширения функционала различных частей игры. Например, (и это самый распространённый случай), всплывающее меню позволяет "привязать" различные стандартные действия к предметам.

Меню можно вызвать в ЛЮБОМ МЕСТЕ игры. Т.е. нет никакого технического запрета, чтобы вызвать меню прямо из кода локации, или из действия, или из кода гиперссылки. Оператор используется один и тот же.

Оператор MENU

MENU [$имя_масива] - вызов "всплывающего" меню из массива с именем [$имя_массива].

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

Пункты меню — это строковые начения массива с особым форматом записи:

"название пункта меню:название локации:путь к файлу иконки"

  • Название пункта меню — это то, что мы увидим на экране, когда меню будет выведено;
  • название локации — это название локации-обработчика пункта меню, код которой будет выполняться при щелчке на соответствующем пункте меню;
  • путь к файлу иконки — это путь к файлу изображения, которое будет выведено рядом с названием пункта меню.

Таким образом мы должны заполнить массив для того, чтоб создать наши пункты меню:

$stone[0]='Взять камень:takestone'
$stone[1]='Кинуть камень:throwstone'
$stone[2]='Осмотреть камень:lookstone'

Здесь название массива ($stone) - это название меню, а текстовые значения массива - действия, для которых указаны названия пунктов и названия локаций-обработчиков выбора пунктов меню. При выборе пункта "Взять камень" произойдёт вызов локации с названием "takestone". Аналогично будет происходить с другими пунктами.

Чтобы вывести меню на экран, нужно воспользоваться оператором MENU:

menu '$stone'

Поиск символов ":" в пунктах начинается с конца строки, то есть название пункта меню может содержать двоеточия, однако тогда обязательно после названия локации должно стоять двоеточие, даже если вы не используете иконки для пунктов меню.

$stone[0]='Камень: взять:takestone:'
$stone[1]='Камень: кинуть:throwstone:'
$stone[2]='Камень: осмотреть:lookstone:'

Если путь к файлу иконки не указан или указанный файл недоступен, то пункт меню отобразится без иконки.

Пример создания меню с иконками:

! нет иконки
$usr_menu[0] = 'Взять предмет:take_item'
! иконка задана gif-файлом
$usr_menu[1] = 'Положить предмет:put_item:images/put_item.gif'
! иконка задана значением $icon_file
$usr_menu[2] = 'Осмотреть предмет:look_item:<<$icon_file>>'
! пункт меню задан 3-мя переменными
$usr_menu[3] = '<<$name>>:<<$location>>:<<$file>>'

menu 'usr_menu' &! покажет меню из 4-х пунктов

Меню заканчивается на элементе массива со значением "" (пустая строка). Т.е. если массив меню состоит из элементов "Взять","Осмотреть","","Бросить", то 2 последних пункта не будут созданы:

$usr_menu[0]='Взять предмет:take_item' & ! этот пункт мы увидим на экране
$usr_menu[1]='Осмотреть предмет:look_item' & ! и этот пункт мы увидим на экране
$usr_menu[2]='' & ! здесь пустое значение, плеер посчитает, что меню кончилось
$usr_menu[3]='Положить предмет:put_item' & ! этот пункт мы не увидим
Чтобы вставить разделитель в меню, вместо соответствующего элемента массива напишите "-:-". Т.е. если нужно поставить разделитель вместо 3-го элемента:
$usr_menu[0]='Взять предмет:take_item'
$usr_menu[1]='Осмотреть предмет:look_item'
$usr_menu[2]='-:-'
$usr_menu[3]='Положить предмет:put_item'

Пример вызова меню из гиперсылки:

	'<a href="EXEC: menu ''$stone''">Камень</a>'

Более подробно о том, как делать меню, можно почитать в соответствующих статьях нашего F.A.Q:

Порядок работы оператора MENU

Когда плеер встречает оператор MENU в коде, он выводит на экран всплывающее меню, сформированное на основе указанного массива, и прерывет выполнение кода, ожидая действий игрока.

Пока ни один из пунктов меню не выбран, или пока игрок не щёлкнул в области за пределами меню, дальнейший код не выполняется.

Если игрок щёлкнул по одному из пунктов меню, вызывается локация, соответствующая данному пункту меню. Эта локация назвается локцией-обработчиком выбранного пункта меню. При этом вызов локации осуществляется так же, как осуществлялся бы при вызове этой локации с помощью оператора GOSUB.

После вызова локации продолжается выполнение кода со следующей команды после MENU.

В локацию-обработчик выбранного пункта меню передаётся аргумент - позиция выбранного пункта. Этот аргумент можно получить из ARGS[0]. Позиции пунктов меню нумеруются с 1.

Если игрок не выбрал ни одного пункта меню и щёлкнул по области вне меню, просто продолжается выполнение кода со следующей команды после MENU.

Вперёд: Звук

help/menu.1672745167.txt.gz · Последние изменения: 2023/01/03 11:26 — aleks_versus