【问题标题】:Adding a child to a child将孩子添加到孩子
【发布时间】:2015-01-07 09:48:42
【问题描述】:

AS3 中,我正在尝试将子代添加到MovieClip 的特定子代中。

为此,我做了以下工作:

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

sLayersMovieClip 父级时,rsLayers 的特定子级,sand 是我要添加的子级。

出现以下错误:

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

对不起,我简化了代码,它会占用太多空间。

还有其他方法可以做到这一点吗?还是我很接近但只是错过了一些东西?

【问题讨论】:

  • 错误是因为getChildAt()返回一个显示对象(它可能是也可能不是一个可以有自己的孩子的displayObjectContainer。你需要转换为DisplayObjectContainerSprite不得到编译器错误。如果sLayers 的任何子代不是DisplayObjectContainer 的后代(例如ShapeBitmap),您将无法向其添加子代。
  • 例如:if(sLayers.getChildAt(r) is Sprite) Sprite(sLayers.getChildAt(r)).addChild(sand); 其中演员 Sprite(object) 告诉编译器该对象实际上是一个 Sprite(或它的子类,如 MovieClip)跨度>

标签: actionscript-3 addchild


【解决方案1】:

试试这个

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

【讨论】:

  • 考虑为您的答案添加解释以使其更有用。您假设sLayers 的所有孩子都是MovieClips,如果有ShapeSpriteBitmap 实例作为孩子,您的答案将不成立。我建议修改您的代码以在进行强制转换和 addChild 之前对is DisplayObjectContainer 进行检查。此外,您还缺少new Sand() 上的实例化括号;
猜你喜欢
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多