Wird die Text-Kantenglättung vom Code gesteuert oder ist sie eingebettet? Was ich tun möchte, ist eine swf-Datei zu nehmen, die jemand anders erstellt hat, und all den Text in der swf-Datei zu finden und alle Kantenglättungs-Modi von Animation auf Lesbarkeit zu ändern. Funktioniert das in as3 so? Ich habe ehrlich gesagt noch keine Kantenglättung im Code ausprobiert.
Antwort
Zu viele Anzeigen?Sie können die antiAliasType eines Textfelds auf 'advanced' setzen, was Ihnen feine Kontrolle über Schärfe und Dicke gibt. Allerdings müssen die Schriftarten eingebettet sein (einschließlich: das Textfeld muss embedFonts auf true gesetzt haben, die TextFormat-Objekte müssen Schrifteigenschaften genau gleich dem Schriftname der eingebetteten Schrift haben und die Schriftarten müssen bereits kompiliert sein). Also technisch gesehen, 'ist es möglich?' - ja. Wird es wahrscheinlich so funktionieren, wie Sie es möchten? Nein, es sei denn, Sie planen mit einem SWF zu arbeiten, von dem Sie wissen, dass es bereits eingebettete Schriftarten verwendet. Dann müssen Sie alle Textfelder aus dem geladenen SWF abrufen (Sie könnten etwas Ähnliches wie dies verwenden: http://upshots.org/?p=107, dann mit array.filter nur TextField-Objekte zurückgeben), und dann Ihre Logik anwenden.
BEARBEITEN: Hinzufügen eines Codebeispiels
// Nehmen an, Sie verwenden die oben verlinkte DisplayList-Klasse
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;
});
}
Habe gerade einen Schnelltest durchgeführt - funktioniert wie beschrieben.