Научная статья на тему 'РЕАЛИЗАЦИЯ АЛГОРИТМОВ УПРАВЛЕНИЯ И СТРЕЛЬБЫ У ПЕСОНАЖА В ИГРОВОМ ПРИЛОЖЕНИИ'

РЕАЛИЗАЦИЯ АЛГОРИТМОВ УПРАВЛЕНИЯ И СТРЕЛЬБЫ У ПЕСОНАЖА В ИГРОВОМ ПРИЛОЖЕНИИ Текст научной статьи по специальности «Математика»

CC BY
6
2
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук
Ключевые слова
ПЕРСОНАЖ / УПРАВЛЕНИЕ ПЕРСОНАЖЕМ / ОГРАНИЧЕНИЯ ПЕРЕМЕЩЕНИЯ / СТРЕЛЬБА / ИГРОВЫЕ ОБЪЕКТЫ

Аннотация научной статьи по математике, автор научной работы — Козлов Д.И.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

IMPLEMENTATION OF CONTROL AND SHOOTING ALGORITHMS BY THE CHARACTER IN GAME APPLICATION

Resume: In this article will be considered implementation of control and shooting algorithms of the character of the game application in Adobe Animate CC with use of the ActionScript 3.0 programming language

Текст научной работы на тему «РЕАЛИЗАЦИЯ АЛГОРИТМОВ УПРАВЛЕНИЯ И СТРЕЛЬБЫ У ПЕСОНАЖА В ИГРОВОМ ПРИЛОЖЕНИИ»

УДК 004.021

Козлов Д.И. студент 2го курса Башкирский Государственный Университет научный руководитель: Хасанова С.Л., к.ф-м.н.

РФ, Башкортостан, г.Стерлитамак

Kozlov D.I. Second year student Bashkir State University Sterlitamak, Bashkortostan, Russian Federation Scientific director: c.p-ms. Hasanova S.L. РЕАЛИЗАЦИЯ АЛГОРИТМОВ УПРАВЛЕНИЯ И СТРЕЛЬБЫ У ПЕСОНАЖА В ИГРОВОМ ПРИЛОЖЕНИИ IMPLEMENTATION OF CONTROL AND SHOOTING ALGORITHMS BY THE CHARACTER IN GAME APPLICATION.

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

Resume: In this article will be considered implementation of control and shooting algorithms of the character of the game application in Adobe Animate CC with use of the ActionScript 3.0 programming language

Ключевые слова: персонаж, управление персонажем, ограничения перемещения, стрельба, игровые объекты, соприкосновение игровых объектов.

Keywords: character, control of the character, restrict movement, shooting, game objects, game objects collisions.

ВВЕДЕНИЕ

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

Персонаж игрока

Этот игровой объект будет представлять 4 MovieClip^ первый из которых - ship (корпус), второй - leftwing (левое крыло), третий - rightwing (правое крыло) , четвертый - playerthrustfire (огни позади корабля).

Рисунок 1. Собранный корабль, часть ship, часть leftwing, часть rightwitng, часть playerthrustfire.

Управление персонажем

Реализовано на основе слушателей событий клавиатуры добавленных в первый фрейм игрового приложения.

stage.addEventListener(KeyboardEvent.KEY_DOWN, kdown); stage.addEventListener(KeyboardEvent.KEY_UP, k_up); То есть при нажатии клавиши на клавиатуре будет вызываться функция, проверяющая какая именно кнопка была нажата и в соответствии с этим переменная типа Boolean будет изменять своё значение с true на false и наоборот при отжатой клавише. Кнопка отвечающая за ведение огня - left ctrl. Для каждой клавиши создан своя личная переменная.

Так же каждую секунду 60 раз вызывается функция EF - она является основой всей игры, в ней происходит проверка различных условий и вызов функций для проверки наступления событий, определение столкновений, а так же перемещений персонажа и остальных интерактивных игровых объектов, пока активным является фрейм №1 - пока жив персонаж. В ней вызывается функция control, показанная ниже.

