Просмотр полной версии : Вопрос оптимизации
Ravanger
31.08.2007, 14:09
Доброго времени суток, форумчане!
неделю назад начал учить флеш(в комплексе), попытался что то написать, так вот в процессе написания возник вопрос оптимизации скрипта так как идет сильная нагрузка на цп и большой расход оперативы.
исходник прилагаю
17601
прошу не судить строго, это мой первый опыт
Зарание благодарен
что, желающих нет?
Блин, че, посмотреть тяжело?
Плюс за ап темы.
Здесь вам никто ничего не должен, это не служба поддержки, вам ответят только тогда, когда захотят.
DarkLight
02.09.2007, 19:24
1) зачем ставить интервалы в 10 мс и при этом фпс 12?
2) у меня использование процессора колеблется в пределах 18-25%, имхо приемлимо.
CrazyFlasher
02.09.2007, 19:54
у меня не тормозит. 10-15%
P.S. флэш почти не нагружает оперативку...больше всего процессор
а вообще код советую переделать на классы, потому что чем больше будет сделано, тем сложнее будет разобраться, т.к. все функции тупо напиханы во фрейм
Ravanger
03.09.2007, 12:01
__etc извини, не буду больше
ребят, сначала не нагружает, но стоит монстрам появится раз в 4-5 й начинает подтормаживать
немного не понял по поводу интервалов, ты про какие?
Mr. Fixit
03.09.2007, 14:13
вы сами написали код?
Ravanger
04.09.2007, 12:36
Да, сам, правда спрайт монстра спер, надоели летающие треугольники))
CrazyFlasher
04.09.2007, 12:57
ребят, сначала не нагружает, но стоит монстрам появится раз в 4-5 й начинает подтормаживать
а removeMovieClip используете?
Ravanger
04.09.2007, 14:01
а removeMovieClip используете?
да, в том то и дело, что я не знаю, что вызывает тормоза...
Ravanger
07.09.2007, 11:13
еще аопрос, как поставить у мувика который распологается на столе руками глубину больше чем у мувиков которые аттачатся, или прийдется его так же аттачить?
Psycho Tiger
07.09.2007, 13:31
removeMovieClip(eval("unit"+m));
Омг, не знал что так кто то ещё пишет...
А игра для 1 раза очень хорошая...
Вот нашел, возможный баг:
Врагу засадили пулю:
createDeadBody(unitArr[m]._x, unitArr[m]._y);
removeMovieClip(eval("unit"+m));
MonsterOnField--;
Юнит упал, создаем мертвое тело:
function createDeadBody(bodyX:Number, bodyY:Number):Void {
dead[deadCounter] = attachMovie("deadBody", "deadBody"+deadCounter, deadCounter);
dead[deadCounter]._x = bodyX;
dead[deadCounter]._y = bodyY;
dead[deadCounter].timer = getTimer();
cleanTable();
deadCounter++;
}
Мы вызвали функцию клинТэйбл(), давайте посмотрим, что же делает она:
function cleanTable():Void {
for (var i = 0; i<dead.length; i++) {
if (getTimer()-dead[i].timer>2000) {
removeMovieClip(eval("deadBody"+i));
delete dead[i];
}
}
}
Красиво и элегантно, функция вызвается сразу после убийства.
Итого:
1) Труп будет лежать (невидимый из за анимации, но все же) даже когда пройдет 2 секунды - он исчезнет только после следуйщего вызова функции (т.е. при следуйщем убийстве)
2) Этот пункт мне нравится больше всего =)) при убийстве мы пихаем в масив dead трупов... после убираем их трупов но... из масива то мы не убираем их! Итого, после 5-6 раза, цикл вместо своего 20 раз при убийстве противника крутиться 100+ раз) Вот тебе и тормоза =Ъ
_root.клип_который_лежит_на_сцене.swapDepths(1000);
Это по поводу глубины
Psycho Tiger
07.09.2007, 13:33
Млин, извиняюсь, поправочка: мы убиваем лишь номер трупа и его значения, т.е. у нас масив будет идти так
dead[0]=...
dead[1]=... // убиваем
dead[2]=...
После получается что масив у нас вот такой:
dead[0]
dead[2]
deadCounter мы не понижаем на единицу, поэтому после 5-6 раза длина масива и будет равна 100+... почти тоже самое что я написал выше, но все же... поправа есть поправка)
Ravanger
07.09.2007, 15:33
removeMovieClip(eval("unit"+m));
Омг, не знал что так кто то ещё пишет...
а как правильно, вернее как пишут сейчас?))
по поводу массива благодарю, не учел, исправлю
_root.клип_который_лежит_на_сцене.swapDepths(1000);
Это по поводу глубины
Благодарю!
Psycho Tiger
08.09.2007, 16:32
Вместо eval("unit"+m) пишут mc["unit"+m]
Т.к. mc у тебя _root (т.е. главная стцена), то _root["unit"+m]
Все же, пиши как хочеш, все эти стандарты ООП... Работает, и ладно, а компилятор сам вставит все как надо в 90% случаев, ИМХО
Насчет swapDepth, если у вас флэш 7+, то разумнее было бы использовать
mx.behaviors.DepthControl.bringToFront(your_mc);
Почему разумнее? Ибо в большем проекте, вы можете просто позабыть, что глубина 1000 у вас уже занята, что приведет к нежелательному эффекту, тут же все будет работать на ура.
Ravanger
08.09.2007, 16:42
да, с занятой глубиной уже столкнулся, особенно с теми мувиками глубина которых изменяется динамически... Спасибо!
кста, по поводу cleanTable() он у меня в той функции вызывался только при отладке(функция другой вид имела), она также в _root.onEnterFrame() и нормально себя чувствует, просто тот вызов забыл убить)
function createDeadBody(bodyX, bodyY){
trup = attachMovie("deadBody", "deadBody"+deadCounter, deadCounter);
trup._x = bodyX;
trup._y = bodyY;
trup.timer = getTimer();
dead.push(trup);
cleanTable();
deadCounter++;
}
function cleanTable():Void {
var arr = new Array();
var trup;
var t = getTimer() - 2000;
while( dead.length ){
trup = dead.pop();
if( trup.timer > t )arr.push( trup )
else trup.removeMovieClip();
}
dead = arr;
}
Типизацию сами поставите. И выставьте fps в 31.
И мне не нравятся 13-14 строчки. Зачем time добавлено к массиву мертвых?
Остальное не смотрел.
Kikasso, какой смысл в типизации в AS1? :)
Psycho Tiger
09.09.2007, 16:07
Видать, я совсем отупел...
Насколько я понимаю, типизация - это когда каждая переменная раскладывается по типам, т.е. мы не можем из бывышего Number`a сделать String.
Если я прав,то она нужна везде, особенно в ас 1, ибо она заставляет работать программу быстрее.
Ыть. Сам рекомендую, а юзая менее чем в 10% случаев XD
Mr. Fixit
09.09.2007, 16:08
извиняюсь, что отвечаю(т.к. не у меня спросили), но типизация никакой роли для AS1 не играет, но для понимания разработчиком, к какому типу переменная относиться знать желательно, да и для будущего использования в AS2 полезно. ;)
Видать, я совсем отупел...
Насколько я понимаю, типизация - это когда каждая переменная раскладывается по типам, т.е. мы не можем из бывышего Number`a сделать String.
Если я прав,то она нужна везде, особенно в ас 1, ибо она заставляет работать программу быстрее.
Ыть. Сам рекомендую, а юзая менее чем в 10% случаев XD
В AS1 особого смысла в использовании нет. В AS2 — потому что так правильно. А на деле никакой типизации в AS1/AS2 нет. В принципе, типизацию писать в AS1 коде можно, даже может помочь в поиске ошибок, но только простых, какие легко отлавливает компилятор. На практике простые ошибки случаются редко и типизация в данном случае роли не играет.
Mr. Fixit
09.09.2007, 17:53
типизация существует для понятного кода девелоперу, и для отладчика, который правильнее покажет проблему ошибки...
типизация существует для понятного кода девелоперу, и для отладчика, который правильнее покажет проблему ошибки...
Что такое «проблема ошибки»?
Лишь в некоторых случаях использование типизации поспособствует отлову ошибки, но таких случаев довольно мало и они довольно тривиальные.
Mr. Fixit
09.09.2007, 18:37
Что такое «проблема ошибки»?
это тавтология, кажеццо
Kikasso, какой смысл в типизации в AS1? :)
У автора в исходнике стояла. А вообще самые простые ошибки дольше всего искать.))
Mr. Fixit
09.09.2007, 19:01
Смотря какие ошибки :Р
Psycho Tiger
10.09.2007, 10:31
Странно... а какую роль оно играет в ас2?
Для AS2 есть нормальные инструменты для разработки, которые учитывают типизацию. Кроме того, в AS2 применение типизации обязательно, даже если она работает также, как в AS1.
CrazyFlasher
10.09.2007, 12:00
class Haha {
private var num:Number;
public function Haha() {
this["num"] = "hello"
trace(num);
}
}
типизация в АС2.0 - лирика ;-)
class Haha {
private var num:Number;
public function Haha() {
this["num"] = "hello"
trace(num);
}
}
типизация в АС2.0 - лирика ;-)
Обмануть компилятор можно (ведь AS2 совместим с AS1 по байткоду). Можешь не использовать типизацию в AS2, если считаешь её бесполезной. И в AS3 тоже можно не использовать типизацию. В AS1 типизация — что запорожцу движок от BMW. О какой типизации может идти речь, если код, графика, данные лежат в куче? В AS2 — другое дело.
CrazyFlasher
10.09.2007, 15:30
нее...я ЗА типизацию...и даже в АС1.0. Код более читабельный и приятный для просмотра и работы
Ravanger
11.09.2007, 16:30
я еще с паскаля в школе привык типизировать переменные) хорошая практика, хотя в случае скриптовых языков и не очень полезная
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.