Не могу удалить removeChild после ссылки на объект ранее - PullRequest
1 голос
/ 29 октября 2010

По сути, у меня есть две процедуры: одна - проверка столкновения CDK, а другая - общая проверка массива.Они оба внутри одного и того же таймера.Существует два массива - collisionList и MasterArray, и объект находится в них обоих.

Сначала процедура коллизии:

    var collisions:Array = collisionList.checkCollisions();

 for(var i:uint = 0; i < collisions.length; i++)

{var firstShape: Sprite = collisions [i] .object1;

if (firstShape.name == "Obj1") {
коллизий [i] .object1.x = -20;collisionList.removeItem (столкновения [I] .object1);}}

Тогда у меня есть:

     for each(var i in MasterArray) {
     Shape1:Sprite = MasterArray[i];

if (ix <0) {removeChild (Shape1);MasterArray.splice (это, 1);} </p>

     }

Но это не работает.Это дает мне огромный сбой.Если я не изменю объект x в процедуре столкновения, в тот момент, когда он перемещается из экрана с помощью любой другой функции, он исчезает, и все хорошо.

Однако, даже если я просто коснусь егоподпрограмма столкновения (например, если я заявляю, что я хочу, чтобы ее х равнялся 20), в следующий раз, когда что-то случится и переместит его в х <0, я получу тот же сбой. </p>

Если я ничего не делаюпри проверке MasterArray и выполнении removeChild при проверке коллизий, она тоже работает нормально.

Это ошибка, которую я получаю в любом случае:

    ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

в flash.display :: DisplayObjectContainer/ removeChild () в game2_Scene1_fla :: MainTimeline / TimeCheck () в flash.utils :: Timer / _timerDispatch () в flash.utils :: Timer / tick ()

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

Я думаю, что вы используете для каждого неправильного цикла во втором фрагменте кода.

Каждый i в MasterArray - это спрайт, нет?
Вы проверяете положение x в i, что кажется правильным, но устанавливаете Shape1 в MasterArray[i], вероятно, устанавливает Shape1 на ноль.(Вы ищете элемент в MasterArray с ключом «i», который на самом деле является элементом из MasterArray ...)

Итак, вы пытаетесь удалить Child (null), и всевзрыв.

Возможно, вы захотите изменить свой цикл на обычный для цикла.Примерно так:

for(var i:int=MasterArray.length-1; i>-1; i--) {
     shape1:Sprite = MasterArray[i];
     if (shape1.x < 0) { 
        removeChild(shape1); 
        MasterArray.splice(i,1); 
     }
}
0 голосов
/ 29 октября 2010

collisionList.removeChild(Shape1) проблема imho: действительно ли Shape1:Sprite = MasterArray[i]; является ребенком collisionList? а какой тип collisionList?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...