CFA LogoCFA Logo Computer
Загрузка поиска
Новости Компьютеры Прайс-лист [Новое] Прайс-лист [Б/У] Для ноутбуков Конфигуратор ПК Заказ, Оплата, Доставка Сервис объявления Драйвера Статьи Как нас найти Контакты
Новости
RSS канал новостей
Согласно свежей информации в Сети, модифицированные версии графических ускорителей Radeon RX Vega ...
Компания PNY сообщает о выпуске графического ускорителя PNY GeForce GTX 1070 8GB XLR8. В данной ...
Сегмент корпусных вентиляторов в эти дни пополнился моделями в исполнении компании Raijintek. Речь ...
Компания GeIL накануне анонсировала оперативную память серии GeIL Super Luce RGB Lite DDR4. Данные ...
Специалисты компании iiyama предлагают своим клиентам новый крупноформатный монитор. Речь идет о ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Говорим на Flash Action Script

Кирилл КОВАЛЕНКО, Андрей КОВАЛЕНКО uant@ukr.net

(Окончание, начало см. МК № 45 (216))

Перейдем теперь к выстрелам. Все будет происходить так: при нажатии клавиши «огонь» координаты снаряда становятся равными координатам тарелки или пушки, а затем начинают двигаться с учетом угла поворота ствола.

Итак, код для снаряда тарелки (пишем в сценарии экземпляра снаряда тарелки plate_shell):

Переменная plate_shell.flag будет принимать три значения: 0 — выстрела нет (снаряд не летит и на экране невидим; реализуется это установлением координат снаряда числом, большим размеров видимого окна), 1 — был произведен выстрел (приравниваются координаты снаряда и ствола), 2 — снаряд в полете.

В сценарии первого кадра обнулите значение переменной plate_shell.flag:

Далее, в сценарии второго кадра допишите :

То есть, если была нажата клавиша Delete, то координаты снаряда становятся равными координатам тарелки, и переменной plate_shell.flag присваивается значение 2 — снаряд полетел громить вражеское орудие.

А сейчас нам понадобятся знания, почерпнутые из школьного курса геометрии. Итак, нам известен угол поворота снаряда и его скорость (допустим, 40 пикселей за кадр). Требуется найти смещение по x- и y-координатам.

Напоминаем: отношение –x/s равно sin(A) (отношение противолежащего катета к гипотенузе), отсюда x=–s*sin(A). Отношение y/s равно cos(A), отсюда y=s*cos(A).

В языке сценариев Flash 5 существует объект Math, предназначенный для математических вычислений. Нам потребуются два метода этого объекта: метод Math.cos() и Math.sin(), вычисляющие косинус и синус указанного в скобках параметра. Параметр должен быть указан в радианах. Но мы работали только с углами, заданными в градусах.

Специально чтобы обойти это препятствие хитрые математики :-) придумали формулу, позволяющую переводить градусы в радианы: B = *A/180, где B — угол в радианах, а A — угол в градусах. Если взять скорость снаряда, равную 40, то x = –40*sin(*A/180), y = 40*cos(*A/180). Константа задается свойством pi объекта Math: Math.pi.

Чтобы не писать очень длинные строки, будем записывать значения синусов и косинусов в отдельные переменные, и уже затем писать код смещения. Пусть значение выражения sin(*A/180) хранится в переменной PS, а cos(*A/180) — в переменной PC.

Итак, в сценарии второго кадра пишем:

То есть, если plate_shell.flag равен 2, мы вычисляем синус и косинус угла поворота, а затем происходит смещение.

Настало время посмотреть, что у нас получилось.

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

А в отношении второй поступим так: когда произойдет выстрел, включится какой-то счетчик, и пока он не будет больше какого-то числа (например, 60), выстрелить опять будет нельзя (пока зарядятся импульсные энерго-генераторы, пока то-се :-)…) Когда значение счетчика будет больше 60, движение снаряда прекратится, и он займет исходную позицию за границей видимого окна (т.е. «спрячется» — до следующего выстрела).

Итак, замените блок, который начинается со строки

на следующий:

То есть теперь в этом блоке еще увеличивается счетчик, а затем, в зависимости от его значения, либо происходит смещение, либо обнуляются счетчик и флаг снаряда, а сам снаряд сдвигается за область экрана. Кстати, в сценарии первого кадра обнулите счетчик plate_shell_counter:

Кроме того, расширилось условие — флаг plate_shell.flag может быть равен как двойке, так и единице (двойным символом | обозначается булево (логическое) ИЛИ). Дело в том, что если мы нажмем клавишу выстрела, а счетчик еще не зашкалит за 100, то значение plate_shell.flag станет равным единице и без дополнительного условия смещение снаряда выполняться не будет.

Далее, строку

замените на строку

Здесь мы, наоборот, сужаем условие. Ведь выстрелить заново можно, только если движения снаряда уже нет (счетчик plate_shell_counter обнулен).

Далее, если во время полета снаряда изменять угол наклона пушки, то можно заметить, что траектория полета снаряда тоже будет меняться. Конечно, пришельцы в техническом плане очень продвинуты, но будем считать, что управлять каким-нибудь там плазменным снарядом им не под силу. Поэтому угол наклона траектории снаряда будет меняться только тогда, когда снаряд не движется (счетчик plate_shell_counter обнулен).

Для этого строку

замените на следующий блок:

Теперь вроде бы все. Почти все. Осталось написать то же самое для пушки и придумать, каким образом будет происходить попадание.

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

