PDA

Просмотр полной версии : плавная бегущая строка


unlex
08.05.2008, 20:29
Знаю, таких тем много, но ни в одной не нашел подходящее решение.
Необходима банальная, циклическая бегущая строка. То есть, как только строка уходит влево полностью, тут же начинает появляться справа.
Использую следующий код:
t_str = " Some text";
changeStr = function() {
t_str = t_str.substr(1) + t_str.substr(0,1);
d_txt1.text = t_str;
}
setInterval(changeStr,150);

Строка бежит, но рывками. Что необходимо сделать, чтобы она бежала с постоянной скоростью? Заранее спасибо...
Прилагаю ролик с тем, что у меня получилось.

Mnilionic
08.05.2008, 21:13
ширина символов в шрифте разная - отсюда и "рывки"

Vektor
08.05.2008, 21:58
t_str = " Some text";
this.mcText.setMask(mcMask);
var f:Number = -1;
var G:Number = mcText.mcText1._x+mcText.mcText1._width;
changeStr = function () {
mcText.mcText1.d_txt1 = t_str;
mcText.mcText2.d_txt1 = t_str;
//Клип .mcText2 ставить в конце .mcText1;
mcText.mcText1._x += f;
mcText.mcText2._x += f;
if (mcText.mcText1._x+mcText.mcText1._width<0) {
mcText.mcText1._x = G;
}
if (mcText.mcText2._x+mcText.mcText2._width<0) {
mcText.mcText2._x = G;
}
};
setInterval(changeStr,10);

Vektor
08.05.2008, 22:11
t_str.substr(1) + t_str.substr(0,1);

Сдвигает символы на ширену символа.

unlex
08.05.2008, 22:45
Спасибо! Ага, я тоже догадался о причине рывков и решил реализовать с помощью маски и интерполяции движения.
Пробовал Ваш способ, но не получилось, так как не совсем понял следующее: mcText1, mcText2 - это мувики из полей динамического текста? Что тогда mcText и что в чем размещать? ) Недавно только начал работать с Флэш, так что не все элементарные вещи еще сразу понимю...

Mnilionic
08.05.2008, 22:53
mcText - это маска, под которой ползают mcText1, mcText2 :)

unlex
08.05.2008, 23:17
mcText создается программно? создал mcText1 и mcText2 и поместил на главный слой туда же где код. не работает... знаю что накосячил, а вот где? )

Vektor
08.05.2008, 23:19
mcText.mcText1

mcText -это основной клип, mcText1 && mcText2- это вложеные клипы, а в них находяться техтовые поля.
В properties техтового поля есть поле Var: (d_txt1 //вставь имя)

mc - MovieClip (венгерская нотация)

Vektor
08.05.2008, 23:33
mcMask - это маска

unlex
08.05.2008, 23:33
Так мне нужно создать мувик mcText? Затем в него поместить 2 текстовых поля, задать им в vars d_txt1 и затем сделать из них мувики? Если так, то из чего делать муви mcText и где именно размещать код?

Vektor
08.05.2008, 23:42
Настоящие профи не когда не размещают код в Мувиках.

И им достаточно одного двух кадров основной времяной шкалы.

Первый кадр для инициализации, второй для всего остального.

unlex
08.05.2008, 23:52
В общем, решил вопрос по-своему: маской и интерполяцией движения. Но хотелось бы разобраться и в предложенном варианте, за который конечно спасибо. (хотя я толком и не понял, что надо делать)

Vektor
09.05.2008, 01:30
this.createEmptyMovieClip("mcMask",this.getNextHighestDepth());
mcMask._x = 200;
mcMask._y = 200;
mcMask.lineStyle(0,0xFF0000,100);
mcMask.beginFill(0xFFFF00,100);
mcMask.lineTo(100,0);
mcMask.lineTo(100,22);
mcMask.lineTo(0,22);
mcMask.lineTo(0,0);
mcMask.endFill();
this.createEmptyMovieClip("mcText",this.getNextHighestDepth());
this.mcText._x = 200;
this.mcText._y = 200;
mcText.createEmptyMovieClip("mcText1",this.mcText.getNextHighestDepth());
mcText.createEmptyMovieClip("mcText2",this.mcText.getNextHighestDepth());
mcText.mcText2._x = 100;
mcText.mcText2._y = 0;
mcText.mcText1.createTextField("d_txt1",this.mcText.mcText1.getNextHighestDepth(),0,0,100,22);
mcText.mcText2.createTextField("d_txt1",this.mcText.mcText2.getNextHighestDepth(),0,0,100,22);
mcText.mcText1.d_txt1.autoSize = left;
mcText.mcText2.d_txt1.autoSize = left;

var my_fmt:TextFormat = new TextFormat();
my_fmt.bold = true;
mcText.mcText1.d_txt1.text = " Some text";
mcText.mcText1.d_txt1.setTextFormat(my_fmt);

var my_fmtr:TextFormat = new TextFormat();
my_fmtr.bold = true;
mcText.mcText2.d_txt1.text = " Some text";
mcText.mcText2.d_txt1.setTextFormat(my_fmtr);

this.mcText.setMask(mcMask);
var f:Number = -1;
var G:Number = mcText.mcText1._x+mcText.mcText1._width;
changeStr = function () {
updateAfterEvent();
mcText.mcText1._x += f;
mcText.mcText2._x += f;
if (mcText.mcText1._x+mcText.mcText1._width<0) {
mcText.mcText1._x = G;
}
if (mcText.mcText2._x+mcText.mcText2._width<0) {
mcText.mcText2._x = G;
}
};
setInterval(changeStr,10);