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

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

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

Регистрация: Apr 2007
Адрес: Мишень на карте России
Сообщений: 95
По умолчанию flash.text.engine

Сегодня взялся опробовать новый метод вывода текста в CS4.
Вот что из этого вышло. Думаю вполне неплохо так как ресайз не даёт тормозов даже с большим текстом. Но все-таки кто что может предложит оптимизировать.
А так есть пару вопросов.
Адобовцы заложили способ выделять такой текст?
И ешё если в текстовую линию помещаю графический элемент который больше её то весь текстовый блок пропадает! То есть это так и задумано и надо предварительно те что не влезут ужимать ?

Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.Timer;
	import flash.text.engine.*;
	import LoaderExample;
 
	public class GroupElementExample extends Sprite {
		var format:ElementFormat;
		var TF:MovieClip=new MovieClip  ;
		var smileName=[":-)","8-)",":-D"];
		var smileNameLink=["0.swf","1.swf","2.swf"];
		var mc_array:Array=new Array  ;
		var loadTimer:Timer=new Timer(500,1);
		var textBlock:TextBlock=new TextBlock  ;
 
		public function GroupElementExample():void {
			stage.scaleMode=StageScaleMode.NO_SCALE;
			stage.align=StageAlign.TOP_LEFT;
			stage.addEventListener(Event.RESIZE,resizeHandler);
			loadTimer=new Timer(100,1);
			loadTimer.addEventListener(TimerEvent.TIMER, resizeHandler);
 
			format=new ElementFormat  ;
			var fontDescription:FontDescription=new FontDescription("Arial");
			format.fontSize=16;
			format.fontDescription=fontDescription;
			getSubstring('"Мы любим тех, кто нас не любит.:-)'+
			'Не любим тех, кто любит нас.:-D'+
			'Легко доставшиеся губы,:-)'+
			'не радуют, а обжигают нас.:-)'+
			'Любя далёкое, томимся,:-)'+
			'в тоске проводим дни свои.8-)'+
			'Мы любим то, к чему стремимся,8-)'+
			'а как достигнем, нет любви.":-D',smileName);
			TF=new MovieClip  ;
			addChild(TF);
		}
 
		private function resizeHandler(event:Event):void {
			var now:Date = new Date();
			trace(now.getMilliseconds());
			var textElement:TextElement;
			var graphicElement:GraphicElement;
			var groupVector:Vector.<ContentElement>=new Vector.<ContentElement>  ;
			if (mc_array.length>0) {
				for (var i:Number=0; i<mc_array.length; i++) {
					textElement=new TextElement(mc_array[i].xt,format);
					graphicElement=new GraphicElement(mc_array[i].img,mc_array[i].img.width,mc_array[i].img.height,format);
					groupVector.push(graphicElement,textElement);
				}
			}
			var groupElement=new GroupElement(groupVector);
			textBlock.content=groupElement;
			createTextLines(textBlock);
			var now:Date = new Date();
			trace('end  '+now.getMilliseconds());
		}
 
		private function createTextLines(textBlock:TextBlock):void {
			while (TF.numChildren) {
				TF.removeChildAt(0);
			}
			var yPos=0;
			var line_length:Number=stage.stageWidth-10;
			var textLine:TextLine=textBlock.createTextLine(null,line_length);
			while (textLine) {
				TF.addChild(textLine);
				textLine.x=10;
				yPos+=textLine.height+2;
				textLine.y=yPos;
				textLine=textBlock.createTextLine(textLine,line_length);
			}
		}
 
		function reDrawSmile(event:Event):void {
			trace(event.target.name);
			loadTimer.start();
			if (event.target.height>30) {
				event.target.scaleX=0.4;
				event.target.scaleY=0.4;
			}
		}
 
		function getSubstring(txt:String,smile:Array):void {
			var ia:Array;
			var index:String;
			for (var i=0; i<smile.length; i++) {
				if (i<10) {
					index='0'+i;
				}
				txt=txt.split(smile[i]).join('[!img!]'+index+' ');
			}
			ia=txt.split('[!img!]');
			for (var j=0; j<ia.length; j++) {
				if (ia[j].length>0) {
					j==0?index='':index=ia[j].substr(0,2);
					var box=new LoaderExample  ;
					if (index!='') {
						super.addEventListener('load.Complate',this.reDrawSmile);
						box.load(smileNameLink[Number(index)]);
					}
					mc_array.push({img:box,xt:ia[j].substr(index.length)});
				}
			}
			loadTimer.start();
		}
	}
}
Изображения
 
__________________
Lepricon Flash ICQ


Последний раз редактировалось iNils; 03.08.2012 в 23:21. Причина: оптимизация кода
Создать новую тему   Часовой пояс GMT +4, время: 08:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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