2010-08-13 6 views
3

Je suis en train d'obtenir l'exemple suivant pour travailler dans Flash Builder 4:polices d'exécution dans Flash Builder 4

http://developer.yahoo.com/flash/articles/runtime-fonts-as3.html

Le projet Actionscript compile mais tout ce que je reçois à l'écran est un petit carré pivotée sans texte dedans.

Est-ce que quelqu'un sait pourquoi cela pourrait se produire? Mon code est identique à l'exemple ci-dessus - j'ai compilé la première classe dans _Arial.swf.

Un grand merci,

EDIT:

Ive a également essayé cette ...

package { 
    import flash.display.Sprite; 
    import flash.display.Loader; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.text.*; 

    public class _Arial extends Sprite { 
     [Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', fontFamily='myFont', mimeType='application/x-font')] 
     public static var _Arial:Class; 

     public function _Arial():void { 
      drawText(); 
     } 

     public function drawText():void { 
      var tf:TextField = new TextField(); 
      tf.defaultTextFormat = new TextFormat("_Arial",60,0); 
      tf.embedFonts = true; 
      tf.antiAliasType = AntiAliasType.ADVANCED; 
      tf.autoSize = TextFieldAutoSize.LEFT; 
      tf.border = true; 
      tf.text = "Scott was here\nScott was here too\nblah scott...:;*&^% "; 
      tf.rotation = 15; 
      addChild(tf); 
      trace(Font.enumerateFonts()); 
     } 
    } 
} 


var fontList:Array = Font.enumerateFonts(false); 
for (var i:uint=0; i<fontList.length; i++) { 
    trace("font: "+fontList[i].fontName); 
} 

Les écrans traces: police: _Arial

Répondre

4

Ok, je l'ai à travailler ... J'ai commencé avec ce

public class _Arial extends Sprite 
{ 

    [Embed(source='fonts/Arial.ttf', fontName='_Arial', 
    mimeType="application/x-font-truetype", 
     unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E', 
    embedAsCFF= "false")] 
    public static var _Arial:Class; 

}

et pour le tester, j'ai ajouté que

public function _Arial():void 
    { 
    var tf:TextField = new TextField(); 
    tf.defaultTextFormat = new TextFormat ("_Arial" , 24 , 0); 
    tf.autoSize = TextFieldAutoSize.LEFT;   
      tf.embedFonts = true; 
    tf.text = "This is some text to test!"; 
    tf.rotation = 20; 
    addChild(tf); 

    } 

Le texte s'est affiché, donc je me suis débarrassé du constructeur et j'ai essayé à nouveau l'exemple de code, et cela a fonctionné !!!

+0

Merci beaucoup pour votre aide! Cela me rendait mental et ça fonctionnait maintenant. Je vous salue ;-) – codecowboy

+0

Heureux que ça marche maintenant! Ça m'avait un peu confus aussi;) – PatrickS

+0

Wow ... alors d'après ce que je peux comprendre, embedAsCFF est vrai par défaut? Adobe fait à nouveau flasher le lit ... * soupir * Merci beaucoup pour cette information! J'avais les minuscules carrés aussi bien. – bigp

1

Bien que votre SWF de police compile, vous avez encore pourrait vérifier que la police est correctement intégrée en ajoutant simplement un champ de texte dans cette classe, en utilisant cette police, en vous assurant que embedFonts est défini sur true, faites pivoter le Textfield si vous voulez sh et assurez-vous que le texte s'affiche. Si cela ne fonctionne pas à ce niveau, pas besoin d'aller plus loin ...

Après cette étape, le code est assez simple et je ne vois pas où il pourrait aller mal

EDIT

Comme mentionné dans mon commentaire, je n'ai pas pu reproduire l'exemple de code, j'ai le même résultat que vous.

La seule façon de le faire fonctionner était d'incorporer la police directement, ce que je fais souvent.

[Embed(source='fonts/Arial.ttf', fontName='_Arial', 
    mimeType="application/x-font-truetype", 
    unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B- U+0060,U+0061-U+007A,U+007B-U+007E', 
    embedAsCFF= "false")] 
    public class Main extends Sprite 
    { 
     public function Main():void 
     { 
      drawText(); 
     } 
    } 

Je vais essayer éventuellement de reproduire l'exemple de code et vérifierai bientôt de retour avec une réponse ...

+0

essayé et obtenu le même résultat. Une idée de ce qui se passe? – codecowboy

+0

Si le texte n'apparaît pas dans le premier fichier SWF, vous avez réduit le problème à un problème de chargement de police. quel est votre environnement de codage, quel IDE utilisez-vous? – PatrickS

+0

Son Flash Builder 4 sur mac (10.6) ou PC (WinXP). Même problème non plus. Je n'ai fait aucun AS depuis un moment, donc peut-être faire quelque chose de stupide. Je crée un nouveau projet ActionScript dans FB4 et le compile avec le SDK Flex. – codecowboy

0

Pour votre déclaration embed dans votre code ci-dessus, je me demande si le compilateur essaie de chercher la police relative à votre chemin d'accès source, plutôt qu'à la racine de votre système de fichiers. Je voudrais essayer de copier le fichier de police dans un dossier d'actifs dans le dossier src de votre projet. Ensuite, reportez-vous à l'instruction embed dans "/assets/ARIAL.TTF". J'espère que cela pourra aider.

+0

Merci pour la réponse. Il était de trouver la police ok – codecowboy

1

Vous avez des problèmes de dénomination. La classe s'appelle _Arial, mais vous donnez la police que vous incorporez le même nom de classe. Cela cause des problèmes pour commencer.

En second lieu, d'utiliser les polices incorporées, il vous suffit de les utiliser comme ceci:

// embed the font 
[Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', mimeType='application/x-font')] 
public static var ArialFont:Class; 


// use the font 
var someTextFormat:TextFormat = new TextFormat('_Arial', 12); 
+0

Merci - pouvez-vous expliquer pourquoi il est nécessaire d'inclure 'public static var ArialFont: class'? Où devrais-je référencer 'ArialFont'? L'exemple de PatrickS fonctionne avec la classe var 'public static var _Arial: Class; ' – codecowboy

+0

Eh bien, vous pouvez également le rendre privé. Le point est que la metatag 'Embed' (ainsi que toute autre metatag) fait référence à un objet qui doit être listé directement après le tag. Avec tous les autres types incorporés, il est logique de l'avoir (par exemple lorsque vous incorporez une image), ce qui n'est pas le cas pour les polices, car la police est automatiquement disponible en utilisant son nomFonteName ou FontFamily. – poke

Questions connexes