AS3:儿童已添加,但未显示

时间:2012-02-28 14:31:22

标签: actionscript-3 movieclip addchild

public class ItemView extends MovieClip {

  private var _title:TextField;
  private var _extra:MovieClip;

  public function ItemView( ) {
    setup();
    return;
  }

  private function setup( ):void {
    trace("ItemView::setup()");
    _title = new TextField();
    _title.text = "Title";
    addChild(_title);
    _extra = new MovieClip();
    _extra.width = 200;
    _extra.height = 40;
    _extra.graphics.beginFill(0x0000ff);
    _extra.graphics.drawRect(0, 0, 20, 20);
    _extra.graphics.endFill();
    addChild(_extra);
    return;
  }

}

当我创建ItemView的实例并将其添加到舞台时,会显示“标题”,但蓝色方块不显示。但是,如果我在graphics而不是this进行_extra来电,我会看到蓝色方块。这告诉我_extra本身没有正确显示,但我无法弄清楚原因。

我错过了什么?是否有一些特殊程序可以将一个MovieClip添加到另一个?

2 个答案:

答案 0 :(得分:2)

尝试删除

_extra.width = 200;
_extra.height = 40;

答案 1 :(得分:2)

有点怪癖。

设置MovieClip对象的宽度/高度时,Flash内部还会调整scaleXscaleY属性。例如,如果原始宽度为100,现在您已将其设置为200,则新scaleX应为2.这意味着Flash将以水平2X刻度显示它。

现在,最初宽度为0(空白对象),因此当您设置新宽度时,新的scaleX应该变为无限 - 或者为0,就像Flash一样。

所以即使你在对象上画了一些东西,它仍然是零刻度,这就是为什么没有显示出来的原因。根据另一张海报的建议,解决这个问题的方法是避免在空白对象上设置宽度/高度,或者在绘图完成后将scaleXscaleY重置为1。

...
_extra.graphics.endFill();
_extra.scaleX = _extra.scaleY = 1;