Flash AS3, контролируется ли сглаживание текста кодом?

Контролируется ли сглаживание текста кодом или оно встроено? Я хочу взять файл swf, созданный кем-то другим, найти весь текст в файле swf и изменить все режимы сглаживания с анимации на удобочитаемость. А в as3 так работает? Я, честно говоря, еще не пробовал никакого сглаживания в коде.


person Ghost9    schedule 06.12.2010    source источник


Ответы (1)


вы можете установить antiAliasType текстового поля на «расширенный», что дает вам точный контроль над резкостью и толщиной. однако шрифты должны быть встроенными (в том числе: для текстового поля должно быть задано значение embedFonts, значение true, объекты TextFormat должны иметь свойства шрифта, точно равные fontName встроенного шрифта, а шрифты должны быть уже скомпилированы). так технически «возможно ли это?» - да. будет ли он работать так, как вы хотите? нет, если вы не планируете работать с swiff, который, как вы знаете, уже использует встроенные шрифты. тогда вам нужно будет получить все текстовые поля из загруженного swiff (вы можете использовать что-то вроде этого: http://upshots.org/?p=107, затем используйте array.filter для возврата только объектов TextField), затем примените свою логику.

РЕДАКТИРОВАТЬ: добавление образца кода

// assuming you're using the DisplayList class linked above
var request:URLRequest = new URLRequest("textfields.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler, false, 0, true);
loader.load(request);

function completeHandler(event:Event):void{

    var content:DisplayObjectContainer = event.target.loader.content as DisplayObjectContainer;
    addChild(content);

    var children:Array = new DisplayList(content);
    children = children.filter(function(item:Object, index:int, array:Array):Boolean {
        return item is TextField;
    });
    children.forEach(function(item:Object, index:int, array:Array):void {
        var textfield:TextField = item as TextField;
        textfield.antiAliasType = AntiAliasType.ADVANCED;
        textfield.sharpness = 100;
        textfield.thickness = 100;
    });
}

просто запустил быстрый тест - работает как описано.

person momo    schedule 06.12.2010
comment
это чертовски круто. Я считаю, что в то, что я планирую, шрифты всегда будут встраиваться. Я планирую взять файл swf, созданный InDesign, и изменить его. Я не уверен, какой код в них встроен, но планирую выяснить. - person Ghost9; 06.12.2010
comment
звучит отлично. вам нужен был образец кода, как применить сглаживание, или вы настроили? - person momo; 06.12.2010
comment
если вы хотите предоставить один, это было бы здорово! - person Ghost9; 06.12.2010
comment
хмммм ... Кажется, у меня ничего не получается. Ошибок не получаю, но текст тоже не меняет. Я попытался добавить некоторые операторы трассировки, чтобы увидеть, что может или не может работать, и пока все, что я могу определить, это то, что если я помещаю трассировку после того, как возвращаемый элемент равен TextField;, трассировка не отображается. Вы используете сценарий, которого я еще не знаю, поэтому я действительно не знаю, в чем проблема. Я добавил трассировку в функцию списка отображения, и она находит все элементы в swf и может определить статический текст. - person Ghost9; 07.12.2010
comment
Я провел трассировку детей прямо перед children.forEach, и она ничего не отслеживает .. - person Ghost9; 07.12.2010
comment
хммм ... похоже, проблема в том, что indesign экспортирует не текстовые поля, а объекты staticText. - person Ghost9; 07.12.2010
comment
Я не думаю, что можно преобразовать объект StaticText в TextField - я попытался захватить все его свойства и попытаться воссоздать его как обычное TextField, но, похоже, у него нет таких методов, как getTextFormat (которые нам понадобятся чтобы получить шрифт), так что это не похоже на жизнеспособность. Есть ли в inDesign параметр, позволяющий убедиться, что текстовые поля являются «динамическими» (стандартные объекты TextField) при экспорте? - person momo; 07.12.2010
comment
На данный момент нет. Я действительно пытаюсь связаться с Adobe по этому поводу. Не знаю, сделают ли они что-нибудь или дадут мне что-нибудь, но попробовать стоит. У меня были действительно хорошие планы относительно того, как интегрировать использование в дизайн. Я просмотрел все файлы справки, разместил их на различных форумах, изучил сценарии InDesign и напрямую связался с Adobe. Пока без радости, но, может быть, Adobe с чем-нибудь вернется ко мне. Я очень ценю вашу помощь. Даже если у меня не получится, я сохраню код, который вы мне дали, потому что он по-прежнему великолепен, и я вижу, что он пригодится. - person Ghost9; 07.12.2010
comment
К сожалению, единственное, что я смог установить, это с человеком из службы поддержки, который не смог помочь. Они только обучены существующим возможностям и не осведомлены о внутренней работе. Я собираюсь предпринять другие попытки связаться с Adobe, но лучшее, что мне удалось найти, - это их контактные формы, которые, скорее всего, бесплодны. :( ну, я думаю, я могу просто использовать текст с плохим сглаживанием, но я думаю, что это не лучший вариант. Возможно, я смогу найти способ получить текстовые поля в swf в программе indesign, в которую я загружаю текст динамически .. Есть идея. - person Ghost9; 10.12.2010
comment
Я могу изучить идею выделения из кода объектов staticText и замены их текстовыми полями, имеющими все те же значения. - person Ghost9; 10.12.2010