AS3: Быстрый вопрос относительно детей и ссылки на них - PullRequest
0 голосов
/ 28 ноября 2010

Редактировать: Кэмерон запросил полную оскорбительную функцию:

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 Ответ

2 голосов
/ 28 ноября 2010

Так очевидно.Переменная pic просто НЕ доступна, если вы хотите удалить дочерний элемент.Вы объявили это в части «else», и это было в какой-то функции (которая, я думаю, вызывается нажатием кнопки, или вводом фрейма, или любого другого события).Поэтому, когда функция вызывается ОПЯТЬ, на этот раз с picShown , установленным в значение true, переменная pic НЕ доступна и равна нулю.

Либо это ИЛИвы действительно объявили переменную OUTSIDE функции, но с «var» внутри области функций она была перезаписана локально.

Итак - обязательно объявляйте переменную pic вне функции, так что вы сможете получить доступ к дескриптору позже:

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

Кроме того - когда у вас есть это, НЕ повторно декларируйте переменную pic ВНУТРИ функции, используйте просто простое присваивание (рис = бла;).

...