function control() { if (up){

if ((ship.y) > 10) { ship.y -=PlayerSpeed; } } if (down) {

if ((ship.y) < (stage.stageHeight)-90) { ship.y + =PlayerSpeed; } }

if (right) {

if ((ship.x) < ((stage.stageWidth)-50)) { ship.x + =PlayerSpeed; } }

if (left) {

if ((ship.x) > 10) { ship.x -=PlayerSpeed; } } if (shooting) { shootTimerl .start();

shootTimerl. addEventListener(TimerEvent.TIMER_COMPLETE, fire); }

Ограничение перемещения

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

Стрельба

Активируется игроком при нажатии кнопки left ctrl. Так переменная Shooting становится true и в вышеописанной переменной control вызывается запуск таймера отвечающего за частоту выстрелов. Код описывающий таймер стрельбы: var shootTimer1 = new Timer(75,1);

shootTimer1.addEventListener(TimerEvent.TIMER_COMPLETE, fire); К этому таймеру добавляется слушатель событий Timer_comlete -(когда таймер завершился), вызывающий функцию fire. Её код описан ниже function fire (event:TimerEvent) { if (playeral ive){ var rbullet:MovieClip = new bullet() ; rbullet.x = ship.x+10; rbullet.y = ship.y-10; rbullet.width = 15; rbullet.height = 20; rbullet.speedx = Math.random()*2-1; rbullet.speedy = 10; rbullet.xn = Math.random() *3; addChild(rbullet);

rbullet.addEventListener(Event.ENTER_FRAME, bullet_fly);} } В ней сначала описывается новую переменную с именем rbullet типа bullet, созданного ранее. Затем задаем ей нужные для нас параметры, например координаты на игровой сцене и уже после всего этого с помощью функции addChild создаем для неё тело, которое будет видимо на сцене. Так создается новый MovieClip - bullet, представляющий собой прямоугольник.

MovieClip bullet является анимированным, он имеет анимацию взрыва пули, однако она запускается только в момент уничтожения этого объекта, что будет показано далее.

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

После создания нашей «пули» мы добавляем ей слушателя событий Event.ENTER_FRAME который будет запускать функцию bullet_fly до тех пор, пока пуля будет находиться на сцене. Эта функция отвечает за перемещение нашей пули по сцене, определение пересечений с другими объектами и вызов функции уничтожающей наш объект. Код функции bullet_fly:

function bullet_fly(e:Event) { var rbullet:MovieClip = e.currentTarget as MovieClip; rbullet.y -= rbullet.speedy; if (rbullet.xn > 1) {

rbullet.x -= rbullet.speedx; }

if (rbullet.xn < 1) {

rbullet.x + = rbullet.speedx; }

var bulletdestroy:Boolean =false;

varpt:Point = new Point(rbullet.x,rbullet.y);

var objects:Array = stage.getObjectsUnderPoint(pt);

var p:DisplayObject;

var cont:DisplayObjectContainer;

var length:int = objects.length;

for (var i:uint = 0; i < length; i++) {

p = objects[i];

while (p != null) { if (p == cont) {

break; } if (p is astl) {

destroy_astr(p as MovieClip); score+=50;

score2.text = String(score); bulletdestroy = true; break; } } p = p.parent; } }

if ((rbullet.y <= -200) + (bulletdestroy) + (rbullet.currentFrame == 31)) { destroy bullet(rbullet); } }

Так каждый вызов функции bullet_fly перемещает наш объект на фиксированное значение speedy и speedx, которые были заданные выше, причем скорость по осям ox и oy может различаться. Так скорость по ox нам нужна только для симуляции «разброса» при стрельбе, она выбирается еще на стадии создания пули с помощью функции Math.Random, а то в какую сторону полетит снаряд определяет переменная xn, значение которое так же определяется случайно. Главное в этой функции, конечно, определение столкновений с другими объектами. Поскольку мы не заносим только что созданный объект в какой-либо массив, ссылаться на него мы уже не сможем, поэтому проверку столкновений берет на себя функция stage.getObjectsUnderPoint(pt), где pt - точка внутри нашего объекта. Эта функция получает массив всех объектов находящихся в данной точке.

Затем если цикл состоит более чем из 1 объекта (по условию наша пуля), внутри цикла мы проводим проверку, какие же еще объекты находятся в одной точке с нашей «пулей» и это какой-либо игровой объект с которым пуля должна взаимодействовать - вызываем соответствующие функции. Так этими объектами могут быть «астроиды». Главное, что фиксируется момент попадания, значение score увеличивается, и пуля получает добро на то, чтобы быть уничтоженной - Boolean - bulletdestroy = true; Если же пуля не попала ни в 1 объект, то она автоматически уничтожается по достижению определенного значения по y. Так же из-за особенности кода функция уничтожения должна быть вызвана два раза, это необходимо для того, чтобы анимация взрыва пули была проиграна правильно. Код процедуры уничтожения пули Destroy_bullet: function destroy_bullet(rbullet:MovieClip){ rbullet.speedy = 0; rbullet.speedx = 0; if (rbullet.currentFrame == 1) { rbullet.gotoAndPlay("boom_start"); } if (rbullet.currentFrame == 31){

rbullet.removeEventListener(Event.ENTER_FRAME, bullet_fly); removeChild(rbullet); rbullet = null; } } Функция destroy_bullet - функция уничтожения нашего объекта «пуля» в ней мы запускаем анимацию взрыва и забираем скорость перемещения по осям. Так мы уничтожаем ее только после прокрутки определенного количества кадров. Поскольку мы не забираем слушателя событий у пули, функция bullet_fly продолжает вызываться, однако она уже не влияет на остальные объекты и служит только для того, чтобы вызывать функцию повторного уничтожения пули. Это будет продолжаться до тех пор, пока пуля не закончит свою анимацию взрыва. Затем мы удаляем слушателя событий, завершая процесс вызова функции bullet_fly, удаляем сам объект на сцене спомощью removeChild, а так же полностью обнуляем нашу переменную rbullet, тем самым стирая её из памяти.

Игровые объекты

К примеру астероиды - это объекты типа MovieQip, представляющие собой картинку астероида с определенными границами в виде прямоугольника.

Рисунок 3. Астероид _

Соприкосновение игровых объектов

Эти объекты создаются по таймеру, в функции не рассмотренной в данной статье, однако в ней мы не записываем каждый новый объект в массив для проверки соприкосновений с другими объектами. Астероид может навредить лишь игроку, поэтому нам достаточно использовать функцию new_ast.hitTestObject(ship), которая будет давать результат true или false в зависимости от того пересекаются ли ограничивающие прямоугольники тело нашего игрока и астероида или нет.

Рисунок 4. Пример столкновения объектов._

То есть: на первой картинке результат false, на второй - true; Если будет обнаружено пересечение, то мы уничтожаем корабль игрока и сам астероид.

ЗАКЛЮЧЕНИЕ

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

i Надоели баннеры? Вы всегда можете отключить рекламу.