PDA

Просмотр полной версии : Тормоза при включении форматной выключки.


pkfun
07.07.2006, 00:31
В восьмом флэше появилась возможность задавать форматную выключку для динамического текста.


poleTwo.createTextField("news", news.getNextHighestDepth(), 250, 83, 590, 472);
poleTwo.news.multiline = true;
poleTwo.news.wordWrap = true;
poleTwo.news.html = true;
poleTwo.news.setNewTextFormat(new TextFormat("_sans", 14, null, null, null, null, null, null, "justify", null, null, null, 2));


Я обратил внимание на чрезмерную "прожорливость" этой выключки в плане ресурсов системы: выключка влево потребляет прим. в два, три раза меньше ресурсов(смотрел в Win Task Manager).
Вопрос такой: это у всех так или я что-то неправильно делаю? Можно ли как-нибудь уменьшить аппетит этой функции?

etc
07.07.2006, 01:51
Скорее антиалиасинг восьмерки жрет, а не выключка

kayama
07.07.2006, 10:36
Именно. Если текст стоит for Readability - будет неплохой тормоз, ставишь for animation - текст гладится корявее, но тормозов не будет.

pkfun
07.07.2006, 13:44
У меня в коде указано, что шрифт "_sans". Это системный шрифт. Для системных шрифтов, что тоже сглаживание работает? Там даже нет выбора вида сглаживания для device fonts. :)
Интересно получается: для выключки влево сглаживание не работает или работает, но потрабляет немного ресурсов. А для форматной запускается на полную катушку? Что-то здесь не сходится. Я проверял все доступные виды выключки - тормоза только с форматной.

etc
07.07.2006, 14:45
pkfun, выложи пример.

iNils
07.07.2006, 14:53
Может я чего то не понимаю, но у меня этот код всегда генерился чуть более секунды, и не важно justify или left, Arial или _sans, embedFonts или нет.
t1 = getTimer ();
for (var i = 0; i < 100; i++) {
this.createTextField ("txt", 0, 250, 83, 200, 472);
this.txt.multiline = true;
this.txt.wordWrap = true;
this.txt.html = true;
// this.txt.embedFonts = true
this.txt.setNewTextFormat (new TextFormat ("Arial", 14, null, null, null, null, null, null, "justify", null, null, null, 2));
this.txt.text = "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
this.txt.text += "asdfasdf asdf asdfas df asdfasdfasd fa sdf asdf asd fas d f as";
}
trace (getTimer () - t1);

etc
07.07.2006, 14:59
Дело не в генерации, а в самой работе и потребляемом процессорном времени...
Хотя, на голом текстовом поле разница неощутима, нужен пример, где это заметно.

iNils
07.07.2006, 15:05
Ну тогда ждем примера.

pkfun
07.07.2006, 15:58
Подготовлю и выложу пример.

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

pkfun
07.07.2006, 18:20
14685

Пример находится в раре. Размер 32 кило. После распаковки откройте папку test и запустите файл test1.swf или(лучше) test1.fla

Коротко объясню структуру текста:
- сам текст берется из файла his/his003/his003.txt Tекст отформатирован с использованием флэшевской html разметки;
- в текст вставлены картинки. Картинки вставляются в виде внешних swf, которые лежат в папке his/his003( в примере есть swf варианты);
- внешние swf сами по себе не содержат файлы картинок. Сами изображения грузятся по ссылкам с сервера. Эти ссылки на изображения находятся в файле his/his003/hisPics003.txt;
- если будете запускать сразу test1.swf, то картинки не загрузятся. Поэтому запускайте лучше fla вариант. И еще лучше чтобы при запуске файла вы были в инете( а то картинки не загрузятся).

Скроллера нет, но я прокручивал с помощью стрелок вверх/вниз. Надо щелкнуть по текстовому полю, нажать стрелку вниз/вверх и немного подождать.
Меняйте выключку, смотрите результаты.

iNils
07.07.2006, 20:46
У меня такое подозрение, что в данном режиме флеш каждый раз пересчитывает положения слов. Как насчет сделать маску, а текст загнать в битмапДату?

pkfun
07.07.2006, 21:44
А что такое битмапДата? :)
...Ах, да! Пошел читать HELP. :)

pkfun
10.07.2006, 23:16
iNils
Во-первых, большое спасибо! Сделал с bitmapData, производительность возрасла( меньше тормозов). :)
Появился еще один вопрос: есть ли у swf-ок, загружаемых в текстовое поле через таг <img>, какие-нибудь события? Что-нибудь типа onLoadComplete. Или, возможно ли такие события создать?

iNils
10.07.2006, 23:37
Честное слово, будь я на вашем месте, я бы взял и попробывал, а потом уже задал вопрос :)
Загружаемые swf файлы ведут себя точно также, как и загруженные с помощью loadMovie, то есть можно и прелоадеры для писать.