Поставляемый объект DisplayObject должен быть дочерним по отношению к вызывающей стороне. - PullRequest
3 голосов
/ 11 мая 2010

Я новичок, и я искал и пытался в течение нескольких недель, и я не могу получить контроль над этим. Простой код, приведенный ниже, дает сообщение об ошибке «Поставляемый объект DisplayObject должен быть дочерним по отношению к вызывающей стороне».

var square = new squareObj;
addChild(square);
addEventListener(Event.ENTER_FRAME, removeSquare);

function removeSquare(evt:Event):void {
    removeChild(square)
}

squareObj - это фрагмент ролика в библиотеке, который экспортируется для AS. Как можно изменить этот код, чтобы он работал правильно? Я думаю, что мои знания о правильной работе мне не хватает, поэтому любые ссылки на хорошие учебники по этому вопросу приветствуются.

С уважением, H

1 Ответ

6 голосов
/ 11 мая 2010

Проблема в том, что прослушиватель входящего кадра будет вызываться снова и снова. Первый раз, когда он называется DisplayObject, действительно будет дочерним для вызывающего, но после этого он не будет (так как он уже был удален).

Поэтому я предлагаю вам сделать:

var square = new squareObj;
addChild(square);
addEventListener(Event.ENTER_FRAME, removeSquare);

function removeSquare(evt:Event):void {
    if (contains(square)) {
        removeChild(square)
    }
}

либо проверьте, действительно ли квадрат является потомком this

var square = new squareObj;
addChild(square);
addEventListener(Event.ENTER_FRAME, removeSquare);

function removeSquare(evt:Event):void {
    removeEventListener(Event.ENTER_FRAME, removeSquare)
    removeChild(square)
}

или удалите прослушиватель событий, в зависимости от того, нужно ли вам событие для чего-то другого, кроме удаления квадрата. Также вы должны заметить, что вы, вероятно, вообще не увидите квадрат, так как он будет удален довольно быстро после добавления.

...