【问题标题】:AS3: Child added, but not displayingAS3:已添加子项,但未显示
【发布时间】:2012-02-28 14:31:22
【问题描述】:
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 的实例并将其添加到舞台时,“标题”会显示,但蓝色方块不会。但是,如果我在this 而不是_extra 上调用graphics,我会看到蓝色方块。这告诉我 _extra 本身没有正确显示,但我不知道为什么。

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

【问题讨论】:

  • 我不确定这是否能解决任何问题,但您几乎不应该在 IDE 之外使用 MovieClip。请改用 Sprite 类。 MovieClip 有很多无用的开销。

标签: actionscript-3 movieclip addchild


【解决方案1】:

有点怪癖。

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

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

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

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

【讨论】:

    【解决方案2】:

    尝试删除

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

    【讨论】:

    • 嗯?为什么……这是怎么回事?设置高度和宽度怎么可能产生这种效果?
    • “除了 TextField 和 Video 对象外,没有内容的显示对象(例如空精灵)的宽度为 0,即使您尝试将宽度设置为不同的值。”跨度>
    • @Chris 只是为了指出。绘制矩形后,您可以根据需要调整宽度和高度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2013-04-17
    • 2015-05-27
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多