уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Если Вы работаете в Windows 7 или выше и желаете написать программу, использующую MS Agent, то перед прочтением статьи обязательно ознакомьтесь с информацией на сайте Mcrosoft, касающейся использования MS Agent в этой операционной системе!

Сегодня рассмотрим ещё один момент работы с MS Agent Control — движение.

Для того, чтобы переместить персонаж в определенную точку экрана, необходимо выполнить следующую функцию:

AgentChar.MoveTo(x,y: integer; speed: integer)

где AgentChar — ссылка на Вашего персонажа; x, yэкранные координаты, в которые необходимо переместить персонаж; speed: скорость с которой персонаж будет двигаться.

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

Ну, а для того, чтобы переместить персонаж в координаты заданные в системе координат формы приложения, необходимо провести элементарный пересчёт:

function Form2Screen(const Form: TForm; X, Y: integer):TPoint;
begin
  Result.X:=X+Form.Left; 
  Result.Y:=Y+Form.Top;
end;

Те, кто уже скачал программу-просмотрщик свойств персонажей, мог заметить, что в списке доступных анимаций практически у каждого персонажа есть следующие:

  • GestureUp
  • GestureDown
  • GestureLeft
  • GestureRight

При выполнении этих анимаций персонаж укажет руками (ну или другими конечностями) соответственно вверх, вниз, влево и вправо. А что делать, если Вам необходимо, например, чтобы персонаж указал на какой-либо элемент на форме? Каждый раз заставлять Delphi считать координаты, потом определять положение персонажа и т.д. — слишком муторно и никому не нужно. Есть более простой вариант — воспользоваться методом GestureAt у персонажа. Например, вот такой код:

AgentChar.GestureAt(120 ,300)

Заставит персонаж указать в точку (120, 300). При этом персонаж сам определит какую из четырех анимаций проиграть. Единственный момент, который угнетает — персонаж не умеет указывать, например, вверх-влево или вниз-вправо.

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

В следующей раз будем рассматривать работу с контекстным меню персонажа.

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
1 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Merlin
Merlin
17/08/2010 20:40

Столкнулся с такой проблемой, в Windows 7 персонаж появляется в розовом прямоугольнике. Стал искать решение. У Microsoft есть hotfix для исправления этого недоразумения: http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=969168&kbln=ru
Для скачивания исправления Microsoft требует email, на который высылает файл с паролем. Проверил — розовый фон исчез!