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

Пришло время разработать наш первый Flash-платформер.
Первое, что нам нужно сделать, — создать новый документ ActionScript 3.0. Дизайн будет примитивный, главное сейчас – понять алгоритм действий. Сделаем монохромное оформление, зададим черный фон и нарисуем нашего главного героя – маленький белый кружок диаметром 25 пикселей. Теперь конвертируем кружок в МувиКлип и дадим ему имя (instance name), чтобы обращаться к нему из нашего кода. Назовем его mcMain.

ball
Мы будем управлять персонажем с помощью стрелок на клавиатуре. Напишем код, для того, чтобы герой отзывался на их нажатие.
(Код размещается в первом кадре на временной шкале).

//Эти переменные хранят информацию о нажатии клавиш
//Движение вверх и вниз нам пока не нужно,
//но позже мы добавим его
var leftKeyDown:Boolean = false;
var upKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
var downKeyDown:Boolean = false;

//Скорость, с которой двигается наш герой
var mainSpeed:Number = 7;
 
//Добавляем персонажу слушатель события смены кадров
//который будет менять его координаты
//в зависимости от нажатия управляющих клавиш
mcMain.addEventListener(Event.ENTER_FRAME, moveChar);
function moveChar(event:Event):void{
	//если клавиша нажата, двигаем героя
	if(leftKeyDown){
		mcMain.x -= mainSpeed;
	}
	if(rightKeyDown){
		mcMain.x += mainSpeed;
	}
	//если нажата клавиша «вверх» или
	//переменная mainJumping = true
	//наш герой должен прыгать
	if(upKeyDown || mainJumping){
		mainJump();
	}
}
 
//добавляем главной сцене слушатели событий
//нажатия и отпускания управляющих клавиш
//их обработчики изменяют значения переменных, 
//ответственных за движение главного героя

stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
function checkKeysDown(event:KeyboardEvent):void{
	//управление может осуществляться как стрелками,
	//так и клавишами WASD
	if(event.keyCode == 37 || event.keyCode == 65){
		leftKeyDown = true;
	}
	if(event.keyCode == 38 || event.keyCode == 87){
		upKeyDown = true;
	}
	if(event.keyCode == 39 || event.keyCode == 68){
		rightKeyDown = true;
	}
	if(event.keyCode == 40 || event.keyCode == 83){
		downKeyDown = true;
	}
}

stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
function checkKeysUp(event:KeyboardEvent):void{
	if(event.keyCode == 37 || event.keyCode == 65){
		leftKeyDown = false;
	}
	if(event.keyCode == 38 || event.keyCode == 87){
		upKeyDown = false;
	}
	if(event.keyCode == 39 || event.keyCode == 68){
		rightKeyDown = false;
	}
	if(event.keyCode == 40 || event.keyCode == 83){
		downKeyDown = false;
	}
}

 

Этот код заставляет персонажа двигаться влево и вправо по нашему желанию. Теперь научим его прыгать. Для этого определим несколько специальных переменных и напишем новую функцию.

//определяет, находится ли герой в прыжке в данный момент
var mainJumping:Boolean = false;
//предельная скорость прыжка
//скорость – количество пикселей в кадр
var jumpSpeedLimit:int = 15;
//текущая скорость прыжка
//(в первый момент равна начальной, затем уменьшается)
var jumpSpeed:Number = jumpSpeedLimit;

Теперь напишем функцию для прыжков. Придется немножко покопаться в математике.

//Функция для прыжков
function mainJump():void{
	//если персонаж не находится в прыжке в данный момент
	if(!mainJumping){
		//начинаем прыжок
		//изменяем состояние персонажа –
		//теперь он находится в прыжке
		mainJumping = true;
		//текущая скорость должна быть отрицательной,
		//чтобы он взлетал
		jumpSpeed = jumpSpeedLimit*-1;
		//изменяем координату персонажа
		mcMain.y += jumpSpeed;			
	//если персонаж уже в прыжке, продолжаем прыгать
	} else {
		//если персонаж еще движется вверх
		if(jumpSpeed < 0){
			//скорость постепенно уменьшается (по модулю)
			//-15;-12;-9,6;-7,68…
			jumpSpeed *= 1 - jumpSpeedLimit/75;
			//когда	она уменьшится до определенной величины (-3)
			if(jumpSpeed > -jumpSpeedLimit/5){
				//меняем ее знак
				//начинается движение вниз
				jumpSpeed *= -1;
			}
		}
		//персонаж уже падает, скорость падения не превышает лимит
		if(jumpSpeed > 0 && jumpSpeed <= jumpSpeedLimit){
			//скорость падения увеличивается
			//пока не достигнет предельной
			jumpSpeed *= 1 + jumpSpeedLimit/50;
		}
		//координата персонажа меняется 
		//на величину вычисленной скорости
		mcMain.y += jumpSpeed;
		//если герой касается пола, движение заканчивается
		//позже мы этот код изменим
		if(mcMain.y >= stage.stageHeight - mcMain.height){
			mainJumping = false;
			mcMain.y = stage.stageHeight - mcMain.height;
		}
	}
}

Код довольно сложный, да? Ну что ж поделать, это ведь урок для «продвинутых» флэшеров 😉
А теперь пора закончить первую часть этого руководства. В следующей части мы создадим игровой уровень из блоков, по которым наш персонаж сможет передвигаться.

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

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

0 комментариев

Оставить комментарий

*Доступные HTML-теги: a, abbr, blockquote, code, pre, del, i, em, strong, b, strike
*Не будет опубликован