0
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到另一个?

4

2 回答 2

2

尝试删除

_extra.width = 200;
_extra.height = 40;
于 2012-02-28T14:39:59.720 回答
2

一个小怪癖。

当您设置 MovieClip 对象的宽度/高度时,Flash 在内部也会调整scaleXscaleY属性。例如,如果原来的宽度是 100,而现在您将它设置为 200,那么新的scaleX应该是 2。这意味着 Flash 将以 2X 的比例水平显示它。

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

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

...
_extra.graphics.endFill();
_extra.scaleX = _extra.scaleY = 1;
于 2012-02-28T15:06:05.857 回答