更新
我找到了有用的东西!当计时器启动时,我会将此作为 回答发布。与此同时,我会接受一个可以解释为什么我的解决方案有效的答案:
我改变了这一行
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
文件在这里:
任何人都能看到导致我问题的原因吗?在Adobe Animate中,通过在下拉菜单中具有该选项并具有对库的GUI访问,可以简化嵌入。语法明显不同,因为我能够使用Font类,而我在网上找到的所有来源都显示我使用Class类?这就是我的意思:
Adobe 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);
}
}
}
结果是
但它看起来应该更像
答案 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"
时,一切都很顺利。所以在这种情况下,它似乎不是一个操作顺序问题,除非我错过了你的观点?