views:

176

answers:

2

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

}

alt text


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.

+1  A: 

Change fnt.data to Fonts.data because it's a static variable

MagicWishMonkey
Oh sweet! I don't get that error now, but I'm getting this in my output window: footFont = nullTypeError: Error #2007: Parameter format must be non-null.
Leon
+2  A: 

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.

Andrew Mullins
Sweet that did it! Thanks :D
Leon