Как сделать так, чтобы Flash не отображал объект в рабочей области?

Это обсуждение началось здесь, но я подумал, что было бы неплохо получить окончательный отвечать...

Итак, допустим, у вас есть MovieClip на сцене (или UIComponent для аудитории Flex) - что вам нужно сделать, чтобы не сделать так, чтобы пользователь не мог видеть объект, но также чтобы AVM2 даже не учитывал это при рендеринге сцены для пользователя?

Я всегда думал, что ответ заключался в установке visible = false, но есть аргумент, что объект должен быть помещен за пределы сцены (например, x = 2000, который выглядит как взлом IMO). Кто-нибудь знает настоящий ответ?

РЕДАКТИРОВАТЬ: Я полагаю, что необходимость в том, чтобы флеш-память не отображала элемент, могла бы повысить производительность.


person onekidney    schedule 04.10.2008    source источник


Ответы (5)


Взлом предназначен для Flash 8 (ActionScript 2) или ниже. После обновлений до ActionScript 3 и Flex 2/3 достаточно установить свойство visible.

person user25103    schedule 04.10.2008
comment
Я согласен. Я должен был указать это в своем ответе на другой вопрос. - person Max Stewart; 04.10.2008
comment
Этот ответ неверен, если только производительность не имеет значения. Невидимые клипы по-прежнему требуют накладных расходов на рендеринг; просто не имеет значения, где они находятся. Подробности см. В моем ответе ниже. - person fenomas; 07.10.2008

Как отмечали другие ответы, «взлом» для перемещения клипов за пределы сцены больше не нужен. Однако установка visible = false; не разумно, если производительность важна. Клипы, которые являются частью списка отображения, но настроены как невидимые, могут повлечь за собой значительные накладные расходы на рендеринг, если у вас их достаточно. Если вы удалите их из списка воспроизведения с помощью removeChild(), они не вызовут накладных расходов на рендеринг (хотя они все равно занимают память).

person fenomas    schedule 07.10.2008

Да, как и было сказано в дизайне, просто удалите его из списка отображения:

var s:MovieClip = new MovieClip();
s.lineStyle(1, 0xFFFFFF);
addChild(s);//shows in moviea 
removeChild(s);//removes from display list, but you still have a reference to it

Я не тестировал это, но он должен дать вам общее представление.

Майк

person mikechambers    schedule 07.10.2008

Если вы используете Flex и его систему компоновки контейнеров, includeInLayout в классе UIComponent также полезно, когда вы не хотите что-то отображать: оно указывает, следует ли учитывать компонент при измерении макета.

person hasseg    schedule 04.10.2008

Полностью удалить его из списка отображения (removeChild (), removeChildAt () и т. Д.). Пока вы на самом деле не установите для ссылки на MovieClip значение «null», он все равно останется в памяти и может быть повторно добавлен в список отображения, когда он вам снова понадобится (addChild (), atChildAt () и т. Д. .)

person restlessdesign    schedule 05.10.2008