Ошибка аргумента ActionScript 3.0: 2025 (удалить дочернюю проблему) - PullRequest
0 голосов
/ 27 июля 2010

При компиляции проекта в Adobe Flash CS4 появляется следующее сообщение об ошибке:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    at stageRotation/spawnParticle()
    at flash.utils::Timer/_timerDispatch()
    at flash.utils::Timer/tick()

код, который генерирует ошибку, показан ниже:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}

Любой вклад приветствуется. Благодарю. :)

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

removeChild выдает эту ошибку, когда переданный аргумент не является потомком родителя, вызвавшего метод.Добавлены ли частицы как дочерние к другому субконтейнеру в this объекте?

Убедитесь, что это действительно дочерний элемент вызывающего:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null && particleArrayForward[i].parent == this) {
        trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]);
        this.removeChild(particleArrayForward[i]);
    }
}

Если частицы не являются прямыми дочерними элементамиthis объект, вы можете удалить их, используя:

for (var i:int = 0; i < particleArrayForward.length; i++ ) {
    if (particleArrayForward[i] != null && particleArrayForward[i].parent != null) {
        trace("particle at " + i + " " + particleArrayForward[i]);
        trace("parent is " + particleArrayForward[i].parent);
        particleArrayForward[i].parent.removeChild(particleArrayForward[i]);
    }
}
1 голос
/ 27 июля 2010

Вы удаляете дочерний элемент из экранного объекта, перебирая все частицы в массиве.Однако я не вижу, где вы тогда удалите ссылку на дочерний элемент в самом массиве.Так что, если вы снова перебираете частоту ArrayFoward, вы будете пытаться удалить экранный объект, который уже был удален, и я собираюсь предположить, что это происходит?* в противном случае, если вы не просматриваете этот массив снова, то где-то вы добавляете дочерний элемент в массив, который не является дочерним элементом экранного объекта, из которого вы пытаетесь удалить.

...