Как загруженный дочерний SWF 1 может общаться со следующим дочерним SWF, дочерним SWF 2, который в данный момент не загружен - PullRequest
1 голос
/ 14 октября 2011

У меня есть родительский swf с тремя кнопками: кнопка «Далее», кнопка «Назад», кнопка включения / выключения тикера. У меня есть три дочерних swfs, каждый с тикером mc. Когда я нажимаю на кнопку тикера на родительском SWF он отправляет пользовательское событие, которое выводит тикер MC на сцену и, таким образом, тикер становится видимым (кнопка отключения тикера смещает его со сцены, изменяя значение ticker_mc.y). Проблема, с которой я сталкиваюсь, заключается в том, что тикер включен, и я нажимаю кнопку «Далее» или «Назад» для загрузки следующего или предыдущего дочернего SWF-файла, тикер гаснет. Как я могу убедиться, что тикер включен и закрывается только когда я его закрываю. Как загруженный дочерний SWF 1 может связаться со следующим дочерним SWF, дочерним SWF 2, который в данный момент не загружен, так как тикер включен на SWF 1, поэтому, пожалуйста, оставляйте тикер также на SWF 2?!

Мне кажется, я знаю проблему. Я установил значение по умолчанию ticker_mc = 160 (делает тикер неактивным) для каждого дочернего SWF. Таким образом, тикер становится неактивным каждый раз, когда я загружаю новый дочерний SWF. Если кто-то может подсказать, как я могу это сделать, моя проблема будет решена: при загрузке первого дочернего swf значение по умолчанию ticker_mc.y должно быть 160. Я хочу сохранить это значение в переменной. Когда я щелкаю ticker active btn, положение ticker_mc меняется на 194, поэтому значение переменной должно измениться на 194. Когда я нажимаю next btn, значение переменной (160 или 194) должно быть отправлено следующему дочернему swf, а ticker_mc.y равно значению переменной.

Это код на данный момент

«Следующая кнопка»

go_mc.next_btn.addEventListener(MouseEvent.CLICK, playNext);

function playNext(e:MouseEvent):void {
if (swf_no < (clips.length-1)) {
    swf_no++;

    SoundMixer.stopAll();
    nextClip();

    pp.play_btn.visible=false;
    pp.pause_btn.visible=true;


}

}

function nextClip():void {
    thisLoader.load(new URLRequest(clips[swf_no]));

}

// Каждый раз, когда я нажимаю кнопку «Далее» или «Назад», вызывается это событие, и я удаляю предыдущий SWF со сцены.

thisLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, doneLoading);
function doneLoading(e:Event):void {

stopAllChildMovieClips(stage);
stage.removeChild(thisMC);

thisMC=MovieClip(thisLoader.content);
thisLoader.unloadAndStop();

thisMC.x=37;
thisMC.y=78.50;

stage.addChild(thisMC);
playAllChildMovieClips(stage);

}

// Кнопка активного тикера на родительском swf

viewUnviewTxt_mc.viewTxt_btn.addEventListener(MouseEvent.CLICK, viewText);

function viewText(e:MouseEvent):void{
var viewText:String = "viewTxtFunc";
dispatchEvent (new Event(viewText, true));

}

// Чтобы отключить тикер (по умолчанию). Маска тикера по умолчанию отключена / невидима (вне сцены).

thisMC.tickerMaskMC.y = 160;

// пользовательское событие получено на дочернем SWF

parent.stage.addEventListener("viewTxtFunc", eventHandler);
function eventHandler(e:Event):void{
tickerMaskMC.y = 194;

}

1 Ответ

0 голосов
/ 14 октября 2011

Используйте ваш родительский SWF в качестве контроллера для всех ваших дочерних SWF.

Когда дочерний SWF хочет общаться с другим ребенком, отправьте событие или вызов родительскому SWF, а затем вернитесь кдругой дочерний узел, которому вы хотите получить вызов.

Хотя в вашем примере это больше похоже на проблему с наслоениями, чем на проблему связи.Если вы хотите убедиться, что при нажатии кнопки «Далее» или «Назад», если тикер активен, он остается активным, то обязательно загрузите этот новый SWF-файл в DisplayObject, который находится за тикером DisplayObject.В этом случае оба объекта DisplayObject являются вашими загруженными SWF-файлами.

Посмотрите методы getChildAt и addChildAt объекта DisplayObject.Первый DisplayObject, добавленный в рабочую область или другой DisplayObject, будет иметь индекс 0, второй - 1 и т. Д. И т. Д.Используя это, вы сможете правильно наложить тикер, чтобы он всегда оставался сверху и отображался, когда вы хотите, чтобы он был

Обновление из ваших комментариев: Вы можете посмотреть на объект с именем LoaderContext.У него есть свойство с именем параметров, которое представляет собой объект, который вы просто передаете вместе с запросом загрузки для вашего SWF.

var lc:LoaderContext = new LoaderContext; <br/> var thisLoader:Loader = new Loader(); <br/> lc.parameters = { "tickerHeight" : "myVariable" }; <br/> thisLoader.load(new URLRequest(clips[swf_no]), lc);

Затем в дочернем swf попробуйте:trace(loaderInfo.parameters.tickerHeight);

Я также забыл добавить это, ваша скомпилированная цель SWF должна быть как минимум версии 10.2 или выше, чтобы использовать LoaderContext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...