2014-11-10 18 views
2

В AS3, я пытаюсь добавить ребенка к определенному ребенку MovieClip.Добавление ребенка к ребенку

Для этого я сделал следующее:

for (var r:Number = 0; r < 2; r++) { 
    sand = new Sand(); 
    sLayers.getChildAt(r).addChild(sand); 
} 

Когда sLayers является MovieClip родителем, r является конкретным ребенком sLayers и sand является ребенком, которого я хочу добавить.

Он приходит со следующей ошибкой:

1061: Call to a possibly undefined method addChild 
     through a reference with static type flash.display:DisplayObject. 

К сожалению, я упростил код, это заняло бы слишком много места.

Есть ли другой способ сделать это? Или я близко, но что-то не хватает?

+0

Ошибка в том, что 'getChildAt()' возвращает объект отображения (который может или не может быть DisplayObjectContainer, что может иметь детей из его собственных. Вам нужно бросить как 'DisplayObjectContainer' или 'Sprite', чтобы не получить ошибку компилятора. Если какой-либо дочерний элемент' sLayers' не является потомком 'DisplayObjectContainer' (например,« Shape »или« Bitmap »), вы не сможете добавить к нему ребенка – BadFeelingAboutThis

+0

например: 'if (sLayers.getChildAt (r) - Sprite) Sprite (sLayers.getChildAt (r)). AddChild (песок);' где cast ** Sprite (object) ** сообщает компилятору, что объект на самом деле является Sprite (или подкласс его типа MovieClip) – BadFeelingAboutThis

ответ

-1

попробовать это

for(var r:Number = 0; r < 2; r++) 
{ 
    var sand:Sand = new Sand; 
    (sLayers.getChildAt(r) as MovieClip).addChild(sand); 
} 
+1

Рассмотрите возможность добавления пояснения на ваш ответ, чтобы сделать его более полезным. Вы принимаете предположение, что все дети 'sLayers' являются MovieClips, ваш ответ не будет задерживаться, если в качестве детей есть экземпляры« Shape »,« Sprite »или« Bitmap ». Я бы предложил изменить ваш код, чтобы включить проверку для 'is DisplayObjectContainer', прежде чем делать cast и addChild. Кроме того, вам не хватает скобок создания экземпляра на 'new Sand()'; – BadFeelingAboutThis

+0

Это решило мою проблему. Спасибо за новые знания! – XactVisual

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