PDA

Просмотр полной версии : Как обеспечить максимальную плавность движения текста


v350
21.03.2006, 14:32
Друзья, хочется подвести итог в данном вопросе.
Задача - автоматический горизонтальный скроллинг текста (бегущая строка). Динамическое текстовое поле, внутри мувиклипа, в которое грузится достаточно большая текстовая строка. Шрифт - псевдопиксель, без алиясинга, embed, 8px. Мувиклип под маской примерно 100px в ширину.
Нужно добиться максимальной плавности движения текста - без рывков, тормозов и т.д.

В голову приходит 2 варианта:

1. вызов метода перемещения с помощью setInterval раз в 10 мс (насколько я понимаю минимально возможная величина), внутри метода изменять координату _x на 1 px. Обновлять экран с помощью updateAfterEvent(). Поскольку используем updateAfterEvent() FPS не важен.


При таком методе строка движется относительно равномерно, но как-то не слишком плавно... Возникают иногда как-бы небольшие рывки...
уменьшение смещения за один раз меньше 1px во первых вызывает смаз пиксельного текста, а во-вторых слишком медленно становится.


2. использовать mx.transitions.easing.None.easeNone - честно говоря, разницы на взгляд с первым вариантом не увидел.

Коллеги, прошу, поделитесь наработками! Как двигать текст максимально плавно?

KUZEN
21.03.2006, 16:34
Хочешь реальное пиксельное табло почитай Гурского у него есть примерчик, правда это намного сложнее чем твой пример )))

v350
21.03.2006, 18:08
у Гурского видел этот пример, но мне нужно именно шрифтом реализовать..

v350
21.03.2006, 20:22
Господа профи, уделите 3 минуты... :)

Пуннокио
31.05.2006, 09:43
Всем привет.

У меня тоже по данной теме есть вопрос.
Впринципе, я просто сдвигаю клип содержащий текст, путем залания координаты клипа по х или у взависимости от того куда смещать
При вертикальном смещении текств, все ок.
А горизонтальное не очень нравтся.
То есть вопросом того как зациклить и т.д. нет проблем, единственное
вид перемещаемого текста.
У меня используется HTML текст

Может кто подскажет какие варианты есть сделать реально плавное смещение? так чтобы глаз спокойнос смотрел?


спасибо

Пуннокио
31.05.2006, 15:56
Ну так? смотрю бегущая строка на флеше не почете...

поставим вопрос по другому, плавное горизотальное перемещение?

может в этом кто разбирается?

:)

iNils
31.05.2006, 17:09
Мне не понятно по каким критериям оцениваешь "нравится-не нравится"
Можешь показать свой вариант вертикального скролла который нравится и горизонтального который не нравится?

aksios
31.05.2006, 17:19
может в этом кто разбирается?
:)
Че за наезд?

MyXus
31.05.2006, 17:45
У меня вот параллельный вопрос. Я сделал строку, которая скролится под маской. Т.к. текст нормально не маскируется, пришлось перевести его в кривые, но эт не проблема в данном случае. Проблема в том, что при смещении этого объекта возникают немыслимые тормоза. Просто писец полный настает. А в строке всего 3-5к точек в ширину (в высоту - 15).

iNils
31.05.2006, 17:58
У меня вот параллельный вопрос. Я сделал строку, которая скролится под маской. Т.к. текст нормально не маскируется, пришлось перевести его в кривые, но эт не проблема в данном случае. Проблема в том, что при смещении этого объекта возникают немыслимые тормоза. Просто писец полный настает. А в строке всего 3-5к точек в ширину (в высоту - 15).
Используй программную маску.

etc
31.05.2006, 18:10
MyXus, двигай часть строки.

MyXus
31.05.2006, 18:30
2iNils, __etc: программная маска полностью сняла тормоза. Факт для меня совершенно непонятный.

Пуннокио
31.05.2006, 18:34
2 Aksyos - никаких наездов, что такой агрессивный сам.

это не бар, а форум, и эмоции не всегда удается передать, а некоторые и читают, пропуская через себя

2 MyXus - да, используй программную маску.
Честно говоря не понял даже, что ты там с шрифтами делал, но с помощью ПМ можно использовать даже HTML текст

