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