Actionscript 3 文本未出现在FlashDevelop项目中。但也不会抛出任何错误

Actionscript 3 文本未出现在FlashDevelop项目中。但也不会抛出任何错误,actionscript-3,Actionscript 3,更新 我发现了一些有用的东西!我会在计时器启动后将此作为答案发布。同时,我将接受一个可以解释我的解决方案为何有效的答案: 我换了这行 private var myAtariFormat:TextFormat = new TextFormat(myFatPixels.fontName,25,0x00ffff); private var myAtariFormat:TextFormat = new TextFormat(myFatPixels.fontName,25,0x00ffff);

更新

我发现了一些有用的东西!我会在计时器启动后将此作为答案发布。同时,我将接受一个可以解释我的解决方案为何有效的答案:

我换了这行

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

private var myAtariFormat:TextFormat = new TextFormat("fatPixel",25,0x00ffff);  
private var myAtariFormat:TextFormat = new TextFormat("fatPixel",25,0x00ffff);  
并包括
embedAsCFF=“false”

它成功了。我不知道为什么。这对任何想解释的人来说都是显而易见的吗?是因为“
Class
”没有属性“
fontName
”吗?我们把我的字体称为
,而不是
字体


原职 这是我第一次使用FlashDevelop。我在菜单和记分板上有按钮。它们都有一个文本字段。在AdobeAnimate中,一切都很好,但在FlashDevelop中,我知道我需要严格使用AS3代码嵌入字体,因为没有GUI库可以将它们放入

我发现了这一点,但它只证实(我认为)我做得正确,而显然,我没有

因此,这是我当前的排列,不会抛出任何错误,游戏加载和运行良好(但没有任何文本),按钮工作,但没有任何文本:

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");
它们都在我的主文档类中。 以下内容包括my 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
文件在这里:

有人知道是什么导致了我的问题吗?在AdobeAnimate中,通过在下拉菜单中使用该选项和GUI访问库,嵌入变得更简单。语法明显不同,我可以使用Font类,而我在网上找到的所有资料都显示我可以使用Font类?我的意思是:

Adobe动画制作

var myFatPixels:Font = new FatPixels();
FlashDevelop

var myFatPixels:Class;
我想如果我能更好地理解这两行代码之间的区别,我就能找出我做错了什么

所以,我制作了一个简单的脚本,至少尝试显示一些文本。它工作,但字体看起来像泰晤士报新罗马或其他一些系统字体,而不是它应该看起来像的字体。以下是我的代码:

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

    }

}
结果是

但它看起来应该更像

我更改了这一行

为此:

private var myAtariFormat:TextFormat = new TextFormat("fatPixel",25,0x00ffff);  
private var myAtariFormat:TextFormat = new TextFormat("fatPixel",25,0x00ffff);  
并包括
embedAsCFF=“false”。

我认为这是因为我们只能嵌入类型为
Class
(而不是
Font
)的元素,
Class
没有
fontName
的属性。那么获取
myFatPixel.fontName
不会返回任何内容?大概我的意思是,似乎应该这样做,因为我们在嵌入行中声明了一个
fontName
值,但无论如何,传递名称的文本字符串(“fatPixel”)就成功了

圣诞夜更新 针对“这可能是一个操作顺序问题”的恶感,我采取了以下措施:

    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”
时,一切都很好。因此,在这种情况下,这似乎不是一个操作顺序问题,除非我没有领会你的意思?

aaah,@NealDavis,你将自己解决这个问题:)谢谢。最有可能的是,这是有效的(或者说原版不起作用),因为操作顺序。初始化类(创建所有函数和变量),然后创建它引用的类(如果尚未创建)。由于您试图在
Main
classes签名中引用嵌入的类(例如不在函数中),因此在初始化类时(但嵌入的类尚未初始化),该代码将运行。如果将
myAtariFormat
var的赋值从signature/var声明移到构造函数中,它可能会起作用。但是,查找有关类级执行顺序的文档很困难,所以我只是猜测。无论如何,除了原语值之外,为类范围的变量分配任何其他值都不是一个好主意,因为不保证它们在那个时候可用。我想我明白你的意思了。我将在今晚或假期后做一次尝试,并让你知道。@Badfeeling关于这件事,请在上面的回答中查看我的更新。谢谢