Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   плавная бегущая строка (http://www.flasher.ru/forum/showthread.php?t=111815)

unlex 08.05.2008 20:29

плавная бегущая строка
 
Вложений: 1
Знаю, таких тем много, но ни в одной не нашел подходящее решение.
Необходима банальная, циклическая бегущая строка. То есть, как только строка уходит влево полностью, тут же начинает появляться справа.
Использую следующий код:
Код:

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);



Часовой пояс GMT +4, время: 22:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.