Просмотр полной версии : Оптимизация и не только
Решил создать не большую флэш-игрушку. Уже создал кое какие наработки, и возникло 2 проблемы.
1)игрушка корректно работает только если в настройках макромедии стоит flashplayer не выше 6. Если ставить 7-ой и 8-ой не работает кнопка up на которой стоит прыжок. К завтра скачаю adobe flash cs4 попробую через него что нибудь сделать... но не думаю что что то измениться.
2)пока человечек стоит, прыгает или атакует все норм но как только нажимаю влево или вправо игра виснет ,фпс падает в 3-4 раза. Знаю что это из за кучи одинаковых деталей (трава, капли дождя). возникает вопрос как это всё оптимизировать?
Во флэше я новичок, много не знаю, поэтому кто может ответьте пожалуйста поподробнее!
p.s на всякий случай дам ссылку на саму игру выложенную на депозит (увы форум не дает приложит файлы больше 1мб), вдруг какие мысли придут когда увидите...
http://*****************/files/wy7dnue95
1. Очевидно, что проблемы с кодом. Если покажете — скорее всего вам помогут. На скорую руку — поставьте в свойствах публикации ActionScript 1.0.
2. Векторную графику пересохранить в png, например. Как вариант еще — скрывать не отображаемые элементы, удалять их. Ну и так же, возможно у вас с кодом проблемы.
P.S. Ориентируйтесь на 9 версию, правильнее будет. Пятая версия давно вымерла.
Добавлено через 5 минут
Хм. Посмотрел игрушку. Комментировать не буду.
sinigr, прочитайте весь блог xitri.com, вам очень полезно будет.
И вот (http://animbook.mirmap.com/content/category/6/18/43/) еще очень пригодится.
Блин. Есть 100 способв выложить куда-то файл. Даже сюда можно. Нет. Всякие левые депозиты, баннеры, реклама, попапы. Пора это уже в правила внести - с левых ссылок файлы не смотрим!
Добавлено через 2 минуты
:taunt:Кстати а ничего так платформер. Вполне. Дэнди сразу вспомнил...
Большое спасибо за ответы, буду стараться дальше!
Ну вот. Игра стала значительно красивее, обе проблемы решил. Но появились новая, как же без этого :D.
Когда запускаешь игру, то все нормально все 3 уровня спокойно проходятся, но как только нажимаешь развернуть на весь экран куда то пропадают некоторые куски земли. Причем именно пропадают, а не становятся невидимыми. Стоишь на земле, развернул игру и уже летишь в появившуюся пропасть... :)
Ну еще небольшой геморойчик со музыкой,надеюсь сам сожму как нибудь, с ней вес 10,5Мб без неё 800кб.
Вот и еще проблемка появилась, не пойму как обратиться к клипу с именем k1+i созданному с помощью attachMovie.
то_место_где_клип_лежит["k1"+i]
:taunt: Смеялся, когда после смерти, оторванной рукой можно продолжать бить врагов!!!!
dark256, спасибо!
:taunt: Смеялся, когда после смерти, оторванной рукой можно продолжать бить врагов!!!!
именно потому что смешно я это и не убирал :) но щас уже убрал и 4 уровень сделал там динамит можно на толпу монстров скидывать и кучу багов исправил кому интересно могу выложить :)
кому интересно могу выложить
Мне интересно! По большей части конечно смешно (в хорошем смысле). Совершенно безобидные, к тому же белые и пушистые чудовища, живут себе живут, а тут я с луны свалился и давай их мочить без причины. Жестоко. (
Ахах блин я аж прослезился. В первом туре белые зайцы зарезали, но я нажал Play в меню и - воскресс ! Правда манетки перестали собираться и закинуло кудато, где большой зелёный глист. Он тоже захавал меня, но я всёравно убил его своей могучей бессмертной рукой !
Вспомнил себя. У меня веть тоже игра валяеться дома, которую я ещё в дестве будучи школяром сделал. Точно такаяже.
Вечером выложу, поржём все вместе ^^
http://files.etherway.ru/13ad7f
(в опциях есть подсказка) Кусаться Ins или 0
пс запускать в версиях плеера не выше 8
Вечером выложу, поржём все вместе ^^
Сумасшедшая игра! Понравилось, что всё таки есть сюжет, заставки и огромное разнообразие чудовищ. Играть конечно в неё трудно. ;)
sinigr Извините, что немного засоряем вашу тему.
Да ладно самому понравилась игра Tails. Озвучка хорошая :) эх умел бы я получше рисовать монстров...
Вобщем вот исправленная версия в ней 4 уровня. Подсказка: в 1-ом 2-ом и 4-ом уровнях есть секрет, особенно хороший в 4-ом :)
вот что изменилось:
1)можно вкл/выкл звук
2)появилась кнопка рестарт
3)уровень 4, в которм есть ящики с динамтом
4)улучшил камеру теперь когда высоко забираешся она плавно двигается
5)шипы в 1 уровне стали болезненей
6)серый кролик в конце 2лвл стал красивее :)
7)подправил количество монеток. к 4 уровню если найти все секреты их скопиться ровно 90 как раз на 6 улучшений
выкладываю файл на депозит последний раз, некоторые были недовольны, поэтому пожалуйста напишите куда лучше выкладывать.
скачать (http://*****************/files/gtyq0u2nf")
Теперь о новой проблеме. Приатаченные лужи крови странно себя ведут. 1-ая нормально появляется, 2-ая тоже а вот когда появляется третья, вторая почему то перемещается в начала координат (0,0)
вот кусок кода:
_root.attachMovie("luzha","luzha"+i,_root.qq);
_root["luzha"+i]._x = this._x+(Math.ceil(20*Math.random()-10));
_root["luzha"+i]._y = this._y+30;
i++;
_root.qq++;
У вас этот код на игроке написан ?
Скорее всего где-то в коде ещё используеться i или _root.qq, отсюда и неразбериха.
Поиграл, ахах намного лучше стало, и музычка создаёт прикрасную атмосферу. Первый тур совсем здорово сделан, а вот во втором прилично упал fps, это из за гиганской тучи. Капли вы сделали очень большими слоями и растянули пикселей на тыщ 5 наверно. Это каласальная нагрузка на производительность. Переделайте тучу с дождём. Дождь можно сделать как один символ всего с двумя - тремя кадрами ( мелтешаший ) И ни вкоем случае не растягивайте на ширину всей карты, чтоб потом двигать. Пусть он будет статично весеть на одном месте и занимать только ширину экрана.
В третем туре fps упал на столько, что играть стало не возможно.
А почему рукой больше нельзя добивать ? класная фича была :)
Баги:
Сдох - нажал рестарт, появилось меню, в меню поверх уже играющей музыки снова начал играть трек, второй.
В этом - же меню можно юзать кнопки влево вправо.
выкладываю файл на депозит последний раз
К сожалению не могу скачивать с депозита. Жаль что форум не позволяет закачивать архивы размером по больше.
Завтра выложу на вап сайт возожно будет готов 5 уровень с мега босом). Кстати, возможно реализовать следущее: есть 10 мув клипов коробки со взрывчаткой на каждую писать имя типа korobka1 korobka2 это бред а потом еще на каждом враге это бред. дак вот можно ли как то написать на враге что если текущий кадр ЛЮБОЙ из этих 10(а потом и больше) коробок==2 то запуск скрипта. Щас просто в 4 уровне 2 коробки и на кааждом из 15 врагов код что если 1 коробка упадет то... если 2-ая коробка упадет то...
Покомпактнее бы хотелось :)
Добавлено через 12 часов 38 минут
Кстати, все советуют писать код на кадре, а у меня все разбросано по мувикам. Я уже понимаю что действительно лучше писать код на кадре.. но собственно тот же вопрос возникает что я задал выше . как прописать обращение ко всем врагам сразу, ну не поименно же к каждому обращаться) Если пойму как это делаать то значительо упрощу себе задачу и весь код перепишу на кадр.
Нужно использовать функций, а для обращения сразу всем - циклы.
Простой пример про цикл, обращающегося из кадра:
На сцене 50 врагов. Их имена enemy1, enemy2 ... enemyN
Чтобы допустим узнать, не столкнулся ли player с одним из них, делаем так:
totalEnemy = 50; // сколько всего у вас врагов
for (i=1; i<=totalEnemy; i++){ // пробегаем циклом по всем врагам
clip = _root['enemy'+i]; // создаём ссылку на врага
if (player.hitTest(clip)){ // проверка на столкновение врага с игроком
// игрок задевает текущего врага, наши действия
}
}
Пс. Этот пример подойдёт только в учебных целях. При созданий настоящей адекватной игры, нельзя использовать такие циклы тупо проверяющие сразу всех на карте. Представте себе, если у вас на карте будут тысячи врагов, цикл при каждой интераций будут весьма существенно тормозтиь игру. А если все враги ещё должны и реагировать друг с другом ? Кароче говоря для написания хороших игр, нужно ещё много учиться и читать статьи про арганизаций игровых алгоритмов.
Про функций - если вы с ними не знакому, то лучше учиться по какому нибудь учебнику, так как это давольно обширная тема.
спс, буду пробывать!
Добавлено через 4 часа 47 минут
Монетки и герой работают нормально а вот проклятые кролики творят чудеса. почему то лишь 1-ый 3-ий и 6-ой кролик считают себя врагами. а мимо остальных можно безнаказанно ходить. Выладываю кусок кода с кроликами, что здесь не так?
totalKrolik = 7;//кол-во кроликов
for (i=1; i<totalKrolik; i++) {
vrag = this['krolik'+i];
vrag.enemystepsright = 0; //кол-во шагов сделанных кроликом вправо
vrag.enemystepsleft = 0; //кол-во шагов сделанных кроликом влево
vrag.enemydir = "left"; //ориентация кролика влево/вправо (в 1-лвле все изначально кролики смотрят влево)
}
krolik1.enemyspeed = 2;//скорость для каждого кролика
krolik2.enemyspeed = 2;
krolik3.enemyspeed = 2;
krolik4.enemyspeed = 2;
krolik5.enemyspeed = 2;
krolik6.enemyspeed = 3;
krolik1.maksstep = 40; //интервал в шагах на котором ходит кролик (например 40 шагов в право и 40 влево)
krolik2.maksstep = 40;
krolik3.maksstep = 40;
krolik4.maksstep = 100;
krolik5.maksstep = 100;
krolik6.maksstep = 100;
this.onEnterFrame = function() {for (i=1; i<totalKrolik; i++) {
vrag = this['krolik'+i]; \\кролики с именнем krolik+i vrag
if (vrag.bum.hitTest(char.arm.dubina) && udar == true) { //если bum(область кролика попадание по которой защитывается) пересечется дубинку героя и udar=true(переменная введеная для того чтобы жизни снималисась 1 раз(udar=true с 10 по 13 кадр удара дубинки))
vrag.yl.text -= (Math.ceil(10*Math.random()+effect)); // -0-10+20(изначально) жизней у игрока
vrag.otpuli.play();// запуск клипа с кровью в кролике
udar = false;
udarproshel = true; //вобщем эти 2 переменные помогают сделать чтоб жизни отнялись 1 раз а не все время сопривосновения с дубинкой
}
if (vrag.yl.text<=0) { //ну тут понятно если кол-во жизней у врага меньше 0 он умирает
vrag.enemyspeed = 0;
vrag.enemystepsright = 0;
vrag.enemystepsleft = 0;
vrag.gotoAndStop("dead");
}
if (!vrag.bum.hitTest(char.bam)) { //если герой не касается врага враг в обычном сотоянии
vrag.telo.gotoAndStop(1);
}
if (vrag.bum.hitTest(char.bam) && vrag._currentframe == 1) {//если враг касается героя то герой теряет 1очко жизней за кадр а враг переходит на 2 кадр(атакует)
vrag.telo.gotoAndStop(2);
char.jumping = false;
health.text -= 1;
}
if (health.text<=0) {//если сзоровье героя меньше 0 он труп
dead = true;
health.text = 0;
}
if (vrag._currentframe == 1) { //если текущий кадр врага=1 (т.е он живой)
if (vrag.enemydir == "right") {
vrag.enemystepsright += 1;//добавляется шг за кадр
vrag.telo._xscale = -100;
vrag.otpuli._xscale = -100;
vrag._x += vrag.enemyspeed;//враг сдвигается на величину enemyspeed заданную для каждого раньше
} else if (vrag.enemydir == "left") {
vrag.enemystepsleft += 1;
vrag.telo._xscale = 100;
vrag.otpuli._xscale = 100;
vrag._x -= vrag.enemyspeed;
}
if (vrag.enemystepsright == vrag.maksstep) { //если число шагов равно максимальном враг поворачивается а число шагов =0
vrag.enemystepsright = 0;
vrag.enemydir = "left";
} else if (vrag.enemystepsleft == vrag.maksstep) {
vrag.enemystepsleft = 0;
vrag.enemydir = "right";
}
i++;
}}
Чтоб легче было разобраться что откуда и как работает, пожалуйста добавте в свой код коментарий. И если можно, перенесите его весь в один кадр.
Чтобы код постоянно выполнялся, поместите его в:
onEnterFrame = function() {
// помещённый сюда код будет постоянно выполняться
}
Код и так в onEnterFrame = function. Просто сначала идут параметры которые задаются только при загрузке.
Комментрии сейчас подпишу.
Добавлено через 24 минуты
не ну это уже чудеса какие то убрал i++ в конце кода про кроликов теперь живы все кроме 3-его.
Добавлено через 50 минут
Все разобрался! У меня просто было два krolik3 :)
Будте внимательнее, и чудес с волшебством будет меньше :)
Меня смутило
vrag = this['krolik'+i];
Подумал опять где-то на символах пишите.
нет, теперь весь код на кадре.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.