|
|
|||||
Регистрация: Jan 2011
Сообщений: 29
|
Проблема с классом бегущей строки
Приветствую.
В AS не особо силен но кое что умею. Есть задача, в баннер встроить бегущую строку которая берет текст из XML файла. Нашел идеально подходящий для моих целей класс бегущей строки Marquesina.as. Подключил, настроил. Но есть проблема. Задержка после окончания порядка 9-10 секунд. В классе есть таймеры но чтобы я не менял в них время от этого не уменьшается. Как уменьшить этот интервал до 1 секунды или даже 0. То есть текст ушел и все по новой? Пример в архиве. Заранее благодарю за ответ. |
|
|||||
Регистрация: Jan 2011
Сообщений: 29
|
Я знаю. Но проблема не в этом. После того, как текст прошел с права на лева, идет определенный промежуток времени, от 5 до 10 секунд и только после начинается повтор. Временной промежуток зависит от количества текста во второй строке fla файла
То есть, чем больше текста, тем больше временной промежуток. P.S Возможно этот метод реализации бегущей строки очень извращенный и есть более простое программное решение. Если есть, подскажите пожалуйста |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Присвоив текст созданному текстовому полю, узнаёте его ширину и отрезаете с конца символы равные ширине контейнера. Создаете второе текстовое поле и переносите туда вырезанный текст. Узнаете ещё раз ширину первого текстового поля. Начинаете на EnterFrame двигать первое текстовое поле и в проверяете не подошёл ли он к концу. Как только подошёл, запускаете второе текстовое поле и тоже проверяете когда он подойдет к концу. как только подошёл, запускаете первое текстовое поле. И получится, что строка будет повторятся всегда. Это не сложно даже для новичка и к тому же очень интересно. |
|
|||||
Этот класс не будет запускать анимацию строки заново, если она полностью вмещается в заданные вами пределы (третий параметр в конструкторе).
Чтобы избавиться от этого, нужно избавиться от условия if (_cajaTexto.width > _mascara.width) { //timers para animación del texto _timer1.addEventListener(TimerEvent.TIMER,onTimer1); _timer2.addEventListener(TimerEvent.TIMER,onTimer2); } |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Примерно вот так -
package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point var _ticket:Ticket = new Ticket('P.S Возможно этот метод очень извращенный и есть более простое программное решение. Если есть, подскажите пожалуйста'); addChild(_ticket); } } } package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; public class Ticket extends Sprite { private var _text:String; private var _textOne:TextField; private var _textTwo:TextField; private var _containerWidth:int; private var _nextText:int; private var _speedOne:int ; private var _speedTwo:int; private var _isEndOne:Boolean; private var _isEndTwo:Boolean; private var _end:int; public function Ticket(text:String) { _text = text; addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); } private function addedToStageHandler(event:Event):void { removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); _containerWidth = 150; _textOne = new TextField(); _textOne.autoSize = 'left'; _textOne.text = _text; addChild(_textOne) _speedOne = 2; _textTwo = new TextField(); _textTwo.autoSize = 'left'; _textTwo.text = _text; _textTwo.x = _containerWidth; addChild(_textTwo) _speedTwo = 0; _nextText = _containerWidth - _textOne.width; _end = -_textOne.width; } private function enterFrameHandler(event:Event):void { if (_textOne.x <= _nextText) { _isEndOne = true; _speedTwo = 2; } if (_textTwo.x <= _nextText) { _isEndTwo = true; _speedOne = 2; } if (_isEndOne) { if (_textOne.x <= _end) { _speedOne = 0; _textOne.x = _containerWidth; _isEndOne = false; } } if (_isEndTwo) { if (_textTwo.x <= _end) { _speedTwo = 0; _textTwo.x = _containerWidth; _isEndTwo = false; } } _textOne.x -= _speedOne; _textTwo.x -= _speedTwo; } } } Последний раз редактировалось Akopalipsis; 14.11.2013 в 15:51. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
samana Спасибо Огромное! Если бы не Вы, возможно я бы ТС свёл сума
У меня ошибка в Скопировал, а поменять на второе поле забыл, сейчас исправлю. Двигается, только у меня начало координат в ноль, а на форуме флеш растянулась. Но это уже ТС сделает как хочет. |
|
|||||
Регистрация: Jan 2011
Сообщений: 29
|
Всем большое спасибо за ответы
|
Часовой пояс GMT +4, время: 02:35. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|