2010-05-19 44 views
0

我有這個類:的DisplayObject不會顯示在AS3

public class IskwabolText extends Sprite { 

    private var _tf:TextField; 
    private var _tfmt:TextFormat; 

    private var _size:Number; 
    private var _text:String; 

    public function IskwabolText(params:Object) { 
     var defaultParams:Object = { 
      color: 0x000000, 
      background: false, 
      backgroundColor: 0xFFFFFF, 
      width: 0, 
      height: 0, 
      multiline: false, 
      wordWrap: false 
     }; 
     // textfield 
     _tf = new TextField(); 
     _tf.antiAliasType = 'advanced'; 
     _tf.embedFonts = true; 
     _tf.type = 'dynamic'; 
     _tf.selectable = false; 
     // textformat 
     _tfmt = new TextFormat(); 
     set(defaultParams); 
     set(params); 
    } 

    public function get(param:String):Object { 
     switch (param) { 
      case 'size': return _tfmt.size; 
      case 'text': return _tf.text; 
      case 'font': return _tfmt.font; 
      case 'color': return _tfmt.color; 
      case 'background': return _tf.background; 
      case 'backgroundColor': return _tf.backgroundColor; 
      case 'width': return _tf.width; 
      case 'height': return _tf.height; 
      case 'multiline': return _tf.multiline; 
      case 'wordWrap': return _tf.multiline; 
      default: return this[param]; 
     } 
     return null; 
    } 

    public function set(params:Object):Object { 
     for (var i:String in params) { 
      setParam(i, params[i]); 
     } 
     redraw(); 
     return this; 
    } 

    private function setParam(param:String, value:Object):Object { 
     switch (param) { 
      case 'size': _tfmt.size = new String(value); break; 
      case 'text': _tf.text = new String(value); break; 
      case 'font': _tfmt.font = new String(value); break; 
      case 'color': _tfmt.color = new uint(value); break; 
      case 'background': _tf.background = new Boolean(value); break; 
      case 'backgroundColor': _tf.backgroundColor = new uint(value); break; 
      case 'width': _tf.width = new Number(value); break; 
      case 'height': _tf.height = new Number(value); break; 
      case 'multiline': _tf.multiline = new Boolean(value); break; 
      case 'wordWrap': _tf.multiline = new Boolean(value); break; 
      default: this[param] = value; break; 
     } 
     return this; 
    } 

    private function redraw():void { 
     _tf.setTextFormat(_tfmt); 
     if (contains(_tf)) 
      removeChild(_tf); 
     if (_tf.width == 0) 
      _tf.width= _tf.textWidth+5; 
     _tf.height = _tf.textHeight; 
     addChild(_tf); 
    } 

} 

但是,當我這樣做:

public class Main extends Sprite { 
    public function Main() { 
     addChild(new IskwabolText({ 
     size: 100, 
     text: 'iskwabol', 
     font: 'Default', // this is properly embedded 
     color: 0x000000, 
     x: stage.stageWidth/2 - this.width/2, 
     y: 140 
     })); 
    } 
} 

孩子IskwabolText沒有得到顯示。發生了什麼?

+0

再次檢查您的重畫功能。可能有什麼不對 – chchrist 2010-05-19 12:46:05

+0

我首先使用getters和setter編寫了IskwabolText類,但它變得冗長了。然後我使用了一個使用param對象來設置類屬性的集合函數。我沒有觸及重繪功能,所以我不認爲這是原因。 – MarkSteve 2010-05-19 13:05:57

回答

0

您已將embedFonts設置爲TRUE,但我沒有看到將字體類型設置爲TextFormat的位置/方式 - 將embedFonts設置爲FALSE,並且您會看到將文本添加到顯示列表中。

更新:我忽略了你確實有ffont屬性設置爲嵌入字體的名稱,只是要確保你正確地提到它,因爲它是最有可能成爲問題,由於嵌入式字體。

+0

我嘗試使用系統字體,但它仍然沒有工作:( – MarkSteve 2010-05-20 00:03:23

+0

忘了提及,我沒有看到代碼中的任何地方,你實際上設置的文本值,既沒有params對象,所以就在行「_tf .selectable = false;「我添加了幾個_tf.autoSize = TextFieldAutoSize.LEFT; _tf.text =」某些文本「;順便說一句,您是否爲了看看是否顯示了某些內容而設置了嵌入字體FALSE? – falomir 2010-05-20 00:14:00

+0

正文在剛纔的構造函數中設置好了,我只是想知道出了什麼問題,顯然寬度和高度因爲某種原因得到了5的值,我修正了重繪函數來正確調整寬度和高度,看起來像chchrist的評論是寫回答:)謝謝你們的幫助。 – MarkSteve 2010-05-20 01:20:38

0

該文本在構造函數中設置。我只是想清楚發生了什麼問題。顯然寬度和高度由於某種原因得到了5的值。我修復了重繪功能,以正確調整寬度和高度。似乎chchrist的評論是寫回答:)謝謝你們的幫助。