Архив

Публикации с меткой ‘Графика’

Растрирование текста или “Per aspera — ad astra”

6 октября 2007 10 комментариев

Под впечатлением анонса нового Flash Player-а под кодовым именем "Astra" я вспомнил свою старую публикацию, в которой я демонстрировал эффект появления текста из звездочек. Но там это было реализовано под ActionScript 2. И вот решил я сделать что-то подобное под ActionScript 3.

Давайте смотреть что получилось.

Сначала создаем класс, реализующий эффект собирания текстовой строки из точек:

package
{
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.geom.Point;
	import flash.text.TextField;
	import flash.text.TextFormat;

	public class StarText extends Sprite
	{
		public function StarText(text:String)
		{ // передаем в виде параметра текстовую строку
			var textWidth:int
			var textHeight:int
			var tf:TextField = new TextField();
			var bmp:BitmapData;
			var tformat:TextFormat = new TextFormat("_sans", 12); // задаем формат текста
			tf.autoSize="left";	// текстовое поле будет автоматически расширяетmcz
			tf.text=text; // заполняем текстовое поле текстом
			tf.setTextFormat(tformat); // присваеваем формат текста

			bmp = new BitmapData(tf.width, tf.height, false); // создаем растр с размерами текста
			bmp.draw(tf); // растрируем текст
			textWidth = bmp.width; // ширина растровой картинки
			textHeight = bmp.height; // высота растровой картинки
			for (var x:int=0; x

Теперь собственно "Звездочка", которая летит-летит и прилетает куда нужно.

package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;

	public class Star extends Sprite {
		private var starCoord:Point;
		public function Star(coord:Point):void { // в параметрах передаем координаты
			starCoord=coord;		// в которые наша точка дожна прилететь
			var bmpStarSrc:BitmapData = new BitmapData(1,1,false,0x00ff00); // рисуем точку зеленую
			var bmpStar:Bitmap = new Bitmap (bmpStarSrc);
			bmpStar.x = Math.random()*300-Math.random()*150; // помещаем в случайные координаты
			bmpStar.y = Math.random()*300-Math.random()*150;
			bmpStar.addEventListener(Event.ENTER_FRAME, fly); // добавляем вызов периодической функции
			addChild(bmpStar); // возвращаем созданый объект
		}
		private function fly(e:Event):void { // эта функция будет двигать точку в нужные координаты
			var trgt = e.target;
			var tox:Number = (trgt.x - starCoord.x)/16; // вычисляем смещение
			var toy:Number = (trgt.y - starCoord.y)/16;
			if (Math.abs(tox)>0.5 || Math.abs(toy)>0.5) { // если смещение не очень маленькое
				trgt.x-=tox; // смещаем точку
				trgt.y-=toy;
			}
			else // иначе
			{
				trgt.removeEventListener(Event.ENTER_FRAME, fly); // убираем повторение

				trgt.x=starCoord.x; // выставляем точку в конечные координаты
				trgt.y=starCoord.y;

			}
		}
	}
}

теперь базовый класс:

package {
	import flash.display.Sprite;
	public class Main extends Sprite
	{
		public function Main()
		{
			var st:StarText = new StarText("БОЛЬШАЯ ИСТОРИЯ СОЗДАНИЯ МАЛЕНЬКОГО ПРИЛОЖЕНИЯ")
			st.x=100
			st.y=170
			addChild(st)
		}
	}
}

ну с ним, наверное, все понятно?... если нет, милости просим в комментарии 😉