Мы будем хранить наши карты в особом формате во 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()
{
}
}
}
