Hare.ru @ Коллективный разум / Hare.ru @ Дикое место

Архив hare.ru 
Мысли, конвертированные в текст

Полезные технологии


Все статьи раздела

Агенты среди нас. Как управлять агентом.

Алексей Бажитов (где-то в 2001)

В первой главе я обещал рассказать побольше о свойствах и методах объектов Microsoft Agent. Объект Agent Conrol имеет всего один метод – ShowDefaultCharacterProperties, с его помощью можно открыть окно свойств загруженых персонажей.

Агент.Characters.Load("merlin","merlin.acs");
Агент.Characters.Load("peedy","peedy.acs");
Агент.Characters.Load("genie","genie.acs");
Агент.ShowDefaultCharacterProperties(100,200);

Параметры метода – экранные координаты положения окна в пикселах.

Объект Characters, кроме описаных в предыдущей статье методов Load и Unload, имеет еще метод Character, возвращающий ссылку на объект Character.

Агент.Characters.Load("peedy","peedy.acs");
Агент.Characters.Character("peedy").Show(0);

Гораздо более интересен объект Character. Поговорим сначала о его свойствах:

  • Name: возвращает имя персонажа (Джинн, Маг, Робби, Кеша)
  • Description: возвращает описание персонажа
  • ExtraData: возвращает расширенные сведения о персонаже
  • Version: возвращает версию персонажа
  • Visible: возвращает 0, если персонаж скрыт методом Hide, и -1, если персонаж видим на экране
  • AutoPopupMenu: с помощью этого свойства можно включить/выключить показ контекстного меню, появляющегося по правому клику на персонаже или иконке в трэйбаре, возвращает текущее состояние свойства:

    Персонаж.AutoPopupMenu=0; //выключить показ меню
    Персонаж.AutoPopupMenu=1; //включить

  • Height: возвращает или устанавливает высоту персонажа
  • Width: возвращает или устанавливает ширину персонажа
Попробуем вдвое увеличить нашего помошника:

Персонаж.Height=Персонаж.Height*2;
Персонаж.Width=Персонаж.Width*2;

Таким же образом можно уменьшить. Если Вы  заигрались  с изменением размеров, узнать оригинальный размер помогут свойства OriginalHeight и OriginalWidth, они только для чтения.

В первой главе уже рассказывалось об основных методах объекта Character. Однако, в примере был использован метод Think, о котором в статье не было ни слова. Исправляю это упущение.

Персонаж.Play("Think");
Персонаж.Think("А кто круче Нуралиев или Билл Гейтс?");

Метод рисует контур, в котором помещается строка параметра, персонаж при этом не издает ни звука, причем контур c текстом (далее будем называть его английским термином balloon) имеет форму слегка отличную от формы balloon'а, вырисовываемого методом Speak. Персонаж как бы думает, но для большей реалистичности, неплохо перед использованием метода, проиграть анимацию "Think".

А вот метод Speak имеет еще и второй параметр – имя WAV-файла. Т.е. чтобы ваш персонаж говорил без использования движка Text-To-Speech (TTS).

Персонаж.Speak("Привет!","c:\hello.wav");

При этом в balloon'е отображается "Привет!", но персонаж играет wav. Первый параметр может также содержать теги Speech Output Tags, которые задают свойства произносимого текста. Тэг \Chr\ определяет голос, каким произносится текст. Может принимать значения Normal (нормальный голос), Monotone (монотонно) и Whisper (шепотом). По умолчанию Normal.

Персонаж.Speak("\Chr=""Whisper""\Спать пора");

Тэг \Ctx\ определяет контекст произносимого текста. Параметр может принимать значения Address (адреса или телефонные номера), E-mail (адреса электронной почты) и Unknown (неизвстный контекст). По умолчанию Unknown.

Поставить ударение в тексте можно с помощью тэга \Emp\. Персонаж повторит текст, вызванный ранее, если параметром метода Speak будет только строка "\Lst\".

Иногда бывает необходимо, чтобы персонаж произносил один текст а показывался другой, этого можно достигнуть используя тэг \Ma\.

Персонаж.Speak("Да \map=""\Emp\здгаствует миго\Emp\вая \Emp\геволюция, товагищи
|""=""здравствует Мировая Революция, товарищи!""\"); //(с) В.И.Ленин

Тэг \Mrk\ устанавливает закладки в тексте, но использовать его мы не сможем, т.к. не можем перехватить событие достижения оной.

Выдержать паузу в произносимой фразе можно с помощью тега \Pau\, тег должен иметь параметр – длительность паузы в миллисекундах (\Pau=1000\).

Можно управлять и высотой голоса персонажа, для этого существует тэг \Pit\. Параметр тега – частота произносимого текста в герцах.

Персонаж.Speak("\pit=50\Акула! Акула! \pit=300\Акула!");

Тэг \Rst\ устанавливает значения по умолчанию для всех тегов.

Мы можем заставить нашего персонажа говорить помедленнее, используя тэг \Spd\. Число, указываемое как параметр, определяет количество произносимых слов в минуту (\Spd=100\).

Громкость произносимого текста регулируется тегом \Vol\. Параметр может принимать значения от 0 до 65535 (\Vol=65535\). Некотрые персонажи могут не поддерживать определенные теги, и все теги требуют установленный движок TTS.

Метод GestureAt объекта Character имеет два обязательных параметра: экранные координаты.

Персонаж.GestureAt(300, 200);

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

И напоследок о методе Wait. Метод имеет смысл использовать когда вы управляете несколькими персонажами одновременно. Метод позволяет дождаться пока другой персонаж выполнит отданные ему инструкции

Персонаж1.Play("Pleased");
Задача=Персонаж1.Speak("Сигаретки не найдется?");
Персонаж2.Wait(Задача);
Персонаж2.Speak("Не курю, боксер.");

Я намеренно не останавливаюсь на событиях объектов, к сожалению, захватить событие без внешних компонент на V7 не удастся.


Комментарий редактора

А может быть, нужная компонента уже существует в природе? Кто найдёт – пишите.


Перейдем к еще одному замечательному объекту – Balloon. Им тоже можно, в некоторой степени, управлять. Кому-то может не понравится balloon на экране, тогда его можно и отключить:

Персонаж.Balloon.Style=0;

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

Персонаж.Balloon.Style=1;

Изменить шрифт для balloon'а:

Персонаж.Balloon.FontName="Times New Roman";

или его размер:

Персонаж.Balloon.FontSize=24;

Свойства BackColor, BorderColor, FontBold, FontItalic, FontUnderline, ForeColor являются свойствами только для чтения. Изменить их значения можно только на странице свойств Microsoft Agent, причем только одновременно для всех персонажей.

Партнеры:


Также может быть интересно:

Канал Россия 1 на http://spbtvonline.ru/
   
 Сайт поддерживается за счет партнеров:
:::... Сайт содержит архив двух версий hare.ru Карта сайта