Просмотр полной версии : Как обеспечить максимальную плавность движения текста
Друзья, хочется подвести итог в данном вопросе.
Задача - автоматический горизонтальный скроллинг текста (бегущая строка). Динамическое текстовое поле, внутри мувиклипа, в которое грузится достаточно большая текстовая строка. Шрифт - псевдопиксель, без алиясинга, embed, 8px. Мувиклип под маской примерно 100px в ширину.
Нужно добиться максимальной плавности движения текста - без рывков, тормозов и т.д.
В голову приходит 2 варианта:
1. вызов метода перемещения с помощью setInterval раз в 10 мс (насколько я понимаю минимально возможная величина), внутри метода изменять координату _x на 1 px. Обновлять экран с помощью updateAfterEvent(). Поскольку используем updateAfterEvent() FPS не важен.
При таком методе строка движется относительно равномерно, но как-то не слишком плавно... Возникают иногда как-бы небольшие рывки...
уменьшение смещения за один раз меньше 1px во первых вызывает смаз пиксельного текста, а во-вторых слишком медленно становится.
2. использовать mx.transitions.easing.None.easeNone - честно говоря, разницы на взгляд с первым вариантом не увидел.
Коллеги, прошу, поделитесь наработками! Как двигать текст максимально плавно?
Хочешь реальное пиксельное табло почитай Гурского у него есть примерчик, правда это намного сложнее чем твой пример )))
у Гурского видел этот пример, но мне нужно именно шрифтом реализовать..
Господа профи, уделите 3 минуты... :)
Пуннокио
31.05.2006, 09:43
Всем привет.
У меня тоже по данной теме есть вопрос.
Впринципе, я просто сдвигаю клип содержащий текст, путем залания координаты клипа по х или у взависимости от того куда смещать
При вертикальном смещении текств, все ок.
А горизонтальное не очень нравтся.
То есть вопросом того как зациклить и т.д. нет проблем, единственное
вид перемещаемого текста.
У меня используется HTML текст
Может кто подскажет какие варианты есть сделать реально плавное смещение? так чтобы глаз спокойнос смотрел?
спасибо
Пуннокио
31.05.2006, 15:56
Ну так? смотрю бегущая строка на флеше не почете...
поставим вопрос по другому, плавное горизотальное перемещение?
может в этом кто разбирается?
:)
Мне не понятно по каким критериям оцениваешь "нравится-не нравится"
Можешь показать свой вариант вертикального скролла который нравится и горизонтального который не нравится?
может в этом кто разбирается?
:)
Че за наезд?
У меня вот параллельный вопрос. Я сделал строку, которая скролится под маской. Т.к. текст нормально не маскируется, пришлось перевести его в кривые, но эт не проблема в данном случае. Проблема в том, что при смещении этого объекта возникают немыслимые тормоза. Просто писец полный настает. А в строке всего 3-5к точек в ширину (в высоту - 15).
У меня вот параллельный вопрос. Я сделал строку, которая скролится под маской. Т.к. текст нормально не маскируется, пришлось перевести его в кривые, но эт не проблема в данном случае. Проблема в том, что при смещении этого объекта возникают немыслимые тормоза. Просто писец полный настает. А в строке всего 3-5к точек в ширину (в высоту - 15).
Используй программную маску.
MyXus, двигай часть строки.
2iNils, __etc: программная маска полностью сняла тормоза. Факт для меня совершенно непонятный.
Пуннокио
31.05.2006, 18:34
2 Aksyos - никаких наездов, что такой агрессивный сам.
это не бар, а форум, и эмоции не всегда удается передать, а некоторые и читают, пропуская через себя
2 MyXus - да, используй программную маску.
Честно говоря не понял даже, что ты там с шрифтами делал, но с помощью ПМ можно использовать даже HTML текст
_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
дополнительный кусок равный окну прокрутки?... выкини свой код на помойку...
Я сделал строку, которая скролится под маской.есть ещё и scrollRect, в хелпе поищи
Хм. Забавно. Правда, код - не короче чем для самодельной маски :-)
надо бы потестить этот механизм на скорость.
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
убедитесь с помощью контекстного меню->Zoom InZoom In ни о чем не говорит, так данные будут совсем другие.
BaranovYuriy
27.12.2007, 19:47
посмотри anptv.net (вернее, только на строку новостей). Если нравится - вышлю исходник.
v350, ваши варианты (1 и 2), описанные в первом посте идентичны. mx.transitions.easing.None.easeNone - люди писали. Откройте класс и загляните.
в тему: setInterval(0), изменяйте ккординату на +=.2 или .5 в конце, после отановки движения this._y = Math.round(this._y)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.