|
|
|||||
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
Отрисовка TextField в вектор.
Всем привет!
У меня нарисовалась следующая задача: Есть редактор, на котором нужно разместить надписи. Они могут скейлиться, их можно таскать мышью (drag and drop). Однако, когда текстовых полей становится много - очень сложно ткнуть мышью на нужное текстовое поле. Дело в том, что TextField создаёт квадратное пространство вокруг себя. Визуально, нужный текст находится на виду, но клик в его область получается по другому текстовому полю, с большой квадратной прозрачной областью (textField.border = true наглядно показывает, что рамка от бОльшего текстового поля закрывает всю рамку меньшего текстового поля, которое находится в дисплейлисте ниже). Хотелось бы узнать, есть ли способ как-нибудь отрисовать текстовое поле в графику, причем так, чтобы сохранить вектор(отрисовка в Bitmap не подходит - иначе все пикселит). В Flash CS, например, текстовое поле можно задаунгрейдить комбинацией ctrl+break до состояния Shape (сначала он разбивает слово из текстового поля побуквенно в набор текстовых полей, затем - все они превращаются в шейпы). И это все скейлится как вектор, без пикселизации. Сколько ни ищу - не могу найти способа повторить такое же программно кодом. Заранее благодарю. |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Напишите свой класс и печатайте шейпами и мувиклипами. Боюсь стандартный текстфилд Вам не поможет.
|
|
|||||
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
Вопрос, собственно, как?! =)
Тут стоит добавить, что количество шрифтов постоянно растёт. И забивать все глифы в мувиклипы руками - совершенно не вариант. |
|
|||||
как вариант можно упаковать текстфилд в спрайт, которому назначать scrollRect строго по видимому тексту
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite { public function Main():void { var test:MyTextBox = new MyTextBox(); test.text = "text"; addChild(test); test.addEventListener(MouseEvent.CLICK, test_click); } private function test_click(e:MouseEvent):void { trace("Main.test_click > e : " + e); } } } import flash.display.BitmapData; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; class MyTextBox extends Sprite { private var tf:TextField; public function MyTextBox() { tf = new TextField(); tf.selectable = false; tf.autoSize = TextFieldAutoSize.LEFT; var fmt:TextFormat = new TextFormat(null, 48); tf.defaultTextFormat = fmt; addChild(tf); } public function get text():String { return tf.text; } public function set text(value:String):void { tf.text = value; var bmd:BitmapData = new BitmapData(width, height, true, 0x0); bmd.draw(this); scrollRect = bmd.getColorBoundsRect(0xFF000000, 0x0, false); bmd.dispose(); } } |
|
|||||
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
Кланяюсь в ноги! Хоть и не совсем то, что хотелось бы, но разница с исходным вариантом колоссальна! Премного благодарен!
|
|
|||||
Регистрация: Jun 2013
Сообщений: 16
|
Цитата:
1) найди библиотеку as3potrace.swc 2) import com.powerflasher.as3potrace.backend.GraphicsDataBackend; import com.powerflasher.as3potrace.POTrace; ... ... ... private static function _ItraceImage(curves:Sprite, bitmapData:BitmapData, color:uint):void { var gd:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); var strokeFill:GraphicsSolidFill = new GraphicsSolidFill(color, 1); gd.push(new GraphicsStroke(1, false, LineScaleMode.NONE, CapsStyle.ROUND, JointStyle.ROUND, 3, strokeFill)); gd.push(new GraphicsSolidFill(color, 1)); var potrace:POTrace = new POTrace(); potrace.backend = new GraphicsDataBackend(gd); potrace.potrace_trace(bitmapData); gd.push(new GraphicsEndFill()); curves.graphics.drawGraphicsData(gd); } public static function DrowTextOnSprite(asprite:Sprite, atext:TextField):void { var d:BitmapData = new BitmapData(atext.width, atext.height, true,0xFFFFFFFF); d.draw(atext); _ItraceImage(asprite, d, 0); } Ну происходит следующее Векторный текст преобразуется в растр =>> растровая картинка преобразуется в векторную, но уже не как таковой текст, а как кривые... В общем, если кто знает и подскажет другой способ выгнать текст в кривые без вектора, то буду рад узнать о нем! |
Часовой пояс GMT +4, время: 02:22. |
|
« Предыдущая тема | Следующая тема » |
|
|