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

Метод update() несложный, он перемещает фоновый слой в соответствии с нажатыми клавишами. Единственное, что вас может удивить, – необходимость перемещать замощенный слой в направлении, противоположном направлению перемещения героя. Например, чтобы создать иллюзию того, что герой перемещается влево, фон необходимо переместить вправо. Фреймы спрайта героя сменяют друг друга при каждом движении. Поскольку спрайт состоит из двух фреймов, то они отображаются поочередно.

Почти в конце метода update() производится вызов метода checkBackgroundBounds(), который проверяет, чтобы герой не вышел за границы карты. Этот метод приведен в листинге 10.2.

Листинг 10.2. Метод checkBackgroundBounds() проверяет, чтобы герой не вышел за пределы карты

private void checkBackgroundBounds(TiledLayer background) {

// при необходимости остановить фон

if (background.getX() > -15) //Числа в этом коде аккуратно вычислены так, чтобы герой не вышел за границы замощенного слоя

background.setPosition(-15, background.getY());

else if (background.getX() < -572)

background.setPosition(-572, background.getY());

if (background.getY() > -25)

background.setPosition(background.getX(), -25);

else if (background.getY() < -572)

background.setPosition(background.getX(), -572);

}

Хотя основной целью метода checkBackgroundBounds() является проверка того, чтобы герой не вышел за пределы замощенного слоя, ограничение – чуть более жесткое. Необходимо создать иллюзию того, что спрайт героя не может передвигаться по воде и скалам, поэтому такие перемещения необходимо заблокировать. Числа, которые вы видите в представленном листинге, ограничивают перемещение спрайта героя лишь краем воды и скал.

Последний фрагмент кода мидлета Wanderer, который представляет интерес, – это метод draw(), который отвечает за вывод фонового слоя и спрайта. В листинге 10.3 приведен код этого метода.

Листинг 10.3. Метод draw() выводит фоновый замощенный слой и спрайт героя

private void draw(Graphics g) {

// вывести фоновый слой

backgroundLayer.paint(g); //Чтобы вывести замощенный слой на экран, достаточно одной строки кода

// вывести спрайт героя

personSprite.paint(g);

// вывести содержимое буфера на экран

flushGraphics();

}

В этом коде нет ничего особенного. Объекты backgroundLayer и personSprite вызывают методы paint(), который выводит на экран замощенный слой и спрайт героя. Поскольку, возможно, позиционирование фонового слоя непросто понять с первого раза, я поясню иначе. Сказав, что следует использовать отрицательные координаты, я, вероятно, ввел вас в заблуждение. Все можно представить по-другому, чтобы вы лучше поняли. Попробуйте вывести на экран текущее положение фонового слоя. Для этого в метод draw() перед вызовом метода flushGraphics() необходимо вставить следующий код:

//вывести текущее положение фонового слоя

String s = "X = " + backgroundLayer.getX() + ", Y = " + backgroundLayer.getY();

g.drawString(s, 0, 0, Graphics.TOP | Graphics.LEFT);

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

Тестирование готового приложения

Когда весь код мидлета Wanderer написан, пора приступать к тестированию. Посмотрите на рис. 10.12, на котором показан экран при запуске игры.

Рис. 10.12. При запуске мидлета Wanderer герой появляется в центре карты

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

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

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