【问题标题】:Trying to pass TextFormat into other Classes, getting error尝试将 TextFormat 传递给其他类,出现错误
【发布时间】:2009-11-17 18:15:25
【问题描述】:

祝大家星期二快乐 :)

我注意到我在几个子类中再次使用相同的字体,所以我想我只需创建一个 Fonts 类 来处理所有这些。

无论如何,我都在为如何将在我的 Fonts 类 中创建的那些 TextFormats 干净地放入我的其他类中而摸不着头脑。我不相信我这样做是正确的,但目前我收到了这个错误消息:

footFont = null TypeError: Error #2007: 参数格式必须为非空。

我想将 avant97 TextFormat 传递给我的 Frame 类来设置页脚文本的样式

下面是我的字体类。

package src.model 
{
    import flash.text.*;

    public class Fonts
    {
        public static var data:Object = {};
        public static var avant97 = new TextFormat(); // Footer copy
        public static var avantFF = new TextFormat(); // Navigation Copy
        public static var avant0s = new TextFormat(); // Thumbnail Titles

        avant97.font  = (new AvantGrande() as Font).fontName;
        avant97.size  = 16;
        avant97.color = 0x979797;
        avant97.align = TextFormatAlign.CENTER;

        avantFF.font  = (new AvantGrande() as Font).fontName;
        avantFF.size  = 16;
        avantFF.color = 0xFFFFFF;
        avantFF.align = TextFormatAlign.CENTER;

        avant00.font  = (new AvantGrande() as Font).fontName;
        avant00.size  = 16;
        avant00.bold  = true;
        avant00.color = 0x000000;
        avant00.align = TextFormatAlign.LEFT;
    }

}


这是我试图将 avant97 附加到 TextField 的 Frame 类:

package src.display{

import flash.text.*;
import flash.display.*;
import flash.geom.Matrix;
import flash.events.Event;

// ☼ --- Imported Classes
import src.events.CustomEvent;
import src.model.Fonts;

public class Frame extends Sprite {

    private var footer:Sprite = new Sprite();
    private var fnt:Fonts; // <- var for Fonts Class
    private var footFont:TextFormat; // var to hold avant97

    // ☼ --- Constructor
    public function Frame():void {
        this.addEventListener(Event.ADDED_TO_STAGE, init);
    }

    // ☼ --- Init
    public function init():void {

        fnt = new Fonts(); // init the Fonts class
        //fnt.data.avant97 = footFont; // trying to get avant97
        Fonts.data.avant97 = footFont;  // Changed per 1st answer
        trace("footFont = "+footFont); // Fail

        footer.graphics.beginFill(0x000);
        footer.graphics.drawRect(0,0,800,56);
        footer.graphics.endFill();
        footer.y = stage.stageHeight - footer.height;

        var footText:TextField = new TextField();
        footText.defaultTextFormat = footFont; // Fail x 2!
        footText.antiAliasType = flash.text.AntiAliasType.NORMAL;
        footText.selectable = false;
        footText.mouseEnabled = false;
        footText.wordWrap = true;
        footText.width = 800;
        footText.height = 30;
        footText.text = footCopy;

        // ☼ --- Place Footer & Copy
        footer.addChild(footText);

        addChild(footer);

        trace("Frame added --- √"+"\r");
        this.removeEventListener(Event.ADDED_TO_STAGE, init);
    }

}

}

基本上我从这里得到了[静态 var 数据对象的想法][2] 但也许他的例子只适用于实际数据?不是文本格式?

这是我再次遇到的错误: footFont = null TypeError: Error #2007: 参数格式必须为非空。

【问题讨论】:

    标签: actionscript-3 flash text textfield text-formatting


    【解决方案1】:

    如果您只是想将文本格式与其他代码分开,则应将 Fonts 类视为“静态”(不应实例化)。 Fonts 类的所有方法和属性都将像 Fonts.method() Fonts.property 一样引用。

    private footFont : TextFormat = Fonts.avant97;
    

    应该注意的是,除非您要编辑其属性,否则您不需要创建 avant97 的副本。您可以简单地使用 Fonts.avant97 代替 footFont。

    【讨论】:

      【解决方案2】:

      将 fnt.data 更改为 Fonts.data,因为它是一个静态变量

      【讨论】:

      • 天哪!我现在没有收到那个错误,但是我在输出窗口中收到了这个错误:footFont = null TypeError: Error #2007: Parameter format must be non-null.
      猜你喜欢
      • 2019-11-29
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多