PDA

Просмотр полной версии : Вопрос по тормозам


Tauron
13.10.2004, 20:13
Делаю я тут мувик с шариками, массив шариков появляется и крутится, сначала один, потом второй. Спасибо, кстати, МоНаХу за принцип :) Есть один вопрос- когда массив шариков только появляется в мувике через attachMovie появляются тормоза для всего остального, происходящего в мувике в данный момент. Понимаю, что быть может всему виной достаточно большое количество элементом или недостаток ресурсов мозга, но может все-таки кто-нибудь глянет код и подскажет советом, как можно избавиться от лагов?
Заранее большое спасибо.

Ромастый
13.10.2004, 21:48
Гм... Ну ответ в том, что шариков ДЕЙСТВИТЕЛЬНО много, и ты КАЖДОМУ присваиваешь на onEnterFrame свою функцию.
Не знаю, как сделать проще, но есть пара идей.
1. Простая. Написать одну прототипную функцию и назначать ее всем шарикам.
MovieClip.prototype.myFunc=function() {...};

for(i=1;i<=дофига;i++) {
this["ball"+i].onEnterFrame=myFunc;
}

2.Сложная. Попробовать сделать так, чтобы расположение и перемещение шариков обрабатывал один, внешний по отношению к ним клип. Наверное снова через массивы.

Что тормоза исчезнут совсем не уверен, но работать точно будет быстрее.

Tauron
14.10.2004, 14:54
По пункту 2 делал я до этого наверно также как ты советуешь. Был внешний клип, который размножал шарики, делал из них массив и все движение через циклы. Может из-за корявости, может само по себе, но было очень тормознуто. Тогда-то мне и посоветовали сделать так, как сделал сейчас...
А по первому пункту попробую, спасибо за предложение...
Кстати, ты вот смотрел клип по моему исходнику. Заметил, что перед появлением обоих массивов шариков в левом верхнем углу на долю секунды появляется один большой шар... Я так полагаю, что это- эталон, правильно? Но почему он там появляется? Я уж ему и писал конструкции, типа ball2._visible=false, но он все равно мелькает.. Что я делаю не так?

Ромастый
14.10.2004, 21:43
гм. не заметил. посмотрю еще разок.
Но эталоном это может быть только если ты дупликэйтом пользуешься, при аттаче никаких эталонов в рабочей области не возникает.

artfla$her
15.10.2004, 01:17
Это не эталон... Это - онИнтерФрэйм. Посмотри - у тебя аттачируются мувики, которые на вход в кадр меняют свои свойства, но изначально они - большие. И первую долю секунды не один даже, а куча мувов на одной координате висят со 100% scale-ом. Если бы это был эталон, то и координата у него была та же, что и в первом кадре.

А эталон на самом деле не нужен -)

Тормоза, как я понял, ты никогда не убьешь, потому что у тебя шарики создаюся все 24*9 штук разом. Такой цикл сложно переварить. Создавай их заранее, прелоадер сделай какой-нить.

Ромастый
15.10.2004, 10:49
Посмотрел снова. Да, есь такая штука. artfla$her правильно сказал, что при аттаче они у тебя с дефолтными свойствами, и лишь на следующем кадре - все как надо.
Вижу пару способов:
1. Задать все св-ва уже при аттаче. Зае...ёсся :D

2. Проще. this.attachMovie("ball","ball"+i,i,{_visible:false});
а на следующем кадре
for(i=1;i<=дофига;i++) {
this["ball"+i]._visible=true;
}

прелоадер сделай какой-нить.
Тут прелоадинг не спасет. Это дело проц напрягает, отсюда и тормоза. А не из-за неполной загрузки.

artfla$her
15.10.2004, 12:56
Я не про загрузку. Прелоадер - только для виду, картинка, не более, можно - анимация. А в это время аттачировать заранее шарики. Когда все саттачируются и определятся - начинать фильм.

Ромастый
15.10.2004, 13:26
Может и поможет... Хотя не думаю, что сильно.
Кстати, как вариант - аттачить не циклом for, а ввести счетчик
на onEnterFrame, т.е. за каждый кадр будет прибавляться по одному или по несколько шариков.
И смотреться возможно будет эффектнее, и проц плавнее нагружаться начнет, так что резкого скачка не будет. А плавное притормаживание не так заметно.

fiot
18.10.2004, 20:40
Tauron
немного оптимизировал...

единственное что может помочь, это просто сделать сначало столбец с шариками а потом над ними извращаться. т.е производительность вырастет на количество всех элемнтов / количество рядов.
_ _ _ _
|x,x,x,x| |X,X,X,X| _ _
|x,x,x,x| -> - - где Х - | x |
- - | x |
- -

Tauron
19.10.2004, 18:50
Всем большое спасибо за помощь!
Код слегка соптимизировал, удалил один ряд шариков, стало лучше. Попозжее продолжу копание в этих шариках, сейчас времени нет, надо дальше двигаться..
С тем, что я принял за эталон тоже разобрался.
Еще раз спасибо :)