Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.11.2013, 12:40
General303 вне форума Посмотреть профиль Отправить личное сообщение для General303 Найти все сообщения от General303
  № 1  
Ответить с цитированием
General303
 
Аватар для General303

Регистрация: Jan 2011
Сообщений: 29
По умолчанию Проблема с классом бегущей строки

Приветствую.
В AS не особо силен но кое что умею. Есть задача, в баннер встроить бегущую строку которая берет текст из XML файла. Нашел идеально подходящий для моих целей класс бегущей строки Marquesina.as. Подключил, настроил. Но есть проблема. Задержка после окончания порядка 9-10 секунд. В классе есть таймеры но чтобы я не менял в них время от этого не уменьшается.
Как уменьшить этот интервал до 1 секунды или даже 0. То есть текст ушел и все по новой?
Пример в архиве. Заранее благодарю за ответ.
Вложения
Тип файла: zip marquesina.zip (9.5 Кб, 44 просмотров)

Старый 14.11.2013, 14:41
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Строка 69
Код AS3:
_timer1 = new Timer(5000);
// 5000 это 5 секунд

Старый 14.11.2013, 14:53
General303 вне форума Посмотреть профиль Отправить личное сообщение для General303 Найти все сообщения от General303
  № 3  
Ответить с цитированием
General303
 
Аватар для General303

Регистрация: Jan 2011
Сообщений: 29
Цитата:
Сообщение от samana Посмотреть сообщение
Строка 69
Код AS3:
_timer1 = new Timer(5000);
// 5000 это 5 секунд
Я знаю. Но проблема не в этом. После того, как текст прошел с права на лева, идет определенный промежуток времени, от 5 до 10 секунд и только после начинается повтор. Временной промежуток зависит от количества текста во второй строке fla файла
Код AS3:
var m:Marquesina = new Marquesina("Text",13,420,30,0x000000);
То есть, чем больше текста, тем больше временной промежуток.
P.S Возможно этот метод реализации бегущей строки очень извращенный и есть более простое программное решение. Если есть, подскажите пожалуйста

Старый 14.11.2013, 15:01
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
P.S Возможно этот метод очень извращенный и есть более простое программное решение.
Создаёте обычное текстовое поле, узнаёте ширину контейнера в котором он будет отображаться.
Присвоив текст созданному текстовому полю, узнаёте его ширину и отрезаете с конца символы равные ширине контейнера. Создаете второе текстовое поле и переносите туда вырезанный текст.
Узнаете ещё раз ширину первого текстового поля. Начинаете на EnterFrame двигать первое текстовое поле и в проверяете не подошёл ли он к концу. Как только подошёл, запускаете второе текстовое поле и тоже проверяете когда он подойдет к концу. как только подошёл, запускаете первое текстовое поле.
И получится, что строка будет повторятся всегда. Это не сложно даже для новичка и к тому же очень интересно.

Старый 14.11.2013, 15:32
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 5  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Этот класс не будет запускать анимацию строки заново, если она полностью вмещается в заданные вами пределы (третий параметр в конструкторе).
Чтобы избавиться от этого, нужно избавиться от условия
Код AS3:
if (_cajaTexto.width > _mascara.width)
{
	 //timers para animación del texto
	_timer1.addEventListener(TimerEvent.TIMER,onTimer1);
	_timer2.addEventListener(TimerEvent.TIMER,onTimer2);
}
И сделать просто так
Код AS3:
_timer1.addEventListener(TimerEvent.TIMER,onTimer1);
_timer2.addEventListener(TimerEvent.TIMER,onTimer2);

Старый 14.11.2013, 15:34
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Примерно вот так -
Код AS3:
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);
		}
 
	}
 
}
Код AS3:
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.
Старый 14.11.2013, 15:41
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 7  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Akopalipsis, что-то при запуске вашего класса, моя заданная строка отобразилась 2 раза рядом, а потом ещё и третья в конце. Только после этого, цикл начал воспроизводиться нормально.

Старый 14.11.2013, 15:50
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
samana Спасибо Огромное! Если бы не Вы, возможно я бы ТС свёл сума
У меня ошибка в
Код AS3:
if (_textOne.x <= _end)
Скопировал, а поменять на второе поле забыл, сейчас исправлю.

Двигается, только у меня начало координат в ноль, а на форуме флеш растянулась.
Но это уже ТС сделает как хочет.
row.swf   (1.8 Кб)
Вложения
Тип файла: swf row.swf (1.8 Кб, 139 просмотров)

Старый 14.11.2013, 16:01
General303 вне форума Посмотреть профиль Отправить личное сообщение для General303 Найти все сообщения от General303
  № 9  
Ответить с цитированием
General303
 
Аватар для General303

Регистрация: Jan 2011
Сообщений: 29
Всем большое спасибо за ответы

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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