PDA

Просмотр полной версии : Устранение "эффекта дрожания" текстовых полей


zelik
27.05.2009, 12:11
Всем доброго дня!

Делаю что-то, похожее не телетекст следующим образом:

var container:MovieClip = this.createEmptyMovieClip("text_mc", 1);
var container2:MovieClip = container.createEmptyMovieClip("maska_mc", 2);
container2.beginFill(0xFF0000);
container2.moveTo(0,0);
container2.lineTo(MoveWidht,0);
container2.lineTo(MoveWidht,MoveHeight);
container2.lineTo(0,MoveHeight);
container2.lineTo(0,0);
container2.endFill();
text_mc.setMask(container2);
//container0 - мувик для текстовых полей
container.createEmptyMovieClip("container0",0);
container.container0._x = 0;
container.container0._y = MoveHeight;

Потом в container.container0 помещаю нужное кол-во TextField (один ниже другого) и запускаю функцию go

function go(container:MovieClip) {
container.container0.dy = container.container0._y;

container.onEnterFrame = function() {

if (container.container0._y>-container.container0._height) {
container.container0._y -= 1;
} else {
container.container0._y = container.container0.dy;
go(container);
}
};
}

алгоритм работает хорошо. Но вот только, если раскрываю флеш на весь экран (а в проекте так и надо), то видно постоянное подергивание текста...

Что можете предложить?

Заранее спасибо!

джонатан
27.05.2009, 12:20
Анти альясинг ставить нужно for animation для текстовых полей

zelik
27.05.2009, 12:27
извините, а где это ставиться?

mooncar
27.05.2009, 12:32
Вот кусок из хелпа, если вы создаете TextField программно:
var my_text1:TextField = this.createTextField("my_text1", this.getNextHighestDepth(), 10, 10, 300, 30);
my_text1.text = "This text uses advanced anti-aliasing.";
my_text1.antiAliasType = "advanced";

var my_text2:TextField = this.createTextField("my_text2", this.getNextHighestDepth(), 10, 50, 300, 30);
my_text2.text = "This text uses normal anti-aliasing."
my_text2.antiAliasType = "normal";


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

zelik
27.05.2009, 12:33
так пробовал, все равно есть дрожание...

mooncar
27.05.2009, 12:36
Тут дело не в альасинге, а в том, что плеер не упевает отрисовывать шрифтом текст.
По опыту знаю, если текст использовать шрифтовой, так и будет. Если же превратить его в Shape, то все нормально, чистенько, без дрожаний.
Но это для статического поля и для авторской среды. А вот как быть для прграммируемого поля, не знаю.

PeSH
27.05.2009, 12:49
Я бы вам посоветовал делать из текста битмап. То есть прорисовывать клип с текстом в битмап, а само текстовое поле прятать или убивать. Таким образом у вас будет не текстовое поле, а битмап картинка, а у нее такого эффекта не наблюдается.
Для прорисовки используйте объект класса BitmapData и его метод draw. Почитайте справку, если еще не пользовались, там все понятно расписано.

Добавлено через 46 секунд
А для атача в клип метод attachBitmap класса MovieClip

zelik
27.05.2009, 15:35
PeSH, спасибо, сейчас буду разбираться

Добавлено через 54 минуты
И все таки не понимаю, запутался...
У меня есть динамическое кол-во текстовых полей. Мне нужно каждое из них помещать в свой битмат, а потом все битмапы в клип, который двигаю?
А вообще можно аттачить к клипу динамическое кол-во битмапов? Или для каждого битмапа создавать промежуточный клип?

dimarik
27.05.2009, 16:59
Двигайте текстовое поле по целым пикселям

zelik
27.05.2009, 17:02
Да я вроде бы так и делаю

function go(container:MovieClip) {
container.container0.dy = container.container0._y;

container.onEnterFrame = function() {

if (container.container0._y>-container.container0._height) {
container.container0._y -= 1;
} else {
container.container0._y = container.container0.dy;
go(container);
}
};
}

Добавлено через 2 часа 49 минут
поместил все TextField в BitmapData и вре равно есть дрожение.

Кто-нибудь может еще что-то посоветовать?