PDA

Просмотр полной версии : Почему при указании на функцию из мувика во внешнюю среду, ролик тормозит?


EndoCrinologist
29.05.2011, 12:14
Вот код мувике:

onClipEvent (load) {
MadBallSled = 1;
}
onClipEvent (enterFrame) {
if (MadBallSled == 1){
_root.MainSled();
}
}


А вот код во внещнем ЭТОМ ЖЕ кадре:

function MainSled():Void{
function Sled():Void{
//----------КРАСИВЫЙ СЛЕД
_root.n++;
NewName = "doth" + _root.n;
var CL = doth.duplicateMovieClip( NewName, getNextHighestDepth() );
CL._x = _root.MadBall._x;
CL._y = _root.MadBall._y;
}
var time=setInterval(Sled,1);
}


При запуске, роли ОООООЧЕНЬ сильно тормозит. Подскажите, как улучшить? что убрать? опимизировать?

mooncar
29.05.2011, 12:16
Для начала:

1. Убрать код с мувика, записать в кадре.
2. Не объявлять одну функцию, внутри другой, выносите её.

А потом уже можно и дальше смотреть, что у вас не так. А не так у вас то, что с частотой EnterFrame у вас плодится огромное количество интервалов.

EndoCrinologist
29.05.2011, 12:34
Хм... дело в том, что я уже пробовал убирать из мувика. Он не работает. Просто я им управляю с клавиатуры, а при движении остается след. Это всё я сделал, чтобы как бы пользователю сначала был недоступен красивый след от объекта, а при покупке след возобновился......
О!!! Я ПРИДУМАЛ!! просто сделаю инвизибл на этот след! ^_^ Спасибо огромное! ^_^

Добавлено через 2 минуты
Хм... что-то не вышло с инвизом..

mooncar
29.05.2011, 13:03
Хм... дело в том, что я уже пробовал убирать из мувика. Он не работает.
Решайте.
MadBallSled = 1;
this.onEnterFrame = function()
{
...
};


Потом п.2.

Потом надо решать, что с интервальными функциями Sled делать, тормоза от этого.
Сейчас они у вас плодятся с частотой fps. Каждую секунду несколько раз (с частотой fps) у вас стартует выполнение отдельного экземпляра функции Sled с частотой тысячу раз в секунду.
То есть, если частота проекта выставлена как 30 fps, то уже в течении первой секунды вы пытаетесь заставить флеш-плеер выполнить функцию Sled примерно 30 x 1000 = 30 000 раз. В течении второй - уже в два раза больше. И т. д.
Всё надо переделывать.


PS
1. Отучайтесь писать код на объектах, вообще смотреть на него нет желания ни у кого.
Не работает - разбирайтесь, что именно, трейсить учитесь.
2. Не давайте имена функциям с прописных букв - это зарезервировано для названий классов.
3. Не давайте своим переменным зарезервированные имена, типа time.

EndoCrinologist
29.05.2011, 13:48
MadBall.onEnterFrame = function()
{....
}

Вы так имели в виду?
Если да, то получилось очень жестоко... Все элементы задвигались на кадре...