|
|
|||||
Регистрация: Jun 2014
Сообщений: 23
|
Текст за курсором на AS3
Всем приветик!
Прошу прощения,что пишу в это раздел.. Но у меня не вопрос,а скорее просьба... Мне очень нужно записать этот код на AS3.. Сама не могу справиться..Не хватает знаний.. Буду очень благодарна за помощь.. Text = "Осень золотая"; letters = Text.split(""); //Выше указывается текст который будет анимироваться. letterformat = new TextFormat(); letterformat.font = "Trebuchet MS"; letterformat.align = "left"; letterformat.size = "14"; letterformat.color = 0x9933000; letterformat.bold = true; // Здесь указываются такие параметры текста как размер, шрифт, центрирование, цвет и т.д. spacing = 10; speed = 4; // Указываем дистанцию между буквами и скорость анимации. var LTR = 0; while (LTR < letters.length) { mc = _root.createEmptyMovieClip(LTR + "l", LTR); mc.createTextField(letters[LTR] + "t", LTR, LTR * spacing, 20, 40, 40); with (mc[letters[LTR] + "t"]) { text = letters[LTR]; setTextFormat(letterformat); selectable = false; } // End of with if (LTR) { mc.prevClip = _root[LTR - 1 + "l"]; mc.onEnterFrame = function () { this._x = this._x + (this.prevClip._x - this._x + 5) / speed; this._y = this._y + (this.prevClip._y - this._y) / speed; }; } else { mc.onEnterFrame = function () { this._x = this._x + (_root._xmouse - this._x + 10) / speed; this._y = this._y + (_root._ymouse - this._y) / speed; }; } // end else if ++LTR; } // end while |
|
|||||
Регистрация: Jun 2014
Сообщений: 23
|
Цитата:
Будем подождать.. Мне на самом деле очень нужно.. |
|
|||||
Всё что пришло в данный момент в голову. Это класс, реализующий нужный вам эффект.
JelenaTextFlow.as package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.PixelSnapping; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; /** * ... * @author samana */ public class JelenaTextFlow extends Sprite { private var _letters:Vector.<Bitmap>; private var _offset:Vector.<Point>; public var speed:Number; // скорость от 0 до 1. 1-мгновенное перемещение public function spliteText(text:String, speed:Number = 0.3, dist:Number = 0):void { this.speed = speed; removeChildren(); _letters = new Vector.<Bitmap>(); _offset = new Vector.<Point>(); if (text) { var textFormat:TextFormat = new TextFormat(); if (dist > 0) textFormat.letterSpacing = dist; //ВСЕ НЕОБХОДИМЫЕ НАСТРОЙКИ ШРИФТА, НАПРИМЕР textFormat.size = 20; textFormat.color = 0xFF8000; textFormat.bold = true; var tf:TextField = new TextField(); tf.defaultTextFormat = textFormat; tf.autoSize = TextFieldAutoSize.LEFT; tf.text = text; var rect:Rectangle; for (var i:int = 0; i < tf.length; i++) { rect = tf.getCharBoundaries(i); if ((rect.isEmpty()) || (tf.text.charAt(i) == " ")) { continue } var m:Matrix = new Matrix(); m.tx = -rect.x; m.ty = -rect.y; var bmd:BitmapData = new BitmapData(rect.width, rect.height, true, 0x00000000); var bm:Bitmap = new Bitmap(bmd); bmd.draw(tf, m); bm.smoothing = true; bm.pixelSnapping = PixelSnapping.AUTO; // - - - - - - - - - - - - addChild(bm); _letters.push(bm); _offset.push(new Point(rect.x, rect.y)); } } } public function move(tx:Number, ty:Number):void { if (_letters) { _letters[0].x += ((tx + _offset[i].x - _letters[0].x)) * speed; _letters[0].y += ((ty + _offset[i].y - _letters[0].y)) * speed; for (var i:int = 1; i < _letters.length; i++) { _letters[i].x += (_letters[i - 1].x + (_offset[i].x - _offset[i - 1].x) - _letters[i].x) * speed; _letters[i].y += (_letters[i - 1].y + (_offset[i].y - _offset[i - 1].y) - _letters[i].y) * speed; } } } } } Main.as package { import flash.display.Sprite; import flash.events.Event; /** * ... * @author samana */ public class Main extends Sprite { private var textFlow:JelenaTextFlow; public function Main():void { //создаём экземпляр класса textFlow = new JelenaTextFlow(); //выполняем метод, который создаёт текст и всё остальное. //передаём в параметры - текст, скорость, расстояние между буквами (если нужно) textFlow.spliteText(" Мне на самом деле очень нужно. Спасибо,что откликнулись..)))", 0.5, 1); //добавляем на сцену addChild(textFlow); //подписываемся на ентерФрейм addEventListener(Event.ENTER_FRAME, enterFrame); } private function enterFrame(e:Event):void { //вызываем метод движения букв и передаём те координаты, за которыми нужно двигаться textFlow.move(mouseX, mouseY); } } } |
|
|||||
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
samana, очень круто!
|
|
|||||
Регистрация: Jun 2014
Сообщений: 23
|
samana,Огромное Вам спасибо!
Хочу уточнить..может вопрос вызовет у Вас улыбку..ну и пусть..) Я понимаю так,что должна создать документ.fla и поместить его папку с Main.as... ??? А первый код это Вы для примера показали.. ??? Уточните,пожалуйста..) |
|
|||||
Чтобы использовать класс JelenaTextFlow, вам надо скопировать весь его код и сохранить с расширением .as, то-есть рядом с вашим fla, должен находится файл JelenaTextFlow.as.
Main класс вам и не обязательно создавать (конечно зависит от структуры вашего проекта), можно и в кадре написать код: var textFlow:JelenaTextFlow = new JelenaTextFlow(); textFlow.spliteText("Ваш текст", 0.5); addChild(textFlow); addEventListener(Event.ENTER_FRAME, enterFrame); function enterFrame(e:Event):void { textFlow.move(mouseX, mouseY); } ps.не забудьте сохранять fla после каждого изменения чего либо в нём (добавили класс, дописали строчку кода и т.д) чтобы работало. |
|
|||||
Регистрация: Jun 2014
Сообщений: 23
|
Цитата:
А правильное взять на заметку..) Спасибо за оперативный ответ и помощь..) |
Часовой пояс GMT +4, время: 17:45. |
|
« Предыдущая тема | Следующая тема » |
|
|