Реализация алгоритмов управления персонажем в игровом приложении

Автор: Петров И.С.

Журнал: Форум молодых ученых @forum-nauka

Статья в выпуске: 5 (9), 2017 года.

Бесплатный доступ

В данной статье рассмотрена реализация управления персонажем игрового приложения в Adobe Animate CC с использованием языка программирования ActionScript 3.0

Гравитация в игровом приложении, столкновения с персонажем, управление персонажем

Короткий адрес: https://sciup.org/140278432

IDR: 140278432

Текст научной статьи Реализация алгоритмов управления персонажем в игровом приложении

Компьютерная игра — компьютерная программа, служащая для организации игрового процесса, связи с партнёрами по игре, или сама выступающая в качестве партнёра.

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

Базовые концепции, которым должен следовать персонаж:

  •    Плавное движение: Персонаж должен плавно разгоняться при нажатии клавиши со стрелкой и плавно останавливаться из-за трения, когда клавиша отпущена.

  •    Столкновения: Персонаж не должен ходить сквозь стены, падать сквозь землю или прыгать через потолки.

  •    Гравитация: Персонаж должен быть опущен вниз, если он не стоит на земле.

  •    Прыжки: Если персонаж стоит на земле, он должен иметь возможность прыгать вверх.

Плавное движение

Для отслеживания местонахождения персонажа требуются переменные типа Integer.

var scrollX:Number = 0;

var scrollY:Number = 0;

А также 2 переменные, одна из которых будет отвечать за скорость, а другая за ускорение.

var speedConstant:Number = 4;

var frictionConstant:Number = 0.9;

Следует создать главную функцию loop.

function loop(e:Event):void{ if(leftPressed){ xSpeed -= speedConstant;

} else if(rightPressed){ xSpeed += speedConstant;

} if(upPressed){ ySpeed -= speedConstant;

} else if(downPressed){ ySpeed += speedConstant; } xSpeed *= friction; ySpeed *= friction;

scrollX -= xSpeed;

scrollY -= ySpeed;

back.x = scrollX;

back.y = scrollY;

}

Добавленный код делает прокрутку фона более гладкой, более эффективной и более универсальной.

Столкновения

Для нахождения столкновения персонажа с игровым миром требуются 4 переменные.

var leftBumping:Boolean = false;

var rightBumping:Boolean = false;

var upBumping:Boolean = false;

var downBumping:Boolean = false;

А также 4 новые переменные для отслеживания точек столкновения.

var leftBumpPoint:Point = new Point(-15, -21);

var rightBumpPoint:Point = new Point(15, -21);

var upBumpPoint:Point = new Point(0, -46);

var downBumpPoint:Point = new Point(0, 0);

Теперь можем добавить в функцию loop проверку на столкновение (рис. 1) персонажа с нашим игровым полем.

Рисунок 1. HitTestPoint if(back.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)){ trace("leftBumping");

leftBumping = true;

} else { leftBumping = false;

} if(back.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)){ trace("rightBumping");

rightBumping = true;

} else { rightBumping = false;

} if(back.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)){ trace("upBumping");

upBumping = true;

} else { upBumping = false;

} if(back.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)){ trace("downBumping");

downBumping = true;

} else { downBumping = false;

} if(leftBumping){ if(xSpeed < 0){ xSpeed *= -0.5;

}

} if(rightBumping){ if(xSpeed > 0){ xSpeed *= -0.5;

}

} if(upBumping){ if(ySpeed < 0){ ySpeed *= -0.5;

}

} if(downBumping){ if(ySpeed > 0){ ySpeed *= -0.5;

}

}

Гравитация

Сила тяжести вызывает ускорение на объектах. И ускорение не что иное как изменение в скорости. В идеальной ситуации на земле скорость объекта при падении вниз увеличивается на 9.8 метров в секунду. Таким образом в игре мы увеличим скорость падения определенным числом для каждого фрейма, что он падает.

Проверкой падения персонажа будет переменная downBumping, а переменная ySpeed будет отвечать за ускорение на каждый фрейм.

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

var gravityConstant:Number = 1.5;

Обновляем функцию loop.

if (downBumping){ if(ySpeed > 0){ ySpeed *= -0.5;

}

} else { ySpeed += gravityConstant;

}

Прыжки

Следует добавить еще одну переменную, которая будет отвечать за силу прыжка.

var jumpConstant:Number = -25;

Мы хотим, чтобы гравитация работала только если игрок не на земле, а прыжок только если он на земле. Значит мы можем использовать ту же конструкцию что и раньше, но добавить код прыжка в часть “if”, а не в “else”.

if(downBumping){ if(ySpeed > 0){ ySpeed *= -0.5;

} if(upPressed){ ySpeed = jumpConstant;

}

} else { ySpeed += gravityConstant;

}

Так же добавим анимацию прыжка у персонажа (рис. 2). if(upBumping){ animationState = "jumping";}

Рисунок 2. Анимация прыжка

ЗАКЛЮЧЕНИЕ

В результате работы было реализовано управление персонажем игрового приложения в среде разработки Adobe Animate CC. Был показан детальный разбор исходного кода программы в плане управления, а также, описание некоторых встроенных функций на основе которых он был разработан. Данное игровое приложение имеет большой потенциал по дальнейшей доработке, к примеру, в него можно добавить следующий функционал: организовать меню, возможность перезапуска внутри приложения, добавить количество вооружения, доступного игроку, добавить новые уровни, игровые объекты и оптимизировать код.

Статья научная