iNils
31.05.2006, 18:38
_root._x = _root._y = 200;
////
str = "1234567890 abcdefghijklmnoABCDEFGHIJKLMN ";
//// создаем маску
this.createEmptyMovieClip ("mcMaska", 0);
this.mcMaska.beginFill (0, 10);
this.mcMaska.lineTo (100, 0);
this.mcMaska.lineTo (100, 20);
this.mcMaska.lineTo (0, 20);
this.mcMaska.lineTo (0, 0);
this.mcMaska.endFill ();
//// создаем бегущую строку
this.createEmptyMovieClip ("mcText", 1);
this.mcText.createTextField ("txt1", 0, 0, 0, 100, 20);
this.mcText.createTextField ("txt2", 1, 0, 0, 100, 20);
this.mcText.txt1.autoSize = this.mcText.txt2.autoSize = true;
this.mcText.txt1.text = this.mcText.txt2.text = str;
this.mcText.txt2._x = this.mcText.txt1._width;
this.mcText.setMask (this.mcMaska);
//// бежим
this.mcText.moveText = function () {
this._x -= 2;
if (this._x < -this.txt1._width) {
this._x += this.txt1._width;
}
updateAfterEvent ();
};
setInterval(this.mcText, "moveText", 5);

Пуннокио
31.05.2006, 18:42
а у тебя есть в рабочем варианте что-то горизонтальное, хочу сравнить с тем что у меня получается.

правда у меня код немного другой, проще гораздо,
используется смшещение клипа, а потом, при смещении на определенное число, смещение на начало клипа, то есть строка текста содержит еще дополнительный кусок равный окну прокрутки

scourge ' kangaroo
31.05.2006, 19:07
дополнительный кусок равный окну прокрутки?... выкини свой код на помойку...

miramax
31.05.2006, 21:31
Я сделал строку, которая скролится под маской.есть ещё и scrollRect, в хелпе поищи

MyXus
01.06.2006, 14:06
Хм. Забавно. Правда, код - не короче чем для самодельной маски :-)
надо бы потестить этот механизм на скорость.

Obrazcoff
18.12.2007, 00:40
_root._x = _root._y = 200;
////
str = "1234567890 abcdefghijklmnoABCDEFGHIJKLMN ";
//// создаем маску
this.createEmptyMovieClip ("mcMaska", 0);
this.mcMaska.beginFill (0, 10);
this.mcMaska.lineTo (100, 0);
this.mcMaska.lineTo (100, 20);
this.mcMaska.lineTo (0, 20);
this.mcMaska.lineTo (0, 0);
this.mcMaska.endFill ();
//// создаем бегущую строку
this.createEmptyMovieClip ("mcText", 1);
this.mcText.createTextField ("txt1", 0, 0, 0, 100, 20);
this.mcText.createTextField ("txt2", 1, 0, 0, 100, 20);
this.mcText.txt1.autoSize = this.mcText.txt2.autoSize = true;
this.mcText.txt1.text = this.mcText.txt2.text = str;
this.mcText.txt2._x = this.mcText.txt1._width;
this.mcText.setMask (this.mcMaska);
//// бежим
this.mcText.moveText = function () {
this._x -= 2;
if (this._x < -this.txt1._width) {
this._x += this.txt1._width;
}
updateAfterEvent ();
};
setInterval(this.mcText, "moveText", 5);

реально самое плавное скроллирование получилось с помощью этого кода. Сам пробовал попиксельно сдвигать. Но по-другому. Получилось хуже :victory:

aQuestion
18.12.2007, 11:46
плавнее всего будет когда this._x -= 0.050001; убедитесь с помощью контекстного меню->Zoom In

iNils
18.12.2007, 14:07
убедитесь с помощью контекстного меню->Zoom InZoom In ни о чем не говорит, так данные будут совсем другие.

BaranovYuriy
27.12.2007, 19:47
посмотри anptv.net (вернее, только на строку новостей). Если нравится - вышлю исходник.

ulik
23.01.2008, 19:39
v350, ваши варианты (1 и 2), описанные в первом посте идентичны. mx.transitions.easing.None.easeNone - люди писали. Откройте класс и загляните.

в тему: setInterval(0), изменяйте ккординату на +=.2 или .5 в конце, после отановки движения this._y = Math.round(this._y)