Перейти к основному содержимому

4.5. Как делать контекстное (динамическое) меню?

В: Как делать контекстное (динамическое) меню? О:

Контекстное меню делать не сложнее, чем обыкновенное. Единственная сложность в том, чтобы добавлять в меню новые пункты, не отслеживая номеров.

Любое меню записывается в массив, начиная с нулевой ячейки, и обычно мы это делаем так:

%меню_отвёртка[0] = ['Осмотреть', 'info_screw']
%меню_отвёртка[1] = ['Использовать', 'use_screw']
%меню_отвёртка[2] = ['Выбросить', 'put_screw']

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

%меню_отвёртка[] = ['Осмотреть', 'info_screw']
%меню_отвёртка[] = ['Использовать', 'use_screw']
%меню_отвёртка[] = ['Выбросить', 'put_screw']

Запись $меню_отвёртка[]= означает, что когда мы используем операцию присвоения, плеер создаст новую ячейку в массиве $меню_отвёртка с номером на 1 больше номера самой последней ячейки, и уже ей присвоит значение. Эта запись аналогична такой:

%меню_отвёртка[arrsize('$меню_предмет')] = ['Осмотреть', 'info_screw']
%меню_отвёртка[arrsize('$меню_предмет')] = ['Использовать', 'use_screw']
%меню_отвёртка[arrsize('$меню_предмет')] = ['Выбросить', 'put_screw']

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

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

Пример реализации контекстного меню: скачать