Майкл Моррисон - Создание игр для мобильных телефонов
- Название:Создание игр для мобильных телефонов
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Моррисон - Создание игр для мобильных телефонов краткое содержание
Книга «Создание игр для мобильных телефонов» – это практическое руководство, которое поможет разработать и реализовать игру для мобильного телефона.
Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр.
В издание включены подробные описания и примеры кодов для четырех игр, а также информация, необходимая для реализации вашей собственной задумки.
Если вы любите играть в игры и занимаетесь программированием, то эта книга – для вас!
Перевод: К. Михалкин
Создание игр для мобильных телефонов - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Этот код проходит по всем ячейкам замощенного слоя и присваивает нужный индекс. Этот код можно с легкостью приспособить для замощенного слоя любого размера, для чего необходимо изменить число столбцов (5) и строк (4) во второй и третьей строках кода соответственно.
Перемещение и отображение замощенного слоя
Теперь вы знаете, что создать замощенный слой с помощью класса TiledLayer очень просто, особенно если вы знаете, как создать карту, состоящую из индексов. Указать положение слоя также не представляет сложности:backgroundImage.setPosition(0, 0);
Этот код просто устанавливает замощенный слой в начало координат игрового экрана: верхний левый угол слоя расположен в верхнем левом углу экрана телефона. Предположив, что размер слоя больше размера экрана, нижний правый угол замощенного слоя невидим на дисплее. Если, обратившись к документации MIDP API, вы будете искать метод setPosition(), вы увидите, что он не указан среди методов класса TiledLayer. Это потому, что данный класс – производный от класса Layer. Другой метод, наследованный от класса Layer, paint(), отвечает за вывод замощенного слоя. Ниже приведен код, рисующий замощенный слой:
backgroundLayer.paint(g);
Из приведенного кода видно, как мало усилий необходимо затратить, чтобы вывести замощенный слой после того, как он был создан.
Создание программы Wanderer
Оставшаяся часть главы посвящена разработке мидлета Wanderer, который представляет собой приключенческий симулятор, где вы управляете героем, перемещающимся по карте. Хотя с технической точки зрения Wanderer – не игра, этот мидлет можно превратить в игру, затратив минимум усилий. Идея Wanderer заключается в том, что здесь используется карта большего размера по сравнению с размером дисплея. Герой остается в центре экрана, потому что перемещается.
Неудивительно, что карта в Wanderer создана, как замощенный слой. В этом мидлете используются два различных объекта слоя: фоновый замощенный слой и спрайт героя. Пожалуйста, посмотрите на рис. 10.9 и 10.10, а также на код карты, чтобы представить карту, используемую в Wanderer. На ней островок земли окружен водой. В мидлете Wanderer следует проверять, что спрайт героя перемещается только по земле, потому что перемещения по воде и скалам запрещены.
Большая часть мидлета Wanderer уделена созданию и управлению замощенным слоем. На самом деле, поскольку замощенный слой перемещается под неподвижным спрайтом, вы можете не трогать спрайт в мидлете, оставив его неподвижным, а не создавать анимацию, имитирующую походку.
Написание программного кода
Код программы Wanderer начинается с объявления переменных класса, необходимых для реализации замощенного слоя и его перемещения. Эти переменные – объекты классов TiledLayer и Sprite, последний необходим для имитации героя. Ниже приведен код, объявляющий эти переменные:private TiledLayer backgroundLayer; private Sprite personSprite;
Переменная backgroundLayer управляет замощенным слоем в мидлете, в то время как переменная personSprite отвечает за героя. Эти переменные инициализируются в методе start() класса WCanvas, в котором создаются замощенный слой и спрайт. Вот код, создающий фоновый замощенный слой:
try {
backgroundLayer = new TiledLayer(16, 16,
Image.createImage("/Background.png"), 48, 48);
}
catch (IOException e) {
System.err.println("Failed loading images!");
}Если вы вспомните, о чем шла речь в начале главы, конструктор TiledLayer() требует задать число строк и столбцов в замощенном слое, а также изображение, содержащее отдельные элементы, и размеры одного элемента. Эта информация передается конструктору в приведенном выше коде. Замощенный слой состоит из 16 строк и столбцов, его элементы имеют размер 48х48 пикселей. Кроме того, эти изображения хранятся в файле Background.png (рис. 10.9). Наиболее важная часть создания замощенного слоя – это определение карты слоя. Для этого вы должны задать массив (или карту), состоящий из индексов, которые определяют вид замощенного слоя. Ранее вы увидели, как с этой задачей может помочь программное обеспечение для создания карт, оно даже создает необходимый код. Ниже приведен массив для инициализации замощенного слоя, вы уже видели его раньше:
int[] layerMap = {
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 22, 3,
3, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 3,
3, 18, 2, 2, 2, 5, 15, 15, 15, 15, 15, 15, 6, 2, 20, 3,
3, 18, 2, 2, 2, 7, 10, 1, 1, 1, 1, 1, 16, 2, 20, 3,
3, 18, 2, 2, 2, 2, 14, 1, 1, 1, 1, 1, 16, 2, 20, 3,
3, 18, 2, 2, 2, 2, 7, 10, 1, 1, 1, 1, 16, 2, 20, 3,
3, 18, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 16, 2, 20, 3,
3, 18, 2, 2, 2, 2, 2, 14, 1, 9, 10, 1, 16, 2, 20, 3,
3, 18, 2, 5, 15, 6, 2, 14, 1, 11, 12, 1, 16, 2, 20, 3,
3, 18, 2, 14, 1, 16, 2, 7, 13, 13, 13, 13, 8, 2, 20, 3,
3, 18, 2, 7, 13, 8, 2, 2, 2, 2, 2, 2, 2, 2, 20, 3,
3, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 3,
3, 23, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 24, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
};Этот массив должен быть вам знаком: вы разрабатывали карту, которую он описывает, в предыдущих разделах. Очевидно, что объявления массива не достаточно для определения замощенного слоя. Чтобы задать слой, вы должны определить значение каждой ячейки, для чего необходимо использовать метод setCell() класса TiledLayer. К счастью, это не так сложно сделать с помощью цикла for:
for (int i = 0; i < layerMap.length; i++) {
int column = i % 16; //Размер карты 16x16
int row = (i – column) / 16;
backgroundLayer.setCell(column, row, layerMap[i]);
}Наиболее важный момент в этом цикле, на который следует обратить внимание, – это использование числа 16 во второй и третьей строках кода. Это число во второй строке означает количество столбцов, а в третьей – количество строк. Если вы измените размер карты, то вы должны изменить и эти числа в соответствии с изменениями. Самое приятное в этом коде – это то, что весь слой инициализируется всего пятью строками кода.
Совет Разработчику
Вместо того чтобы работать с одномерным массивом и проходить по всем его элементам, вы можете создать двумерный массив и использовать вложенные циклы. Оба подхода справедливы и, вероятно, приблизительно одинаково эффективны. Здесь я рассмотрел лишь случай одномерного массива.
Когда фоновый слой создан и заполнен картой, остается только завершить инициализацию, установив его в начальное положение. Помните, что положение фонового слоя задается относительно начала системы координат, связанной с экраном (верхний левый угол дисплея). Если вы хотите центрировать экран по отношению к карте, инициализируйте замощенный слой отрицательными значениями. Посмотрите на рис. 10.11, который поясняет, почему фоновый слой необходимо инициализировать отрицательными координатами.
Рис. 10.11. Чтобы центрировать игровой экран относительно карты, замощенный слой необходимо инициализировать отрицательными числами
Ниже приведен код, который инициализирует фоновый слой так, что игровой экран оказывается в центре карты:
backgroundLayer.setPosition((getWidth() – backgroundLayer.getWidth()) / 2, (getHeight() – backgroundLayer.getHeight()) / 2);
Читать дальшеИнтервал:
Закладка: