2013-03-28 4 views
0

Я пытаюсь сбросить сцену, перемещая каждую вещь в исходное положение, функция сброса сбрасывает массив, добавляет тела затылок обратно на сцену и прикрепляет графику, но оригинальная графика все еще находятся на стадии в каком бы положении они находились, когда сброс был вызванas3 как удалить/перенести положение графики из массива сброса

private var brickGraphic:MovieClip = new Brick(); 
private var brick:Body; 
private var brickArray:Array; 

private function setUp():void 
{ 
    brickArray = new Array ; 

    for (var i:int = 0; i < 10; i++) 
    { 
     var brick:Body = new Body(BodyType.DYNAMIC); 
     var brickShape:Polygon = new Polygon(Polygon.box(10,25)); 
     var brickGraphic = new Brick(); 
     brickGraphic.width = 10; 
     brickGraphic.height = 25; 
     addChild(brickGraphic); 
     brickGraphic.cacheAsBitmap = true; 
     brick.shapes.add(brickShape); 
     brick.position.setxy(450, ((ag) - 30 * (i + 0.5))); 
     brick.angularVel = 0; 
     brick.shapes.at(0).material.elasticity = .5; 
     brick.shapes.at(0).material.density = 150; 
     brick.cbTypes.add(brickType); 
     brick.space = space; 
     brickGraphic.stop(); 
     brick.userData.sprite = brickGraphic; 
     brick.userData.sprite.x = brick.position.x; 
     this.brickArray.push(brick); 
    } 

    private function reset():void 
    { 
     if (contains(brickGraphic)) removeChild(brickGraphic); 
     space.clear(); 
     setUp(); 
    } 
} 

это последний вопрос я имею на это приложение и ваша помощь будет принята с благодарностью

ответ

1

это потому, что вы не снимая их с removeChild.

Для каждого объекта brickGraphic необходимо добавить removeChild объект, который вы добавляете на сцену.

Что-то вроде:

private function setUp():void 
{ 
    brickArray = []; 

    for (var i:int = 0; i < 10; i++) 
    { 
     var brick:Body = new Body(BodyType.DYNAMIC); 
     var brickShape:Polygon = new Polygon(Polygon.box(10,25)); 
     var brickGraphic = new Brick(); 
     brickGraphic.width = 10; 
     brickGraphic.height = 25; 
     addChild(brickGraphic); 
     brickGraphic.cacheAsBitmap = true; 
     brick.shapes.add(brickShape); 
     brick.position.setxy(450, ((ag) - 30 * (i + 0.5))); 
     brick.angularVel = 0; 
     brick.shapes.at(0).material.elasticity = .5; 
     brick.shapes.at(0).material.density = 150; 
     brick.cbTypes.add(brickType); 
     brick.space = space; 
     brickGraphic.stop(); 
     brick.userData.sprite = brickGraphic; 
     brick.userData.sprite.x = brick.position.x; 
     this.brickArray.push(brick); 
    } 


} 

private function removeAllBricks():void 
{ 
    for(var i:int=0; i<brickArray.length; i++) 
    { 
     var dp:DisplayObject = brickArray[i].userData.sprite as DisplayObject; 
     if(dp && dp.parent) 
      dp.parent.removeChild(dp); 
    } 
} 

private function reset():void 
{ 
    removeAllBricks(); 
    space.clear(); 
    setUp(); 
} 
+0

, возвращаемой следующее arror 'TypeError: Error # 2007: Параметр ребенок должен быть не null.' и указывает на линии, функция сброса называется – Lonergan6275

+0

я treced из: 'trace (brickArray [r] .shapes.at (0) как DisplayObject);' и он возвращает null 10 раз. – Lonergan6275

+0

Изменен мой ответ и добавлены проверки, чтобы убедиться, что на экранных объектах есть родители, вызывающие вызов функции перед настройкой. –

Смежные вопросы