AS3: дочерний элемент добавлен, но не отображается - PullRequest
0 голосов
/ 28 февраля 2012
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 ]

2 голосов
/ 28 февраля 2012

Немного причуды.

Когда вы устанавливаете ширину / высоту объекта MovieClip, Flash внутренне также настраивает свойства scaleX и scaleY. Например, если исходная ширина была 100, а теперь вы установили ее на 200, то новый scaleX должен быть равен 2. Это означает, что Flash отобразит его в 2-кратном масштабе по горизонтали.

Теперь изначально ширина равна 0 (пустой объект), поэтому, когда вы устанавливаете новую ширину, новый scaleX должен стать бесконечным - или 0, как это делает Flash.

Таким образом, даже если вы нарисовали что-то на объекте, оно все еще находится в нулевом масштабе, поэтому ничего не отображается. Способ исправить это, как предлагает другой автор, состоит в том, чтобы избежать установки ширины / высоты на пустом объекте или, в качестве альтернативы, сбросить scaleX и scaleY на 1 после завершения рисования.

...
_extra.graphics.endFill();
_extra.scaleX = _extra.scaleY = 1;
2 голосов
/ 28 февраля 2012

Попробуйте удалить

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