Читаем Создание игр для мобильных телефонов полностью

На рис. 13.3 показано, как в рассмотренном примере принимается решение двигаться в определенном направлении.

Рис. 13.3. Направление, в котором должен двигаться преследователь, легко определить простым вычитанием координат XY преследователя и преследуемого

Рисунок 13.3 иллюстрирует, как, зная координаты преследующего и преследуемого, вы, используя простые вычисления, можете определить направление движения преследующего. Стоит отметить, что показанный на рисунке подход к преследованию имеет одну существенную проблему, с которой вы сталкиваетесь при попытке написания кода. Она заключается в том, что преследователь не идеален. Иначе говоря, преследующий постоянно подстраивает направление своего движения даже в том случае, если он бежит прямиком к цели. Это происходит потому, что преследователь старается предугадать поведение преследуемого. Решение этой проблемы заключается в том, чтобы задать область значений разницы координат, в которой преследователь не будет ничего предпринимать, чтобы догнать преследуемого. Чтобы понять, о чем я говорю, посмотрите на рис. 13.4.

Рис. 13.4. Установив границу, вы решите проблему постоянного изменения направления в том случае, когда преследователь уже находится на одной линии с преследуемым

Идея определения границы для преследователя – это ограничить движение преследующего, когда он находится достаточно близко к преследуемому. Помните, что вы работаете в координатах XY, поэтому даже если по одной из координат преследователь близок к своей цели, по другой он может находиться очень далеко. Однако граница должна исключить движение преследователя по зигзагу, поскольку он уже находится на одной линии с преследуемым, поэтому нет необходимости изменять направление. Если эти рассуждения показались вам не более чем теорией, то, вероятно, реальный код поможет все расставить на свои места. Вы, несомненно, оцените пользу преследующего спрайта, когда чуть позже будете работать над совершенствованием игры High Seas 2.

Программирование спрайта преследователя

Класс ChaseSprite – производный класс от стандартного Sprite, и это неудивительно. Переменные класса ChaseSprite могут дать представление о внутреннем устройстве класса. Ниже приведены наиболее важные переменные, объявленные в классе ChaseSprite:

private int speed;

private TiledLayer barrier;

private boolean directional;

private Sprite chasee; //Спрайт преследуемого

private int aggression; // 0 – 10

Переменная speed хранит значение скорости преследующего спрайта, скорость задается в пикселях за игровой цикл. Каждый раз, когда спрайт преследователя совершает движение в направлении преследуемого спрайта, он перемещается на число пикселей, задаваемое этой переменной. Переменная barrier указывает на слой, ограничивающий перемещение спрайта преследователя. Важно отметить, что этой переменной вы можете присвоить значение null, если не хотите, чтобы перемещения этого спрайта были чем-то ограничены. Например, если вы создали лабиринт в замке и населили его всевозможными существами, то, вероятно, для привидений не имеет смысла создавать преграды, поскольку они могут свободно проходить сквозь стены. Или, например, в игру High Seas вы можете добавить дракона, которому земля – не помеха.

Но вернемся к классу ChaseSprite. Переменная directional определяет, есть ли у спрайта направление или нет. Направленный спрайт, очевидно, имеет различимые стороны, это означает, что его фреймы должны содержать изображения, соответствующие перемещению спрайта в определенном направлении, а не только анимацию движений. Хотя это вовсе не спрайт преследователя, корабль из игры High Seas – это хороший пример направленного спрайта, а спрайт осьминога – это пример спрайта, который не имеет направленности, он перемещается, не разделяя направления.

Переменная chasee – это преследуемый спрайт, он очень важен для корректной работы спрайта преследователя. Наконец, переменная aggression хранит целое число от 0 до 10, которое определяет, насколько агрессивно себя ведет спрайт. Значение 0 соответствует наименее агрессивному спрайту, который не старается преследовать вовсе, а значение 10 соответствует спрайту, который беспрестанно преследует свою жертву. При разработке игр с преследующими спрайтами поэкспериментируйте с этой переменной, чтобы добиться желаемого результата.

...
Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT