на главную почта поиск
 
поиск
Диона Холдинг
   
   
FLASH-версия 
 Версия для печати 
  Новости
 

   
Новости  
   

Глава 1. Формат карты

Мы будем хранить нашу карту в виде массива.

Если вы не знаете, что это такое, откройте справку по Flash и прочтите об этом.

(Не очень любезно, но массив - это основа. И она одинакова, что на С, что на Pascal, что на другом языке программирования. Различаются способы описания, а суть остается таже. Массив - последовательность элементов, к каждому элементу можно обратиться с помощью, так называемого, индекса.)

Двумерный массив

Нам нужен двумерный массив для карты. Это такой массив, в котором каждый элемент является массивом. Странно? Посмотрим.

Обычно, простой массив – просто список:

myArray=["a", "b", "c", "d"];

Это просто. Можно присвоить значение каждому элементу, первый элемент – «a», второй элемент – «b» и т.д.

Теперь, фокус! Что, если мы присвоим каждому элементу не символ, а массив? Да, мы можем сделать это. Сделаем так:

a=["a1", "a2", "a3"];
b=["b1", "b2", "b3"];
c=["c1", "c2", "c3"];
myArray=[a, b, c];

Теперь мы объявили массив myArray и каждый его элемент – тоже массив. Итак значением первого элемента является массив - ["a1", "a2", "a3"], второго элемента массив - ["b1", "b2", "b3"]. Если вы напишите:

myVar=С;

То переменная myVar примет значение ["c1", "c2", "c3"].

Хорошо, есть вопросы? Идем дальше. Если вы напишете: myVar=myArray[2][0]; то переменная получит значение первого элемента третьего элемента массива myArray – «с1».

Попрактикуемся побольше: myVar=myArray[0][1] берется первый элемент массива myArray – (а) и затем второй элемент в массиве – («а2»).

myVar=myArray[0][1] получаем значение «b1».

Возьмемся за картинку?

Создание карты

Первое, мы опишем массив карты, который будет содержать информацию о каждой плитке:

myMap = [
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1] ];

Как можно видеть, наша карта имеет 6 строк и 8 столбцов. Если наш Герой начнет с левого верхнего угла, он сможет сделать 8 шагов вправо и 6 шагов вниз, прежде чем он уткнется в стену или испарится в пространстве.

Но, у некоторых уже есть очень важный вопрос: «Как нумеруются плитки на карте?». Отлично, мы будем использовать ООП (это Объектно- Ориентированное Программирование, а не просто звук восклицания), чтобы создавать плитки и управлять нашей игрой (посмотрите в Справке Flash об ООП). Мы опишем несколько плиток первыми, они будут служить нам в качестве шаблона для других плиток, которые будут использоваться в игре. Затем мы соберем на их основе описания карты и там присвоим номера плиткам в соответствии с их позицией.

Если, например, мы даем номер 1, то мы создаем новую плитку на основе шаблона Tile1. Затем в игре, когда мы будем находится на этой плитке, мы проверим свойство этого объекта. У объекта может быть много свойств, но все плитки будут иметь два базовых свойства - walkable и frame.

Walkable – свойство, которое показывает - можно вступить на плитку или нет (если да, то установим walkable=true, если нет, то walkable=false). Мы не используем внутреннюю функцию hitTest, так как она работает медленно, и это не очень круто при разработке игр на основе плиток.

Frame – свойство, которое говорит нам, какой кадр клипа плитки показываем на экране. Это свойство используется, когда мы размешаем плитки на экране.

Мы используем одни и теже плитки, присоединяя их друг к другу, и они будут показываться 1-ым кадром на карте. Обсудим это подробнее в главе «Создание плиток».

Итак, когда мы объявляем плитку:

// Шаблон объекта - Плитка - проходима и показывается кадром 2
Tile1= function () {};
Tile1.prototype.walkable=false;
Tile1.prototype.frame=2;

То мы создаем объект, на который нельзя вступить и показывать ее нужно кадром 2 (здесь frame – кадр клипа плитки).

Больше о картах

У вас опять вопрос, почему я выбрал именно этот формат описания карты? Я не буду говорить о том, что это самый лучший способ описания карты, что карта, в этом случае, создается очень быстро и занимает мало места (ее описание в виде файла, конечно).

Мой ответ на заданный вопрос - только на основе своего многолетнего опыта. Я нашел этот формат и он меня очень устраивает. Возможно есть и другие пути описания данных для карты.

(Можно пошарить в и-нете и найти много чего на эту тему.)

Метод JailBitch

В оригинальном учебнике на OutsideOfSociety используется очень простой формат для описания карты. Карта хранится в двух одинаковых двумерных массивах и каждый номер дает нам позицию плитки для показа на экране кадра плитки. Каждый раз, когда нужно проверить – можно ли вступить на следующую плитку (или узнать, что это за плитка), нужно просто взять элемент из массива карты.

