Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Создание игр для мобильных телефонов - Майкл Моррисон

Создание игр для мобильных телефонов - Майкл Моррисон

Читать онлайн Создание игр для мобильных телефонов - Майкл Моррисон

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 38 39 40 41 42 43 44 45 46 ... 87
Перейти на страницу:

В копилку Игрока

Да, конечно, Вселенная безгранична, однако карты, созданные людьми, имеют границы. А карты для замощенных слоев – не исключение.

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

Резюме

До сих пор вы, вероятно, думали, что игровая графика – это фон и спрайты. Вы не могли представить, что графику можно построить из отдельных блоков. Теперь вы имеете представление о замощенных слоях и о том, как их применять для создания игровой графики, состоящей из сравнительно небольших элементов. Замощенные слои хороши не только тем, что их можно создавать динамически, но также тем, что они требуют очень мало ресурсов. Поскольку такое свойство очень критично для мобильных игр, их целесообразно применять, когда вы будете создавать собственные игры.

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

Экскурсия

Я никогда не думал о том, что я буду рекомендовать в книге о создании игровых мидлетов сшивать что-то из отдельных кусочков. Недавно я наткнулся на статью, в которой рассказывалось, что вдова военного разрезала одежду своего мужа на кусочки и сшила лоскутное одеяло. Это был единственный способ оставить память о муже и избавиться от его вещей. Я подумал, что процесс создания замощенного слоя очень похож на пошив одеяла из лоскутков. Если у вас, вашего друга или родственника есть лоскутное одеяло, обязательно посмотрите, какая уникальная композиция составлена из маленьких кусочков. А потом представьте, как могло бы выглядеть одеяло, если расположить кусочки несколько иначе. Это – сила замощенных слоев!

Глава 11 Управление игровыми слоями

...

Архив Аркад

Один из самых популярных сиквелов игр в истории Donkey Kong Junior – это переложение спортивных тем на сюжет знаменитой игры Donkey Kong. Выпущенная в 1982 году компанией Nintendo игра Donkey Kong Junior предлагает вам помочь маленькой горилле (Junior) спасти отца (Donkey Kong) от рук злого Марио (Mario). Donkey Kong Junior выделяется среди игр компании Nintendo тем, что в ней Марио – отрицательный герой. Также Donkey Kong Junior – это вторая игра в трилогии Donkey Kong, в которой Donkey Kong и Donkey Kong 3 – это начало и окончание соответственно.

Замощенные слои открывают новые возможности для мобильных игр. Как только вы начали использовать замощенные слои и спрайты, которые тоже являются слоями, управлять ими стало намного сложнее. Сложно контролировать то, какой слой должен быть нарисован поверх остальных, и каков порядок их отображения. К счастью, в MIDP API предусмотрен специальный класс, разработанный для работы со слоями в мобильной игре. Я говорю о классе LayerManager, который полезно использовать для автоматизации некоторых задач при работе с несколькими слоями. В этой главе вы не только изучите работу с классом LayerManager, но и доработаете игру Wanderer, сделаете ее намного интереснее.

В этой главе вы узнаете:

► о трудностях, связанных с управлением несколькими игровыми слоями;

► как стандартный класс LayerManager может упростить работу со слоями;

► как можно использовать два замощенных слоя для создания интересных эффектов;

► как из мидлета Wanderer сделать интересный лабиринт.

Работа с несколькими слоями

Вероятно, к настоящему моменту у вас сложилось представление, что любая игра, создаваемая с помощью MIDP API, построена из слоев. Если вы вспомните, о чем шла речь в предыдущих главах, класс Layer служит базовым классом для Sprite и TiledLayer в MIDP API. В примерах, рассмотренных к настоящему моменту, слои использовались для представления различных визуальных компонентов, но они были всегда независимы друг от друга. Каждый слой необходимо было рисовать вызовом метода paint(). Аналогично, при выводе слоев на экран, вам приходилось четко контролировать очередность рисования.

Кроме отображения и отслеживания глубины каждого слоя, вам приходилось использовать специальный код для работы со слоями, размер которых больше размера экрана. Например, в мидлете Wanderer, рассмотренном в главе 10, для имитации движения вам пришлось перемещать фоновый слой. Это нетрудно, однако в более сложной игре вы можете работать с несколькими слоями и множеством спрайтов. В этом случае вы можете столкнуться с массой проблем.

Вы, вероятно, поняли, что я к чему-то веду, критикуя ранее написанный код. Я критикую предыдущую программу потому, что в сложных играх задача управления становится более трудной. К счастью, в MIDP API предусмотрено решение этой проблемы – класс LayerManager. Этот класс реализует простые, но эффективные средства рисования, создания и управления слоями.

Класс LayerManager может самостоятельно вычислять видимые области слоев, а следовательно, выводить только нужные части в окне. Хотя вы можете подумать, что окно имеет такой же размер, что и экран, – это не всегда так.

Например, число очков, количество жизней и прочая игровая информация может отображаться вдоль нижней границы экрана, отдельно от «игровой области». В этом случае вы должны уменьшить высоту окна, оставив место для информации. На рис. 11.1 показано, как менеджер слоев работает с несколькими слоями.

Рис. 11.1. Окно вида менеджера слоев можно сделать меньше игрового экрана, оставив место для другой информации

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

Работа с классом LayerManager

Хотя с первого взгляда может показаться, что работать с множеством слоев сложно, стандартный класс LayerManager достаточно просто использовать. Этот класс выступает на первый план после того, как создан слой (спрайт или замощенный слой). Идея заключается в том, что как только вы создали слой, вы передаете его менеджеру слоев, который отвечает за отображение, очередность рисования и создание окна вида.

Для управления слоями используется сравнительно небольшой набор методов класса LayerManager:

append()  – добавить слой в нижнюю часть множества управляемых менеджером слоев;

insert()  – вставить слой в определенное место во множестве;

remove()  – удалить слой с определенным индексом;

getSize()  – возвращает число управляемых слоев;

getLayerAt()  – получить слой с определенным индексом;

paint()  – вывести все слои;

setViewWindow()  – установить положение, ширину и высоту окна вида.

Эти методы применимы к каждому слою менеджера, которому присвоен уникальный индекс. Индекс слоя определяет его глубину по отношению к экрану. Индекс 0 имеет слой, самый близкий к экрану, с увеличением глубины индекс растет. Иначе говоря, самый верхний слой имеет индекс 0, а самый нижний слой – самый большой индекс. Менеджер автоматически нумерует слои по мере добавления новых, поэтому в большинстве случаев нет необходимости самостоятельно определять индексы слоев.

Хотя перечисленные выше методы класса LayerManager полезны, вы можете сделать многое, используя лишь их часть. Но перед вызовом любого из методов, необходимо создать объект класса LayerManager:

LayerManager layers = new LayerManager();

После того как объект LayerManager создан, в него необходимо добавить или вставить слои. Добавление слоя – несколько проще, поскольку вам не нужно определять индексы, но возникает необходимость добавлять слои в определенном порядке. Если вы вспомните описание метода append(), то слои добавляются в нижнюю часть множества. Это означает, что верхние слои вы должны добавлять в первую очередь. Ниже приведен пример того, как можно добавить несколько спрайтов и фоновый слой во вновь созданный менеджер:

layers.append(sprite1);

layers.append(sprite2);

layers.append(backgroundLayer);

В результате выполнения этого слоя фоновый слой окажется позади двух спрайтов. Более того, объект sprite1 будет находиться над объектом sprite2, поскольку он был добавлен первым. Последний шаг в создании менеджера слоев – это определение окна вида. Ниже приведен код, создающий такое окно в верхнем левом углу экрана и размером с экран:

layers.setViewWindow(0, 0, getWidth(), getHeight());

Если необходимо переместить окно вида, то просто вызовите метод setViewWindow() снова, изменив два первых параметра. Вот и все, что необходимо для перемещения окна.

Анимация и замощенные слои

Я еще не рассказал вам о приеме, с помощью которого можно создавать анимацию слоев внутри замощенного слоя. Это делается так: в карте слоя вы задаете слои с отрицательными индексами -1, -2 и т. д. Эти индексы представляют особые анимационные слои, которые можно использовать в любой момент игры.

1 ... 38 39 40 41 42 43 44 45 46 ... 87
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Создание игр для мобильных телефонов - Майкл Моррисон.
Комментарии