2011-12-28 75 views
0

下面是填充菜单的代码。除了一个关键部分,一切似乎都很好,没有错误。我megaPages阵列具有的值["HOME","BABIES","BRIDALS","MISC","WEDDINGS","ABOUT"],但(这是由megaPages生产),其显示在屏幕上的实际文本是这样的:如何防止AS3中的此任意文本截断

strange menu problems

正如你可以看到,一些文字是任意被截断。我已经追踪了文本字符串,因为它们在菜单构建的各个阶段通过各种函数来传递,并且它们总是正确的,但不知何故,当每个DisplayObject在屏幕上显示时,字母都会被忽略(注意尽管“HOME” abd'ABOUT'很好)。我甚至不知道从哪里开始解决这个问题。

function buildMenu() { 
     var itemMCs = new Array(); 

     for (var i = 0; i < megaPages.length; i++) { 
      megaPages[i] = megaPages[i].toUpperCase(); 
      trace(megaPages[i]); // at each iteration, traces as follows "HOME","BABIES","BRIDALS","MISC","WEDDINGS","ABOUT" 
      var textMC = createText(megaPages[i]); 

      var itemMC = new MovieClip(); 
      if (i!=0) { 
       var newLink = new PlateLink(); 
       newLink.y = 0; 
       itemMC.addChild(newLink); 
      } 


      var newPlate = new Plate(); 
      if (i==0) { 
       newPlate.y = 0; 
      } else { 
       newPlate.y = newLink.height - 2; 
      } 
      newPlate.x = 0; 
      newPlate.width = textMC.width + (plateMargin*2); 
      itemMC.addChild(newPlate); 

      if (i!=0) { 
       newLink.x = (newPlate.width/2) - (newLink.width/2); 
      } 

      textMC.x = plateMargin; 
      textMC.y = newPlate.y + .5; 
      itemMC.addChild(textMC); 

      itemMCs.push(itemMC); 

      itemMC.x = (homeplateref.x + (homeplateref.width/2)) - (itemMC.width/2); 
      if (i==0) { 
       itemMC.y = homeplateref.y; 
      } else { 
       itemMC.y = itemMCs[i-1].y + (itemMCs[i-1].height - 6); 
      } 
      menuRef.addChild(itemMC); 

     } 

    } 

    function createText(menuTitle) { 

     trace(menuTitle); 

     var textContainer : MovieClip = new MovieClip(); 

     var myFont = new Font1(); 

     var backText = instantText(menuTitle, 0x000000); 

     backText.x = 1; 
     backText.y = 1; 

     var frontText = instantText(menuTitle, 0xFFFFFF); 

     frontText.x = 0; 
     frontText.y = 0; 

     textContainer.addChild(backText); 
     textContainer.addChild(frontText); 
     return textContainer; 
    } 

    function instantText(textContent, color) { 

     trace(textContent); // again, traces the right text each time it is fired 

     var myFont = new Font1(); 
     var myFormat:TextFormat = new TextFormat(); 
     myFormat.size = 18; 
     myFormat.align = TextFormatAlign.CENTER; 
     myFormat.font = myFont.fontName; 

     var myText:TextField = new TextField(); 
     myText.defaultTextFormat = myFormat; 
     myText.embedFonts = true; 
     myText.antiAliasType = AntiAliasType.ADVANCED; 
     myText.text = textContent; 
     myText.textColor = color; 
     myText.autoSize = TextFieldAutoSize.LEFT;   
     trace(myText.text); 

     return myText; 
    } 
+1

看起来像你需要嵌入字体 – Ronnie 2011-12-28 17:52:05

+0

什么是'PlateLink'和'Plate'? – www0z0k 2011-12-28 18:58:41

+0

Plate和PlateLink是灰色正方形的实例,并且链接文本的每一位 – 2011-12-28 19:08:40

回答

2

您需要为您使用的字体嵌入所有必需的字符。

对于在Flash中创建文本框:
选择文本字段,并在属性面板中打的“嵌入”按钮。

动态创建文本框:
当您设置字体(在你的情况Font1)出口,确保包含所有你需要的字符。

您可以选择嵌入所有大写字符,或者只需键入您需要的那些特定菜单项。

+0

我不确定我明白你在说什么。这些文本字段通过AS3生成,并且我的字体作为类Font1()导出。在Flash Authoring程序中有什么文本字段,那么对我来说呢?嵌入到底是为我做什么的? – 2011-12-28 19:20:36

+0

对不起,我以为你在用Flash创建文本框。我会更新我的答案。 – Cadin 2011-12-28 20:34:08

+0

是的,就是这样,我只是从Font1的属性中选择'包含所有字符范围'。哇,我couyld已经花了6个多小时,并且一直无所事事,谢谢! – 2011-12-28 20:39:33