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

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

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию textFormat - печатная машинка

Бьюсь вот пару дней с одной казалось бы простой задачей.
Есть задача сделать эффект *печатная машинка* для текста + с перебором символов для каждой буквы. Понятное дело, что эффект простейший, и делается минут 10.
Но есть загвоздка для html текста.

В метод запуска эффекта мы передаем текстовое поле и текст который будем печатать, текст у нас будет например такой
Код:
<font color="#FF0000">hello</font><font color="#FF00FF"> world</font>
.

Собственно как делается эффект понятно, строка режется на символы index,index+1 и добавляется в текстовое + уже набранное значение.
Если мы говорим так tf.htmlText = remain + newLetter , то символы от html просто режутся , тоесть
Код:
<fo
рассматриваться как текст не будет, но будут проходить в памяти, что будет тормозить эффект в местах перехода.

Единственный вариант который я вижу, нужно сделать как то так
Код AS3:
// до начала эффекта
tf.htmlText = str;
format = tf.getTextFormat();
// во время эффекта
tf.setTextFormat(format, index - 1 , index )
Проблема в том, что хтмл теги никак не убрать и формат действовать не будет.

Есть ли какие нибудь решения данного вопроса, без таких конструкций

Код AS3:
effect.open([ [word , color ] , [ word, color] ... ])
? Хочется привязаться к текст формату, думаю там есть развязка
__________________
Марк Tween

Старый 19.06.2012, 20:29
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 2  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Подобная тема
http://www.flasher.ru/forum/showthread.php?t=174291
А с перебором символов
Код AS3:
package  
{
	import flash.display.*;
	import flash.text.*;
	import flash.events.*;
	import flash.ui.*;
	import flash.utils.*;
 
 
public class Main extends Sprite 
{
	private var srcTF:TextField = new TextField();
	private var resTF:TextField = new TextField();
	private var timer:Timer = new Timer(100);
 
	private var abcd:String = 'qwertyuiopasdfghjklzxcvbnm';
 
	public function Main():void 
	{
		srcTF.multiline = true;
		srcTF.htmlText = "<b>bold</b> <i><font color='#FF0000' size='16'>red</font></i><br>next line<br><b>bold</b> <i><font color='#FF0000' size='16'>red</font></i><br>next line<br>";
		srcTF.autoSize = TextFieldAutoSize.LEFT;
 
		resTF.multiline = true;
		resTF.autoSize = TextFieldAutoSize.LEFT;
		resTF.y = 100;
		addChild(srcTF);
		addChild(resTF);
 
 
		timer.addEventListener(TimerEvent.TIMER, timer_timer);
		timer.start();
 
	}
 
	private function timer_timer(e:TimerEvent):void 
	{
 
		resTF.text = randomString(srcTF.text.substr(0, resTF.text.length + 1));
 
		for (var i:int = 0; i < resTF.text.length; i++) 
			resTF.setTextFormat(srcTF.getTextFormat(i, i + 1), i, i + 1);
 
		if (srcTF.length == resTF.length) {
			timer.stop();
			resTF.text = srcTF.text.substr(0, resTF.text.length + 1);
			for (var i:int = 0; i < resTF.text.length; i++) 
				resTF.setTextFormat(srcTF.getTextFormat(i, i + 1), i, i + 1);
		}
	}
 
	private function randomString(s:String):String {
		var i:int;
		var rs:String = '';
		for (i = 0; i < s.length; i++) {
			if (abcd.indexOf(s.charAt(i)) != -1) rs += abcd.charAt(int(Math.random() * abcd.length)) else rs += s.charAt(i);
		}
		return rs;
	}
 
}
 
}
__________________
Гоночка


Последний раз редактировалось Alex Lexcuk; 19.06.2012 в 20:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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