文本没有出现在FlashDevelop项目中。但也没有抛出任何错误

时间:2016-12-23 08:24:59

标签: actionscript-3

更新

我找到了有用的东西!当计时器启动时,我会将此作为 回答发布。与此同时,我会接受一个可以解释为什么我的解决方案有效的答案:

我改变了这一行

private var myAtariFormat:TextFormat = new TextFormat(myFatPixels.fontName,25,0x00ffff);    

到此:

private var myAtariFormat:TextFormat = new TextFormat("fatPixel",25,0x00ffff);  

并包含embedAsCFF = "false"

它有效。我不确定我明白为什么。任何关心解释它的人都明白这一点吗?是因为“Class”没有属性“fontName”吗?我们将我的字体称为Class而不是Font

原帖

这是我第一次使用FlashDevelop。我在菜单和记分牌中有按钮。这些都有一个文本字段。在Adobe Animate中,一切正常,但在FlashDevelop中,我理解我需要使用严格的AS3代码嵌入字体,因为没有GUI库可以将它们放入。

我发现了这个snippet,但它只是证实(我认为)我已经正确地完成了它,显然,我没有。

所以这是我当前的排列,不会抛出任何错误,游戏加载并运行正常(但没有任何文本)和按钮工作,但没有文字在任何地方:

public class Main extends Sprite 
{

// ********** EMBEDDED ASSESTS **       
    [Embed(source = "/../lib/FATPIXEL.TTF", fontName = "fatPixel")] public static var myFatPixels:Class;

然后在创建菜单按钮时:

// ********* BUTTONS **********
    private var button1:RoundButton= new RoundButton(60,30,gameReset,0xff386c,0x0,"1 Player");

这些都在我的主要doc类中。 以下内容包括我的button类中的构造函数以及包中的属性声明部分:

    [Embed(source = "/../lib/AtariSmall.ttf", fontName = "smallAtari")] public var myAtariFont:Class;       
    public var tF:TextField = new TextField();
    private var myAtariFormat:TextFormat = new TextFormat(myFatPixels.fontName,25,0x00ffff);        

    var b:Sprite = new Sprite;
    var txt:String = new String();

    public function RoundButton(w:Number,h:Number,f:Function,colorA:uint,colorB:uint = 0x555599,text:String="button",dat2:Boolean = false):void {
        addChild(tF);
        tF.text = text;
        tF.embedFonts = true;
        tF.setTextFormat(myAtariFormat);
        tF.defaultTextFormat = myAtariFormat;
    }

哦,我的.ttf文件在这里:

enter image description here

任何人都能看到导致我问题的原因吗?在Adobe Animate中,通过在下拉菜单中具有该选项并具有对库的GUI访问,可以简化嵌入。语法明显不同,因为我能够使用Font类,而我在网上找到的所有来源都显示我使用Class类?这就是我的意思:

Adob​​e Animate

var myFatPixels:Font = new FatPixels();

的FlashDevelop

var myFatPixels:Class;

我想如果我更好地理解这两行代码之间的区别,我就可以弄清楚我做错了什么。

所以,我制作了一个简单的脚本,至少试着让一些文字显示出来。它工作,但字体看起来像Times New Roman或其他一些系统字体,而不是它应该看起来像的字体。这是我的代码:

package
{
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.*;

    /**
     * ...
     * @author Neal Davis
     */

    public class Main extends Sprite 
    {
        [Embed(source = "../lib/FATPIXEL.TTF", fontName = "fatPixel")] public static var myFatPixels:Class;
        private var tF:TextField = new TextField();
        private var myFont:Font = new myFatPixels();
        private var myAtariFormat:TextFormat = new TextFormat(myFatPixels.fontName,25,0xB6A4E3);    


        public function Main() 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            trace("hello world");
            var b:Sprite = new Sprite();
            addChild(b);
            b.addChild(tF);
            tF.defaultTextFormat = myAtariFormat;
            tF.text = "button";
            tF.setTextFormat(myAtariFormat);
        }

    }

}

结果是

TimeNewRomanFont

但它看起来应该更像

fatPixelFont

1 个答案:

答案 0 :(得分:0)

我改变了这一行

private var myAtariFormat:TextFormat = new TextFormat(myFatPixels.fontName,25,0x00ffff);    

到此:

private var myAtariFormat:TextFormat = new TextFormat("fatPixel",25,0x00ffff);  

并包含embedAsCFF = "false".

认为这是因为我们只能嵌入Class类型的元素(不是Font)而Class没有属性fontName。所以让myFatPixel.fontName没有任何回报?也许?我的意思似乎应该是因为我们在嵌入行中声明了一个fontName值,但无论如何,传递名称的字符串(" fatPixel")就可以了。

平安夜更新

回应BadFeelingAbout这个'我认为它可能是一个操作顺序问题,我做了以下几点:

    public function RoundButton(w:Number,h:Number,f:Function,colorA:uint,colorB:uint = 0x555599,text:String="button",dat2:Boolean = false):void {

        [Embed(source = "/../lib/FATPIXEL.ttf", fontName = "fatPixel", embedAsCFF = "false")] 
        var myFatPixels:Class;
        myAtariFormat = new TextFormat(myFatPixels.fontName,25,0x00ffff);   

按钮显示没有文字。同样,当我将myFatPixels.fontName切换为简单"fatPixel"时,一切都很顺利。所以在这种情况下,它似乎不是一个操作顺序问题,除非我错过了你的观点?