PDA

Просмотр полной версии : Убрать перерисовку компонентов, с параметром visible=false


Tails
28.02.2011, 11:31
Наткнулся на такую штуку:
Если у мувиклипа параметр _visible = false, то флеш плеер его не перерисовывает, что в принципе логично. Но если этот мувиклип засунуть в другой, и задать его бате визибл ноль, то он невидимым то станет, но перерисовываться всёравно будет. Класная фича :) Все анимированные объекты в бате перерисовываются, несмотря на то что он visible=false.
Это я так чувствую, никак не исправить, только АС 3? или всё-же есть способ? Или может от версий флеш плеера зависит ? в восьмом тестировал.

Hauts
28.02.2011, 12:52
cacheAsBitmap = true спасет.

terbooter
28.02.2011, 13:02
removeChild

iNils
28.02.2011, 13:10
removeChild
В ас2?

Hauts
28.02.2011, 13:12
function removeChild(mc:MovieClip){
mc.swapDepths(mc._parent.getNextHighestDepth());
mc.removeMovieClip();
}


:D

Tails
28.02.2011, 13:30
Hauts
cacheAsBitmap хорошая вещ, но в нашей проблеме не спасёт. Всёравно же он там перерисовываеться.

function removeChild(mc:MovieClip){
mc.swapDepths(mc._parent.getNextHighestDepth());
mc.removeMovieClip();
}
Ахах. Да видимо если только так, выгружать и поновай грузить. Это печально :(

Hauts
28.02.2011, 13:38
А так?
26110

Tails
28.02.2011, 13:42
Hauts
Немагу исходник открыть, у меня ток 8 версия флеша. Дома вечерком гляну. Или пересохрани плз, если есть возможность.

Hauts
28.02.2011, 13:51
Вот в восьмерке.

Смысл в том, что слева и справа одинаковые блоки, только у каждого правого поставлено _visible = false и cacheAsBitmap = true.
26111

Tails
28.02.2011, 13:57
Вот в восьмерке.

Смысл в том, что слева и справа одинаковые блоки, только у каждого правого поставлено _visible = false и cacheAsBitmap = true.
26111

А ну так я тоже пробовал так делать, всёравно рисует. Если у тебя нет, значит дело во флеш плеере. Ты веть из более позднего запускаеш?

Hauts
28.02.2011, 14:01
Да, я из ЦС3 и из standalone-плеера. Кстати последнее советую попробовать, по каким-то причинам во флэше часто бывает, что показываются нереальные регионы перерисовки (в свое время меня это очень напрягло). Так перерисовывался прямоугольник слева-сверху при программном добавлении и удалении мувиклипа.

Tails
28.02.2011, 14:14
Спс за совет. Я тут небольшой тест провёл:
for(i=1; i<=7000; i++){
attachMovie('sa','sa'+i,i);
clip = _root['sa'+i];

clip._x = random(550);
clip._y = random (400);

clip._visible = false;

clip.gotoAndPlay(random(20));
}
attachMovie('sa','sa',9000);
sa._x = 225;
sa._y = 200;
где sa - клип в библиотеке с простой анимацией.

Вобщем выяснилось, что никаких затрат на прорисовывание каждого отдельно клипа с нулевой видимостью - нет. Просто флеш плеер, расчитывая зону для перерисовки - учитывает и невидымые клипы (визибл ноль). Это совсем не существенно, и жить с этим можно. Причин для паники нет, всем спс :)

Хотя конечно, для приложений с большим размером, или фулл скрин, этот вопрос так и не решён.

Hauts
28.02.2011, 14:21
Я бы код немножко поменял :)

for (var i = 0; i<=7000; i++) {
var clip = attachMovie('sa', 'sa'+i, i, {_x:Math.random()*550, _y:Math.random()*400});
clip._visible = false;
clip.gotoAndPlay(Math.floor(Math.random() * 20) + 1);
}
attachMovie('sa','sa',9000);
sa._x = 225;
sa._y = 200;