PDA

Просмотр полной версии : Оптимизация текста. Это реально?


ARTur2
11.05.2007, 20:34
Здравствуйте!
Дело в том, что у меня есть клип, в котором один из слоёв обычный текст и его очень много. Без текста всё работает просто отлично, а с текстом флешка начинает тормозить. Пробывал оптимизировать с помощью this.cacheAsBitmap = true, но помогает слабо... Вот и возник вопрос. Можно ли как-нибудь оптимизировать текст?

Aziz Zaynutdinoff
11.05.2007, 20:45
просто перевести весь текст в картинку через

BitmapData.draw(src);

с последующим удалением исходного ресурса

ARTur2
11.05.2007, 20:48
А можно подробнее? На слой этот код вешать или куда?

Kikasso
11.05.2007, 20:52
Текст наружу, его грузить, и проблемы нет.
Если текста очень много, он превысит предел по габаритам.

ARTur2
11.05.2007, 20:55
2 Kikasso я делаю карту, т.е. там текст разбросан по всему клипу и относительно горизонтали у отдельной надписи своё положение. Можно ли такой текст как-нибудь подгружать со строны?

Aziz Zaynutdinoff
11.05.2007, 21:04
Любой текст можно грузить извне. Один из самых удобных способов из XML-файла.

ARTur2
11.05.2007, 21:08
Допустим у меня улица проходит относительно вертикали под 45 градусов. Надпись, обозначающая улицу соответственно тоже должна быть под 45 градусов относительно вертикали. Это реально сделать, в смысле через XML-файл задавать положение и угол наклона? И если этих улиц 200? Плюс ещё номера омов... Объясните, пожалуйста, как использовать BitmapData.draw(src);.

Aziz Zaynutdinoff
11.05.2007, 21:21
Сошлюсь на пример из Help'а (поиск по ключевым BitmapData constructor), дам ссылку на помощь от iNils'а (http://help.inils.ru/flash8/) ну и в качестве бонуса минипример по использованию в вашем случае:

import flash.display.BitmapData;
//грузим XML и парсируем его.
//пишем функцию обработки полученных данных
//среди которых легко можно брать и угол поворота
//
//далее формирование текста:
var _tmp_mc:MovieClip = this.createEmptyMovieClip("_tmp_mc", this.getNextHighestDepth());
var _tmp_txt:TextField = _tmp_mc.createTextField("_tmp_txt", _tmp_mc.getNextHighestDepth(), 0, 0, 1, 1);
_tmp_txt.autoSize = true;
_tmp_txt.text = <НАЗВАНИЕ УЛИЦЫ>;
var _bmp:BitmapData = new BitmapData(_tmp_mc._width, _tmp_mc._height, true, 0xFFFFFF);
_bmp.draw(_tmp_mc);
_tmp_mc.removeMovieClip;
var street_mc:MovieClip = this.createEmptyMovieClip("street_mc", this.getNextHighestDepth());
street_mc.attachBitmap(_bmp);
street_mc._rotation = <УГОЛ ПОВОРОТА>;


Учебник по XML (http://www.artlebedev.ru/tools/technogrette/etc/flash-xml/) от Дембицкого. Будет полезно к изучению и пониманию основ XML

screamge
11.05.2007, 21:24
В хелпе про это достаточно написанно, если английский хелп не устраивает ищите iNils - a, а точнее его подпись.


Надпись, обозначающая улицу соответственно тоже должна быть под 45 градусов относительно вертикали. Это реально сделать, в смысле через XML-файл задавать положение и угол наклона?

А зечем создавать создавать поля, просто записывайте текст в созданные на карте.

Что касается BitmapData то он подходит вамтолько в том случае если надписи не функциональны, т.е. не должны нажиматся и т.д.

Aziz Zaynutdinoff
11.05.2007, 21:28
ну про то, что они не будут нажиматься – это ты погорячился :) будут... как миленькие.

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

ARTur2
11.05.2007, 21:35
С текстом работать не надо будет. Он только в качестве "декорации"8) Готов уже полностью, теперь осталось только отрисовать. Сейчас читаю хелп, но толком не могу ничего поянть8(

aksios
11.05.2007, 22:29
Напишите текст, на текстовом поле тыкните правую кнопу мыша и выберите в меню Break Apart. Два раза. Как вариант.

Aziz Zaynutdinoff
11.05.2007, 22:33
К сожалению это не вариант, а распложение векторных форм, что ведёт к диким тормозам.

aksios
11.05.2007, 22:38
К сожалению это не вариант, а распложение векторных форм, что ведёт к диким тормозам.
Уверен что векторных?

screamge
11.05.2007, 22:41
Уверен что векторных?


После второго раза, да.

Азиз, ты уверен что функционал кнопки сохраняется после прорисовки? Я тыкал, тыкал и всё никак:(

Aziz Zaynutdinoff
11.05.2007, 22:44
я так делаю :) когда не надо выделять текст.

_mc.attachBitmap(bmp);
_mc.onRelease = function(){
trace("Hehe")
};

screamge
11.05.2007, 22:45
Это не честно:D

Aziz Zaynutdinoff
11.05.2007, 22:46
А кто тут играет по правилам? :D

screamge
11.05.2007, 22:48
Но к поставленной задаче не применимо:)

Aziz Zaynutdinoff
11.05.2007, 22:50
хм... а почему?
если сначала сделать контейнер, потом отрисовать его и после повесить событие – то чем не ложиться вариант? :)

screamge
11.05.2007, 22:51
а как ты собиешься вешать события на 100 надписей? По координатам?:)

Aziz Zaynutdinoff
11.05.2007, 22:55
точно также, как вешал бы и и без отрисовки :) через цикл

screamge
11.05.2007, 23:01
да но если эти надписи прорисованны?

Aziz Zaynutdinoff
11.05.2007, 23:09
Если они просто ручками выложены – тогда я пасс :) я так давно не делаю и в этом я некомпитетен.