Trying to pass TextFormat into other Classes, getting error
Happy Tuesday everyone :)
I noticed I was using the same fonts over again in several of my Sub Classes, so I figured I'd just make a Fonts Class to handle all those.
Anyways I'm scratching my head around how to get those TextFormats created in my Fonts class into my other Classes cleanly. I don't believe I'm doing this the correct way, but currently I'm getting this error msg:
footFont = null TypeError: Error #2007: Parameter format must be non-null.
I want to pass the avant97 TextFormat into my Frame Class to style the Footer text
Below is my Fonts Class.
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;
}
}
Here is my Frame class where I'm trying to attach avant97 to a TextField:
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);
}
}
}
Basically I got the [idea for the static var data object from here][2] But maybe his example only works for actual data? Not TextFormats?
This is the Error I'm getting once again: footFont = null TypeError: Error #2007: Parameter format must be non-null.
If you're just trying to keep you text formats separate from other code, you should think of your Fonts class as "static" (should not be instantiated). All methods and properties of the Fonts class would be referenced like Fonts.method() Fonts.property.
private footFont : TextFormat = Fonts.avant97;
It should be noted that you don't NEED to create a copy of avant97 unless you're going to edit its properties. You could simply use Fonts.avant97 in lieu of footFont.
Change fnt.data to Fonts.data because it's a static variable
精彩评论