Внимание! У Вас появился шанс изучить все секреты Flash анимации! Перейти из разряда новичка в разряд опытного пользователя даже без посещения дорогих репетиторов и толстенных толмутов "библий пользователя".
Более 100 уроков записанных с экрана компьютера в превосходном качестве помогут пройти, Вам, терни Flash анимации кратчайшим путём!
Браузерная flash игра (этап 1): Движек игры боевки
5 июня 2009
рабочая версия (параметры можно менять):
Вот так она выглядит. На премию лучший дизайн года она конечно не претендует, но от не это и не требуется.
Вот код самого движка:
var redW:Array = newArray; //массив переменных Красного var ylwW:Array = newArray; //массив переменных Желтого var hod:Timer; //Таймер хода var kUdar:Number = 30; //Базовое повреждение var kBlok:Number = 18; //базовая защита
function bitva(e:MouseEvent):void{//запуск битвы шариков
ustanovka(); //начальные установки
hod = newTimer(1000, 200); //создаем таймер
hod.addEventListener(TimerEvent.TIMER, vibor, false, 0, true); //обработка событий при наступлении хода
hod.start(); //вкл. таймер }
function ustanovka():void{//установка начальных значений
RedLife.LifeLine.width = 200; //линия жизни красного в 100%
YellowLife.LifeLine.width = 200; //линия жизни желтого в 100%
start_btn.visible = false; //убираем кнопку до конца битвы
info_txt.text = ""; //очистка поля сообщений
redW[0] = 1+Number(pwrRed.text)/10; //коэф силы удара
redW[1] = 1+Number(rztRed.text)/10; //коэф блока
redW[2] = 2-Number(spdRed.text)/10; //прыткость
redW[3] = 0.1+Number(spdRed.text)/100+Number(rztRed.text)/100; //шанс уклонится
redW[4] = redW[2]; //шкала хода
ylwW[0] = 1+Number(pwrYellow.text)/10;
ylwW[1] = 1+Number(rztYellow.text)/10;
ylwW[2] = 2-Number(spdYellow.text)/10;
ylwW[3] = 0.1+(Number(spdYellow.text)/100+Number(rztYellow.text)/100)*1.4;
ylwW[4] = ylwW[2]; }
function vibor(e:TimerEvent):void{//запуск битвы шариков var udacha:Number; //степень удачи при равном проворстве if(redW[4]< ylwW[4]){//если шкала красного меньше то его ход
goRed(); }elseif(redW[4]> ylwW[4]){//если желтого то его
goYellow(); }else{//если равны то жребий
udacha = Math.random()*4-2; if(udacha <=0){
goRed(); }else{
goYellow(); } } }
function goRed():void{//ход красного var udar:Number; //удар var blok:Number; //блок var uron:Number; //урон var promach:Number; //промах
redW[4] = redW[4]+ redW[2]; //увеличиваем значение шкалы красного
udar = Math.round((Math.random()* kUdar)* redW[0]); //расчет величины удара
info_txt.appendText("Красный бьет Желтого на "+String(udar)+"n");
promach = Math.random(); //расчет вероятности промаха if(promach <= ylwW[3]){
info_txt.appendText("... но промахивается"+"n");
info_txt.appendText(""+"n"); return; }
blok = Math.round((Math.random()* kBlok +1)* ylwW[1]); //расчет кол-ва поглощенной энергии if(blok > udar){
blok = udar; }
info_txt.appendText("Защита Желтого поглотила "+String(blok)+"n");
uron = udar - blok; if(uron <0){
uron = 0; }
info_txt.appendText("Желтый ранен на "+String(uron)+"n");
info_txt.appendText(""+"n"); if(YellowLife.LifeLine.width- uron *2>0){//если после этого удара желтый жив то уменьшить полосу жизни
YellowLife.LifeLine.width = YellowLife.LifeLine.width- uron *2; }else{//если умирает то полосу в 0
YellowLife.LifeLine.width = 0;
info_txt.appendText("Желтый убит!!!"+"n");
start_btn.visible = true;
hod.removeEventListener(TimerEvent.TIMER, vibor); //выключаем обработку событий от таймера }
info_txt.scrollV = info_txt.maxScrollV; //прокрутка поля сообщений }
function goYellow():void{//ход желтого. Все также как и у красного var udar:Number; var blok:Number; var uron:Number; var promach:Number;
где, RedLife и YellowLife - это одинаковые мувиклипы шириной 200 пикселей. Они содержат в себе мувиклип LifeLine (синяя полоска жизни) шириной 200 пикселей.
info_txt - текстовое поле внизу, в него выводится информация по значениям удара, блока и повреждения.
6 текстовых полей (pwrRed и другие) - поля для ввода значения соотв. пораметра (все они по умолчанию 3, но вы можете указать свое)
start_btn - кнопка запускающая бой.
Как работает:
Параметры шариков:
Сила удара - влияет на силу первоначального удара.
Сопротивление - влияет на то какая часть первоначального удара будет поглощена без вреда, а так же на вероятность промаха аппонента.
Проворство - влияет на то как часто будет ходить (наносить повреждения) персонаж, а также на вероятность промаха аппонента.
После того как пользователь выставит значения параметров шариков (если захочет) он для начала поединка должен нажать на кнопку БОЙ!!!
Запускается функция установки параметров в чачально состояние + расчитываются коэффициэнты учавствующие в расчетах повреждений и промахов. Включается таймер, он нужен для того что бы бой длился не секунду, а был растянут по времени + это своеобразный цикл.
На каждом срабатывании таймера происходит анализ чей ход. Ход в данном движке похож на систему в Героях.
Задача: Персонаж с наибольшим параметром должен ходить чаще.
Реализация: Персонажи будут ходить в соответствии с собственными шкалами хода. Т.е. на этапе анализа хода, выбирается персонаж у которого значение шкалы хода ниже. Как только наступает ход к шкале хода данного персанажа прибавляется значение коэффициента хода (он у меня назван прыткостью)) и расчитывается он по формуле: прыткость = 2 - проворство / 10 , выше значение проворства, тем меньше значение прыткости и тем чаще будет ходить персонаж.
После определения кто ходит запускается функция хода соотв. игрока. В идеале это должна быть одна и таже функция с разными пораметрами, но мне было лень)))) и я просто скопировал и переделал переменные напротивоположные). Разобраться в работе этих функций не тяжело. Хочу сказать что получилось не совсем то что я хотел, а именно данная модель расчетов повреждения очень сырая и я ее уже изменил на более оптимальную, но вам ее не покажу. Попробуйте придумать ее сами опираясь на з данные характиристики. Данная же модель больше похожа на камень-ножницы-бумага.
Думаю я все изложил! Если будут вопросы, обязательно задавайте, отвечу!
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Хотя если поставить сопротивление на 50, тогда попасть друг по другу не реально )
В общем интересная штука, хоть и сырая
Ну это я указал. Есть замечательный выход из этих ситуации. Это изменить формулы. Я кое что сделал, но хотел бы что бы народ на сайте поломал голову слегка. Это полезно.
Группа: Посетители
Регистрация: 14.05.2009
Комментариев: 20
Публикаций: 0
Россия, Москва
Хотя если поставить сопротивление на 50, тогда попасть друг по другу не реально )
можно, но сложно - в среднем в полминуты наносится один удар. Правда... через минут 5-ть бой у меня остановился и новый текст соответственно не появлялся. НО игра не зависла... хз... может глюк.
А выход из ситуации - первое что пришло в голову: ввести не показываемый параметр усталости, который это самое сопротивление будет постепенно уменьшать. Ведь нельзя ж вечно "свежим" в бою быть. А заодно до кучи - к силе и ловкости это можно припахать, просто в других пропорциях.
Ты предлагаешь усложнение. А есть способы, ограничившись тем, что уже имеем и только переписав формулу, сделать данный вариант игры более сбалансированным.
Группа: Посетители
Регистрация: 14.05.2009
Комментариев: 20
Публикаций: 0
Россия, Москва
На самом деле задачу изменения формул СИЛЬНО осложняет отсутствие четких основ и жизненных законов. Т.е. с одной стороны не понятно ДО каких высот может прыгнуть скилы сопротивления и проворства, а с другой стороны не понятны механизмы происхождения промаха.
Что касается первого, я ориентировался по максимуму в 99 пунктов для каждого скила (если больше, придется еще подключать тему, что 100% это не 100 пунктов) Что касается второго, то ты за систему расчета взял одну из многих. Взял, понятно дело - примерно (для схематичности), но от балды. Что сильно отвлекает/
Ты изменил лишь шанс уклониться от атаки полностью. Но краеугольный камень там расчет удара и блока. Я принцип их полностью пересмотрел. А вообще хоть формулы были взяты из головы (как любая из учебников по математики или физике или еще бог знает откуда), в них был вложен смысл)))) Который я к сожалению могу описать мысленно но не словами))))
Группа: Посетители
Регистрация: 14.05.2009
Комментариев: 20
Публикаций: 0
Россия, Москва
оке! ориентировался в первую очередь по явному косяку. Ча посмотрю, что с блоками и ударами не так. И в добавок по формуле вышеописанной: думаю, если чар - тупой валенок, и у него проворливость и сопротивление по нулям, то 10% на шанс увернуться многовато будет . Да, и кстати - проглядел. При этих "...= 0.1 + ..." формула осталась уязвимой.
Эта формула была введена с целью сбалансировать уж очень крутую силу. Без нее воин 6/3/3 в легкую выносил воина с 3/6/3 и с 3/3/6 (тесты проходили в основном с этими параметрами), а так хоть что то похожее на баланс было.
Код вписывать надо в первый кадр флешки. Заведи для этого отдельный слой. А вообще если ты только начал изучать флеш. То посмотри уроки для новичков. Они есть в видео формате на этом сайте. Это просто урок для среднего уровня. Читать мы же с букваря начинаем, а не с "Войны и мира"))) И извиняться не надо. Тут все свои)))) Удачи в освоении!
классно.....постараемся разобрать....просто мы игру онлайн браузерную делайм...и хотим реализовать бои как в Дваре, Космиксе и т.д. в общем в 2D но на коде как это выглядет кодер пожимает плечами....может разберем сей код....а вообще были б рады какой-то помощи...
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
Видео Журнал "Легко о Flash" - подписавшись на него вы будете один раз в месяц получать его выпуск на свой почтовый ящик, там вы найдете новые видео уроки по работе в программе Adobe Flash CS4.
политика антиспама
подпишитесь сейчас и получите доступ ко всем выпущенным журналам