О сайте
Druker (only 1 prim). User Ma…
Инструкция по и…
Руководство LSL д…
Руководство LSL д…
Руководство LSL д…

Поиск

ОБО:   . К

Обновлено: 29.06.2007

 

Руководство LSL для программистов. Часть II: Интерфейс.

Эта статья посвящается организации пользовательского интерфейса к программам на LSL. Как известно, интерфейс – средство взаимодействия пользователя с программой – занимает от 10 до 80% кода обычных программ. Рассмотрим вкратце популярные и не очень способы.

Прикосновение к объекту (touch)

Событие touch_start – пожалуй, самый простой способ передачи одного Вашего желания в программу. С помощью функций серии llDetect* можно посмотреть, кто стукнул прим "по голове". И, например, для хозяина прима изменить его цвет на синий, а для всех остальных просто написать "Привет " + имя.

Реакция на события (events)

Чуть сложнее с точки зрения манипуляций пользователя, но тоже простой метод сообщить приму о намерениях. Сюда входит целая группа действий, такие как: посадка (вставание) на прим (changed), одевание (снимание) прима (attach), получение денег (money). Полный перечень событий Вы сможете найти в главе "Events" руководства по LSL.

Простые примеры: при посадке на стул аватар анимируется в сидящего, а при вставании – отбрасывается чуть вперед и вверх; взятый в руки веер раскрывается, а снятый с руки – сворачивается; при оплате 1L$ прим начинает напевать одну песню, а при оплате 3L$ – другую. При изменении карты настройки (options) – по событию changed скрипт считывает и принимает новые установки.

Следует также добавить, что программно можно изменить некоторые пункты меню, раскрывающегося при щелчке на объекте правой кнопкой мыши. Например, "Sit" часто меняют на "Dance", а "Touch" на "Help". Помощь в виде развернутой нотекарты при прикосновении к объекту – это правило хорошего тона при написании сложных объектов.

Команды на каналах (say/listen)

Следующий по сложности, весьма емкий и многогранный способ основан на прослушивании одного или нескольких каналов. При запуске прима прослушивание канала ставится командой llListen ( номер_канала, "", NULL_KEY, "" ). Затем событие listen (…) читает все сообщения, из которых Вы рассматриваете только пришедшие по номеру Вашего канала. Рекомендуется генерировать номер канала случайным образом для того, чтобы Ваш прим не мешал другим, соседним примам, которые тоже могут общаться таким же методом.

На данный момент команды на каналах являются единственным быстрым способом связи отдельных примов, не слинкованных вместе. Специально для этого недавно ввели команду llRegionSay, вещающую в эфир сразу на весь сим на ненулевом канале.

Диалоговое окно (llDialog)

Технически продолжение предыдущего. Здесь пользователю предоставляется синее диалоговое окно с вариантами выбора ответов на кнопках (максимум 12). Аналог MessageDlg в Delphi. После того, как пользователь выбрал вариант ответа, этот вариант уходит в эфир по llSay на указанном в параметрах llDialog канале.

К сожалению, этот способ слабо подходит для замены привычного двухуровневого меню по F10 в среде Windows. Реализация сложновата, да и пользователь наверняка заблудится в однообразных синих менюшках, отображаемых в одном и том же месте в углу экрана.

Хорошо подходит при выборе названий чего-то, например, наименований имеющихся в инвентории объекта текстур скульптурного прима.

Связанные примы (llLinked)

Более организованный способ по типу клавиатуры. К Вашему основному приму Вы подсоединяете (линкуете) несколько объектов, которые будут его кнопками. Самый простой пример – вендор, в игре их масса. Там есть экран и минимум 2 кнопки – вперед и назад. Щелкая по кнопкам, пользователь выбирает товар из ассортимента. Все очень просто, наглядно и удобно. Недостаток: нужно приделывать еще примы, линковать их, загонять туда код (llMessageLinked).

Пример реализации вендора из 4-х примов Вы можете посмотреть здесь – http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryVendor.

Heads-Up Display (HUD)

Диалоговое окно в форме прима, одеваемого на экран. Т.е. он загораживает часть экрана, обспечивая наглядный доступ к функциям программы. Практически, панель управления. Однако технически эта панель является группой слинкованных примов. И, возможно, довольно сложна в реализации. Автор статьи еще не пробовал делать эти HUD-ы.

Неосязаемый интерфейс (sensor)

Последний вид интерфейса может показаться странным. С помощью llSensor можно просканировать местность в радиусе максимум 96 м с целью выявить положение и ориентацию объектов с заданными именами. Можно и без имен, но тогда не факт, что Вы найдете нужные, т.к. у сенсора ограничение в 16 объектов. Далее, с найденного элемента можно считать его ориентацию в пространстве, и что-то предпринять. Например, паровоз может изменить направление движения, считав поворот стрелки у него на пути (а путь он знает).

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


Эта статья создана с помощью технологии DokuWiki. Последняя версия статьи лежит здесь. Перепечатка возможна только при согласии автора.

 
Используются технологии uCoz