вторник, 12 мая 2009 г.

Формат карты

Мы будем хранить наши карты в особом формате во Flash - Массивы (Arrays).

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


Нам нужны двумерные массивы для карты. Нет, это не что отличное от обычных массивом, это просто массив с другим вложенным массивом, как элементом. Смущены? Давайте посмотрим.

Обычный массив:

var myArray:Array = ["a", "b", "c", "d"];

Это было просто! Чтобы получить значение элемента:

trace(myArray[0], “ - “, myArray[0]); // a – b и так далее.

Теперь часть посложнее! Что если мы положим “a”, “b” и “c” в массив, а затем этот массив положим в другой массив. Так:

var a:Array = ["a1", "a2", "a3"];

var b:Array = ["b1", "b2", "b3"];

var c:Array = ["c1", "c2", "c3"];

var myArray:Array = [a, b, c];

И так мы объявили массив myArray и каждый элемент этого массива является тоже массивом. Значение первого элемента массива myArray[0] есть массив ["a1", "a2", "a3"], значение следующего ["b1", "b2", "b3"].

Если Вы пишете:

var myVar1:Array = myArray[2];

trace(myVar1); // c1,c2,c3

Не будем здесь останавливаться, если вы напишете :

var myVar2:Array = myArray[2][0];

trace(myVar2); // c1

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

Попрактикуемся!

var myVar3:Array = myArray[0][1];

trace(myVar3); // а2

var myVar4:Array = myArray[1][0];

trace(myVar4); // b1

Думаю картина прояснилась! Не забывайте, что нумерация элементов в массиве начинается с нулевой позиции.


Делаем Карту

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

var myMap:Array = [

[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 шагов вниз, прежде чем он выпадет с карты и окажется в неизвестном мире.

И так важный вопрос – «Что значат эти цифры в массиве карты?». Мы будем использовать ООП (нет, не пугайтесь этого слова, оно не так страшно как звучит). Мы создадим сперва несколько различных плиток и будем использовать их как шаблон для создания всей карты.

Для примера, если у нас цифра 1, тогда мы создаём плитку из шаблона Tile1. Затем, в игре, когда мы достигнем эту плитку, мы будем проверять свойства этих объектов. (Они могут иметь множество свойств, но в основном нас будут интересовать два: walkable («ходильная») и frame(кадр).

Walkable – это свойство показывает, может ли персонаж пройти по этой плитке (в случае

walkable=true) или нет (walkable=false). Не стоит использовать hitTest по двум причинам – очень медленный и его не используют в плиточных играх.

Frame – это свойство, которое говорим нам, какой именно кадр плитки нам нужно отобразить в данной позиции. Когда мы создаём каждую плитку, то все они стартуют с начального кадра 1. Об этом мы ещё поговорим подробнее.

И так создаём плитку, код в первом кадре:

var tile1:BasedTile = new BasedTile ();

tile1. walkable=false;

tile1. frame=2;


Класс BasedTile:

package

{

import flash.display.Sprite;

public class BasedTile extends Sprite

{

public var walkable:Boolean = false;

public var frame:uint = 1;

public function BasedTile()

{

}

}

}