2010-12-06 48 views
2

L'anti-alias de texte est-il contrôlé par le code ou est-il intégré? Ce que je veux faire est de prendre un fichier swf que quelqu'un d'autre a fait, trouver tout le texte dans le fichier swf et changer tous les modes anti-aliasing de l'animation à la lisibilité. Cela fonctionne-t-il de cette façon dans as3? Honnêtement, je n'ai pas encore essayé d'anti-aliasing dans le code.Flash AS3, l'anti-crénelage de texte est-il contrôlé par le code?

Répondre

8

Vous pouvez définir le paramètre antiAliasType d'un champ de texte sur 'avancé', ce qui vous permet de contrôler précisément la netteté et l'épaisseur. cependant, les polices doivent être incorporées (inclus: le champ de texte doit avoir embedFonts défini sur true, les objets TextFormat doivent avoir des propriétés de police exactement égales au fontName de la police incorporée, et les polices doivent déjà être compilées). donc techniquement «est-ce possible? - Oui. Est-il susceptible de fonctionner comme vous le souhaitez? non, sauf si vous envisagez de travailler avec un swiff dont vous savez qu'il utilise déjà des polices intégrées. alors vous devrez saisir tous les champs de texte de l'image chargée (vous pouvez utiliser quelque chose comme ceci: http://upshots.org/?p=107, puis utilisez array.filter pour retrouver uniquement les objets TextField), puis appliquez votre logique.

EDIT: ajout d'exemple de code

// 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; 
    }); 
} 

juste couru un test rapide - fonctionne comme décrit.

+0

c'est génial. Pour ce que je prévois les polices seront toujours intégrées je crois. Ce que je prévois est de prendre un swf qui a été généré par InDesign et de le modifier. Je ne suis pas sûr du type de code qu'il contient, mais j'ai l'intention de le découvrir. – Ghost9

+0

sonne bien. avez-vous besoin d'un exemple de code pour appliquer l'antialiasing, ou êtes-vous configuré? – momo

+0

si vous souhaitez en offrir un qui serait génial! – Ghost9