Итак, в сценарии снаряда для пушки (cannon_shell) пишем:

Тут все ясно — если нажата клавиша Q, то переменной cannon_shell.flag присваивается значение 1.

Далее в первом кадре обнуляем флаг:

Объявляем и обнуляем счетчик для снаряда пушки (тоже в первом кадре):

Теперь во втором кадре заменяем строку

на блок

Далее пишем во втором кадре:

То есть все делаем так же, как для случая с тарелкой, но только заменяем слово «plate» на слово «cannon» и немного изменяем формулы (переменная CS вместо PS, СС вместо PC, также меняем местами знаки + и –, т.к. пушка стреляет вверх, а тарелка — вниз).

Вот теперь можно и протестировать. Нажимаем F12 и проверяем, все ли работает так, как мы задумали. Вроде, все нормально. Тогда переходим к самой главной (но не самой сложной!) части.

Как же будут происходить попадания? И как будет реагировать на это наша техника? А примерно так: во время полета снаряда будет проверяться расстояние от центра вражеской машины. При достижении определенного значения будет считаться, что снаряд попал. Играть до первого попадания неинтересно, поэтому будем играть до пяти. Количество оставшихся жизней будем отображать в виде вытянутого по горизонтали красного прямоугольника, который при каждом попадании будет уменьшаться.

Итак, создайте новый символ с именем hits в виде прямоугольника красного цвета. Его размеры сейчас не важны. Придется создать еще два слоя. Назовите их plate_hit и cannon_hit. Поместите в каждый из этих слоев по одному экземпляру символа hits и в поле Name закладки Instance дайте им имена: plate_hit и cannon_hit. Разместите их так, чтобы экземпляр plate_hit находился выше тарелки, а экземпляр cannon_hit — ниже пушки. Теперь подберем размеры этих экземпляров. Во-первых, они должны находится по центру. Их длина должна быть равна длине ролика, т.е. 550 пикселей. Ширину можно взять 10 пикселей. Длина и ширина символа во Flash задается свойствами _height и _width.

Итак, в сценарии первого кадра пишем:

Вертикальные координаты указаны приблизительно, у вас они могут быть немного другими.

Теперь о попаданиях. Снаряд попал, если он находится в прямоугольнике, центр которого совпадает с центром тарелки (пушки). То есть, если размеры тарелки 40 пикселей в высоту и 70 — в длину, то условие попадания будет выглядеть так:

Метод math.abs объекта math возвращает модуль числа. Итак, для снаряда пушки код попадания будет следующим (пишем в сценарии второго кадра):

То есть если снаряд попал, то «линию жизни» надо уменьшить на 110 пикселей, а затем сдвинуть ее на 55 пикселей влево (чтобы полоска оставалась у левого края).

Если размеры тарелки и пушки совпадают, то для снаряда тарелки код будет почти таким же (если нет, то сделайте их размеры одинаковыми):

Теперь, в третьем кадре после строки gotoAndPlay (2); пишем:

То есть, если длина одной из линий будет равна нулю, то произойдет переход на нужный кадр.

Теперь создаем еще один слой. В этом слое десятый и одиннадцатый кадр делаем ключевыми (keyframe). В десятом кадре создаем надпись Humans win!. На вспомогательной панели Character увеличиваем размер шрифта. В сценарии этого кадра пишем stop(), чтобы остановить ролик. В одиннадцатом кадре пишем Aliens win!, увеличиваем размер шрифта, в сценарии, как и для десятого кадра, пишем stop(), сохраняем, запускаем. На Рис. 1 показано, что приблизительно должно получиться.

Вот в общем-то и все. Осталась работа по Рис. 1улучшению геймплея. Можно увеличить количество кадров в секунду, индивидуализировать скорости для тарелки и пушки, изменить скорости для снарядов, изменить «живучесть», нарисовать красивый задний фон, скажем, красные плоскогорья Марса (придется создать еще один слой). Только внимательно следите за тем, чтобы снаряд не проскочил «сквозь» цель, то есть смещение снаряда не должно превышать размеров цели. Играйте и выигрывайте :-)!

Теперь о публикации. Как уже говорилось, основное назначение Flash — возможность размещения качественных анимированных роликов на веб-страницах. Так что зайдите снова в меню File > Publish Settings и поставьте галочку в checkbox’e HTML.

После публикации кроме файла StarWars.swf появится еще и автоматически созданная HTML-страница StarWars.html, которая содержит ссылку на созданный нами Flash-ролик. Открываем этот файл, копируем код, заключенный между тэгами <OBJECT> и </OBJECT>, в код своей страницы, и вот — на ней уже появилась наша игра. Обратите внимание: по умолчанию предполагается, что ролик (swf-файл) «лежит» в той же папке, что и html-страница. Это же правило сохраняется для интернет-адресов. Если, допустим, ваша страница имеет адрес http://server.com/my/page.html, то swf-файл в данном случае будет иметь адрес http://server.com/my/StarWars.swf.

Ваяйте! Слава уанету!

P.S. Чтобы вам было удобнее разбираться с текстами программ, нами был выложен rar-архив описанного в статье проекта по адресу http://uant.narod.ru/misc/sw1.rar. Архив содержит файл StarWars.fla (Flash-проект) и пример html-страницы со встроенным swf-роликом.

Полезные ссылки:

http://www.flasher.ru/

http://www.3wgraphics.com/

http://www.avestadesign.ru/

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov