Я пробовал много разных способов сделать эту работу, но я не знаю, что происходит. Wish Flash предоставил более подробную информацию об ошибках.Ошибка AS3 # 2007 в дочернем SWF после добавления компонентов в родительский SWF
У меня есть SWF загрузчика, который загружает и запускает другой (дочерний) SWF. Все работает идеально, пока я не попытаюсь добавить компоненты в SWF загрузчика (родителя). После добавления компонентов: Когда ребенок SWF загружается и выполняется, многие экранные объекты не загружаются, и я получаю следующее сообщение об ошибке несколько раз:
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at fl.controls::LabelButton/draw()
at fl.core::UIComponent/drawNow()
at fl.controls::List/drawList()
at fl.controls::List/draw()
at fl.core::UIComponent/callLaterDispatcher()
Я думаю, что эта кнопка не становится полностью разрушен, и препятствует код кнопки в дочерней swf.
У меня есть следующий код:
btnStart.addEventListener(MouseEvent.CLICK, start);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onGameLoadCompletion);
function onGameLoadCompletion (event:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.INIT, onGameLoadCompletion);
stage.addChild(loader.content);
stage.removeChild(this);
}
function start (event:MouseEvent):void {
btnStart.removeEventListener(MouseEvent.CLICK, start);
loader.load(new URLRequest("childSWF.swf"));
}
Существует кнопка на сцене, что было сделано путем перетаскивания компонент кнопки в моей библиотеке, а затем на сцену.
Я также попытался сделать это только с AS код следующим образом:
import fl.controls.Button;
var btnStart:Button = new Button();
stage.addChild(btnStart);
btnStart.x=670.30;
btnStart.y=486.35;
btnStart.setSize(100,22);
btnStart.label="Continue";
btnStart.visible = true;
btnStart.addEventListener(MouseEvent.CLICK, start);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onGameLoadCompletion);
function onGameLoadCompletion (event:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.INIT, onGameLoadCompletion);
stage.removeChild(btnStart);
stage.addChild(loader.content);
stage.removeChild(this);
}
function start (event:MouseEvent):void {
btnStart.removeEventListener(MouseEvent.CLICK, start);
loader.load(new URLRequest("childSWF.swf"));
}
Где есть кнопка в моей библиотеке, но не на сцене.
Что может быть причиной этой ошибки? Я думаю, возможно, это потому, что у ребенка SWF есть кнопки в нем. Итак, как правильно удалить кнопку в родительском SWF до того, как будет загружен дочерний SWF, чтобы он не влиял на дочерний SWF?
Этот вопрос относится к вопросу о том, что отличается в среде SWF ребенка, когда раньше был компонент на этапе до его загрузки. Давайте притворимся, что я не могу изменить дочерний swf. Почему он отлично работает, прежде чем добавлять компоненты в родительский swf?
Спасибо за помощь.
Я полагаю, проблема не в коде, который вы показываете. Во-первых, ошибка говорит о проблеме в функции addChildAt() - но вы добавляете addChild. Посмотрите на точный номер строки, где возникает ошибка. Во-вторых, попробуйте trace() loader.content - это нормально или нет? –
проблема в том, что она не показывает номера строк, где произошла ошибка! :( То, что я поставил в вопросе, - это вся информация, которую у меня есть. Я бы предпочел не связываться с child.swf, так как это изменение содержания в родительском swf, которое вызывает это. Но я подумаю об изменении содержимого child.swf, если ничего не поделаешь. – CausingUnderflowsEverywhere