AS3:关于儿童的快速问题并引用它们

时间:2010-11-28 17:22:11

标签: flash actionscript-3 actionscript children

编辑:Cameron请求完整的违规功能:

function picSwitch(p=null)
{
 if (picShown == true)
 {
  picx = 3072;
  picy = 2304;
  picTweens.removeChild(pic);
  picShown = false;
 }
 else
 {
  var pic:image = new image();
  pic.smoothing = true;

  pic.width = 750;
  pic.height = 560;

  if (pic.scaleX < pic.scaleY) 
  {
   pic.scaleY = pic.scaleX;
  } 
  else 
  {
   pic.scaleX = pic.scaleY;
  }

  picx = 1536 - (pic.width/2) + 64;
  picy = 1152 - (pic.height/2) - 12;

  picTweens.addChild(pic);

  TweenLite.to(pic, 1, {x:picx, y:picy, rotation:4, ease:Quint.easeInOut});

  picShown = true;
 }
}

原帖: 哦,伙计,我简直不敢相信我已经花了几个小时来讨论这个问题......这个愚蠢的问题无疑已被多次提出过了......我事先向你道歉..

我在引用我创建的孩子时遇到了问题。

我的图书馆里有一个名为'image'的电影剪辑

我舞台上名为'picTweens'的容器影片剪辑(其实例名称相同)

并且在舞台的动作面板中我有一个包含

的功能
var pic:image = new image();
pic.smoothing = true;
picTweens.addChild(pic);

一切都很好,它创造了我应该的电影剪辑。

现在在同一个函数的if语句中,我有

picTweens.removeChild(pic);

但是当if语句触发时,(并且我已经将我的图片加载到它应该的位置)

它告诉我:

TypeError: Error #2007: Parameter child must be non-null.
 at flash.display::DisplayObjectContainer/removeChild()

我的语法错了吗?如果没有,那我应该检查什么?

1 个答案:

答案 0 :(得分:2)

如此明显。当你想要移除孩子时, pic 变量根本不可用。你在“else”部分声明了它,并且它在某个函数中(我猜是按下按钮,或输入框架或任何其他事件)。因此,当函数被称为AGAIN时,这次将 picShown 设置为true, pic 变量不可用,并且它为空。

或者你实际上声明了函数的变量OUTSIDE,但在函数范围内使用“var”,它在本地被覆盖。

所以 - 确保在函数外面声明 pic 变量,这样你以后就可以访问句柄了:

var pic:image;
function picSwitch(...){
    // etc.
}

另外 - 当你有这个时,不要重新声明函数中的 pic 变量,只使用一个简单的赋值(pic = blah;)。