Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   загрузка внешнего swf с "предусловием" (http://www.flasher.ru/forum/showthread.php?t=155282)

alexmihel 01.05.2011 15:01

загрузка внешнего swf с "предусловием"
 
подскажите, пожалуйста:

есть два swf-файла, родительский и дочерний, в родительском есть меню при клике на который должен загружаться дочерний с определенным контентом (в зависимости от того, на какой пункт меню кликнули в родителе). Как это лучше всего реализовать?

p.s. весь код, отвечающий за загрузку и выгрузку swf-файлов находится в отдельном классе.

bav 01.05.2011 16:11

Например так: в зависимости от того, какую кнопку нажали, говорим загрузчику какой контент грузить. Тот грузит, и сообщает (событием, или еще как-нибудь), что контент загружен. Далее делаем с контентом, что заблагорассудится.

carrotoff 01.05.2011 16:17

если весь контент находится в дочернем swf, а по условию нужно показывать ту или иную его часть, можно в Document Class дочернего объекта определить public var, в которую после загрузки из главной swf передавать то, что необходимо отобразить.

Dukobpa3 01.05.2011 16:55

ммммм, впринципе когда свф дочерний загружен то мы имеем доступ к его классам. Если эту свф писали вы, то структура классов вам известна, следовательно можно использовать внутренний контент дочерней свф по своему усмотрению.
Код AS3:

//************************
// где-то в коде:
//************************
private var panorama:MovieClip;
 
loader.load(new URLRequest("3dtour/3dtour.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
//************************
 
private function loadComplete (e:Event):void {
        loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
 
        //здесь мы тупо берем мейнкласс загруженной свф
        panorama = e.target.loader.content as MovieClip;
 
        //а здесь юзаем паблик методы этого мейнкласса
        panorama.setArea(40 * _scale, 90 * _scale, 840 * _scale, 590 * _scale);
        panorama.loadPanorama("panoName=3dtour&xml_file=3dtour/3dtour.xml");
 
        this.addChild(panorama as MovieClip);
}

Можно еще что-то придумать с flashVars, тогда дочерняя свф будет сама решать что показывать и не придется ее классы дергать. Только как передать влешВары НЕ из хтмл или пхп или SVFObject - я не знаю.

alexmihel 02.05.2011 00:49

спасибо всем, кто ответил - вариант с передачей параметра - видимо наиболее хороший. Но у меня возникает дурацкая ситуация - переменная, которая призвана хранить значение присланное из родительского класса, как-то затирает полученное значение! Вот так выглядит код:

Код AS3:

var strParam;
function setParam(param:String):void{
        strParam = param;
}
function getParam():String{
        return strParam;
}
trace(strParam);

результат выдает strParam = undefined... если внутри функции присвоить полученное значение какому-нибудь текстовому полю, то значение хранится в нем. В чем затык?

Dukobpa3 02.05.2011 00:53

По этому кусочку кода ровным счетом ничего не понятно...

alexmihel 02.05.2011 01:02

тот код находится в дочернем swf-файле. А в родителе для передачи параметра стоит такой код:

Код AS3:

...
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleComplete );
 
private function handleComplete( event:Event ):void {
 
      event.target.content.setParam ( strParam );
 
}


Dukobpa3 02.05.2011 01:09

ну тут две ошибки.

1. target : Object
[только для чтения] Целевой объект события.

2. event.target.loader.content.setParam ( strParam );

и исходя из первого пункта надо таки завести для загружаемой свф-ки переменную и куда-то ее сохранить, дальнейшие действия производить с ней а не с таргетом события. (собственно так как в приведенном мною куске кода).

Добавлено через 4 минуты
Код AS3:

var strParam;
function setParam(param:String):void{
        strParam = param;
}
function getParam():String{
        return strParam;
}
trace(strParam);

А вот это я бы сделал так:
Код AS3:

private var _strParam;
function set strParam(param:String):void{
        strParam = param;
}
function get strParam():String{
        return strParam;
}
trace(strParam);


rs7 06.05.2011 10:14

Цитата:

Сообщение от Dukobpa3 (Сообщение 993163)
Только как передать влешВары НЕ из хтмл или пхп или SVFObject - я не знаю.

параметры передаются очень легко: Loader.load(new URLRequest("somename.swf?parametr1=value1&parametr2=value2"));

alexmihel 07.05.2011 12:55

Цитата:

Сообщение от rs7 (Сообщение 994290)
параметры передаются очень легко: Loader.load(new URLRequest("somename.swf?parametr1=value1&parametr2=value2"));

а как их ловить в дочерней флешке?


Часовой пояс GMT +4, время: 11:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.