Часть 2. Создание уровня | В паутине

Часть 2. Создание уровня

Вольный перевод статьи How to Create a Platform Game in AS3 – Part 2 Часть комментариев (особенно по математическим расчетам) - моя.

Теперь мы должны разместить на сцене блоки, составляющие уровень игры. Для реализации этой цели используем массив. Также нам понадобится создать несколько новых переменных. Разместите следующий код над предыдущим:

//ПЕРЕМЕННЫЕ УРОВНЯ
//номер текущего уровня
var lvlCurrent:int = 1;
/*Ключ для условных обозначений в массиве
1: Основной блок
X: Персонаж
*/
var X:String = 'MAIN';
//массив для первого уровня
var lvlArray1:Array = new Array(
	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,X,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
);

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

//текущий ряд, который мы создаем
var row:int = 0;

Создадим отдельный класс и поместим в него весь код, описывающий основные блоки, из который строятся наши платформы. Для этого создадим новый файл ActionScript, назовем его Block.as и разместим следующий код:

package{
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.events.*;
 
	//наш класс наследуется от класса Спрайт
	//Спрайты – это те же самые МувиКлипы, 
	//только не имеющие временной шкалы
	public class Block extends Sprite{
		//переменная экземпляра _root будет содержать
		//корневой объект всего приложения
		private var _root:Object;
 
		public function Block(){
			//слушатель для события добавления блока
			//функция сработает только один раз
			addEventListener(Event.ADDED, beginClass);
			//слушатель для события смены кадров
			addEventListener(Event.ENTER_FRAME, eFrame);
		}
 
		private function beginClass(event:Event):void{
			//определяет корневой объект для каждого блока
			_root = MovieClip(root);
		}
 
		private function eFrame(event:Event):void{
 
		}
	}
}

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

//создание уровня
//этот спрайт будет своеобразным контейнером
//для всех добавленных на сцену блоков
var blockHolder:Sprite = new Sprite();
//добавляем его на сцену
addChild(blockHolder);

function createLvl():void{
	//получаем массив текущего уровня
	var lvlArray:Array = MovieClip(root)['lvlArray'+lvlCurrent];
	//наша игровая область состоит из 16 рядов (rows)
	//исходя из этого обрабатываем массив
	//узнаем количество вертикальных колонок
	var lvlColumns:int = Math.ceil(lvlArray.length/16);
	//начинаем создавать уровень
	//проходим в цикле все элементы массива
	for(var i:int = 0;i<lvlArray.length;i++){
		//если значение равно 1 – рисуем блок
		if(lvlArray[i] == 1){
			//проверяем, не закончен ли ряд
			//если закончен, переходим к следующему
			if(i/lvlColumns == int(i/lvlColumns)){
				row ++;
			}
			//создаем новый блок
			var newBlock:Block = new Block();
			//рисуем его
			newBlock.graphics.beginFill(0xFFFFFF);
			newBlock.graphics.drawRect(0,0,25,25);
			//устанавливаем координаты
			newBlock.x = (i-(row-1)*lvlColumns)*newBlock.width;
			newBlock.y = (row-1)*newBlock.height;
			//добавляем в контейнер для блоков
			//в результате блок отображается на сцене
			blockHolder.addChild(newBlock);
		//если значение элемента массива MAIN
		//размещаем главного героя
		} else if (lvlArray[i] == 'MAIN'){
			mcMain.x = (i-(row-1)*lvlColumns)*newBlock.width;
			mcMain.y = (row-1)*newBlock.height;
		}
	}
	//уровень построен, обнуляем счетчик рядов
	row = 0;
}
 
//запускаем функцию создания уровня
createLvl();

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

Все уроки руководства

1. Создание главного персонажа
2. Создание уровня
3. Взаимодействие персонажа с блоками
4. Добавление элементов уровня
5. Добавление врагов
6. Завершение уровня
7. Последние штрихи

Комментарии (0)

Ваш email не будет опубликован. Все поля обязательны