2010-05-10 3 views
3

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

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

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

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

С уважением H

ответ

6

Проблема заключается в том, что ввести кадр слушатель будет вызываться снова и снова. В первый раз, когда он называется 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) 
} 

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