Для разрешения конфликтов с типами плиток, нужно определить плитки, которые будут стенками ( лесенки, двери или еще что-то). Например, вы подумали и сказали, все шаблоны плиток с номером от 0 до 100 - проходные плитки (на них можно вступить), все шаблоны плиток с номерами 101 до 200 – стенки, а шаблоны плиток с номерами больше 200 – специальные плитки.

При наличии небольшого количества различных типов плиток - очень легко и удобно описывать карты.

Дерево в Пустыне

Некоторые карты имеют множество плиток, но они одинаковые. Например, картинка пустыни, где на многие мили ничего нет – один песок. Если приглядется, можно увидеть несколько оазисов. Или море – вода, вода, много воды и маленький остров.

Если Ваша карта может быть создана из нескольких однотипных плиток (песок) и нескольких других плиток (деревья), то двумерный массив для описания карты не очень хороший выбор. Большей частью в массиве будет храниться один и тот же номер плитки (песок) и только в некоторых элементах будет стоять другой номер. Может быть лучше принять другую структуру описания карты – хранить номера позиций плиток отличных от песка.

Предположим, у вас карта 100 х 100 и всего 3 дерева. Это можно описать как:

trees = [[23,6], [37,21], [55,345]]

При создании карты, сначала смотрим массив деревьев и размещаем соответствующе плитки, а все остальное заполняем плитками песка. Это намного проще, чем расписывать двумерный 100 х 100 массив.

Конечно, если у вас много объектов (деревья, кусты, трава, камни, вода и т.п.), то такой способ сразу теряет скорость. Лучше, наверное, вернуться к описанию позиции плиток в двумерном массиве.

S, M, XXXL

Возможно, вы слышали о магическом буквосочетании XML. Это популярный формат HTML, который позволяет описать много разных вещей. Можно использовать XML для описания карты.

Вот пример описания карты на XML взятое из книги Джоба Макара (Jobe Makar) «Macromedia Flash MX Дизайн игр без мистики».

Пример описания простой карты 3 х 3 на XML:

<map>

<row>

<cell type="1">
<cell type="1">
<cell type="1">

</row>

<row>

<cell type="1">
<cell type="4">
<cell type="1">

</row>

<row>

<cell type="1">
<cell type="1">
<cell type="1">

</row>

</map>

Карта 3х3. Первая строка – заголовок «map». Затем 3 эелемента с именем «row» - название узла. Каждый из них содержит еще 3 узла с именем «cell».

Чтобы загрузить карту из внешних файлов, предлагается замечательное решение - XML-разбор (parsing), который является встроенной функцией Flash MX.

Загрузка двумерного массива из текстового файла не так проста, вам нужно считать строку в переменную, затем выделить в ней элементы и уложить в массив, затем повторить эти действия несколько раз, все это мммееедддлллееенннооо.

Конечно видны и минусы XML: файл достаточно большого размера, да и карта не видна при просмотре кода.

(Главные достоинства:

  • открытый международный стандарт описания и представления данных с какой-либо структурой,
  • унифицированность представления информации, Вы сами можете задать эту структуру с помощью XML-файла описания структуры и потом его использовать.)

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

Есть вопросы - пишите мне на semikin@dionaholding.ru

Читаем дальше - Глава 2. Создание плиток

Возвращаемся на Начало учебника.

 

Всего: 5

Электронные формы от Adobe

14 ноября с.г. компания представила новую версию всем известного средства Adobe Acrobat. 8-ая по счету версия принесла новые возможности по переходу от бумажных документов к электронным.
читать
 

АрмПарк - Универсальная учетная система

Серия материалов о программе - АрмПарк - Универсальная учетная система. Решение для тех кому необходимо быстро создать и внедрить электронную картотеку по учету - документов, матералов, оборудования, ресурсов или зеленых человечков.
читать
 

Программирование игр на основе плиток

Представляется перевод замечательного учебника по созданию движка игры на основе плиток (Tile Based Games). Я благодарен автору Tonypa за разрешение публикации перевода. Если у Вас возникают вопросы, пишите и я постараюсь Вам помочь.
читать
 

Универсальная информационная система-конструктор Учет документов (Доклад на конференции).

Доклад на Третьей практической конференции по Электронному Документообороту - "Программа "Учет документов" ", 9 декабря, Москва, Мэрия Москвы.
читать
 

Интеграция систем с использованием новых технологий

Один из ключевых моментов совершенствования электронного бизнеса - это повышение гибкости процессов за счет ускорения реализации решений в области интеграции.
читать
Всего: 5

Rambler's Top100

   
   

новости

продукты

решения

услуги

о компании

   
   
125315, Москва, Часовая ул., д.30
Телефон: (095)797-32-82; Факс: (095)797-32-81
© 2005 ООО "Диона Холдинг"
Администратор: admin@dionaholding.ru