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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.01.2012, 01:51
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

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

Привет всем! Задача следующая :
рассматриваем стандартный декодер текста ( печатающая машинка ) без рандома, тоесть просто добавление по 1 букве через интервал в текстовое поле. Но вот проблема, как бороться с \n и html тегами , а именно font-color.
В голову пришла такая идея. Заменяем \n например на charAt(0), через split.join , после чего добавляя по одной букве и в проверке натыкаясь на символ (0) добавляем ( или заменяем ) newline. С цветом немного сложнее, но смысл тот же, нам совершенно не нужна закрывающая тега </font> , нам достаточно перехватить только открывающуюся и посчитать кол-во символов. Думаю как то так :

Код AS3:
str.split('someWord').join(charAt(1) + 'someWord');
 
//...
 
if( symbols[index] == charAt(1) ) tempStr = '<font color =...>';
//
showStr = tempStr + symbols[index];
if(symbols[index] == ' ') field.htmlText = showStr + '</font>';
Но мне кажется, что это супер велосипедный-велосипед, и наверняка есть лучше реализации!
Есть мнение, что можно покопать в сторону TLFTextfield, но никогда с ним не работал, и возможно он тут и не причем будет.

Жду ваших советов
__________________
Марк Tween

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

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Можно каждый символ скопировать в bitmapData
Код AS3:
package  
{
	import flash.display.*;import flash.events.*;import flash.geom.*;import flash.ui.*;import flash.text.*;
	/**
	 * ...
	 * @author Lexcuk
	 */
	public class DocHtmlWriter extends Sprite
	{
		private var txt:TextField;
		private var bmdArr:Vector.<Bitmap>;
		private var frCount:int;
		public function DocHtmlWriter() 
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			addChild(txt = new TextField());
			txt.border = txt.multiline = txt.wordWrap = true;
			txt.width = txt.height = 550;
 
			var colorArr:Vector.<uint> = Vector.<uint>([0xFF0000, 0xFF8000, 0x008080, 0x804000]);
			var s:String = 'How is it going? ';
			var str:String = '';
			var i:int;
			for (i = 0; i < 500; i++) {
				str += '<font color ="#'+colorArr[i%colorArr.length].toString(16)+'" size="'+(30-i%s.length)+'">'+s.charAt(i % s.length)+'</font>';
				if ((i+1) % s.length == 0 && Math.random()>0.7) str += '\n';
			}
 
			txt.htmlText = str;
 
			bmdArr = new Vector.<Bitmap>();
			for (i = 0; i < txt.length;i++){
				var r:Rectangle = txt.getCharBoundaries(i);
				if (r == null) continue;
				var bmd:BitmapData = new BitmapData( r.width, r.height,true,0x00000000);
				var bm:Bitmap;
				var m:Matrix = new Matrix();
				m.tx = -r.x;
				m.ty = -r.y;
				bmd.draw(txt,m,null,null,null);
				bmdArr.push(bm = new Bitmap(bmd));
				bm.x = r.x;
				bm.y = r.y;
			}
			txt.text = '';
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		private function enterFrameHandler(e:Event):void {
			addChild(bmdArr[frCount]);
			frCount++;
			if (frCount >= bmdArr.length) {
				while (numChildren > 0) removeChildAt(0);
				frCount = 0;
			}
		}
 
	}
 
}
http://www.murmadillo.tut.su/m/DocHtmlWriter.swf
__________________
Гоночка

Старый 22.01.2012, 04:06
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Оифгенное решение. спасибо!!!
__________________
Марк Tween

Старый 22.01.2012, 13:16
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> как бороться с \n и html тегами
можно и не бороться, а взять все getTextFormat-ом
в textField.text хранится обычный текст с соответствующим html-ной разметке форматом
Код AS3:
public class Main extends Sprite 
{
	private var srcTF:TextField = new TextField();
	private var resTF:TextField = new TextField();
	private var timer:Timer = new Timer(100);
 
 
	public function Main():void 
	{
		srcTF.multiline = true;
		srcTF.htmlText = "<b>bold</b> <i><font color='#FF0000' size='16'>red</font></i><br>next line";
		srcTF.autoSize = TextFieldAutoSize.LEFT;
 
		resTF.multiline = true;
		resTF.autoSize = TextFieldAutoSize.LEFT;
		resTF.y = 50;
		addChild(srcTF);
		addChild(resTF);
 
 
		timer.addEventListener(TimerEvent.TIMER, timer_timer);
		timer.start();
 
	}
 
	private function timer_timer(e:TimerEvent):void 
	{
 
		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);
 
		if (srcTF.text.length == resTF.text.length) 
			timer.stop();
 
	}
 
}

Старый 22.01.2012, 17:53
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Силин благодарю, тоже интересное решение
__________________
Марк Tween

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

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

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


 


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


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