AS3 внешне загружен SWF для управления сценой и MovieClips и их детей? - PullRequest
0 голосов
/ 10 марта 2012

У меня есть 2 SWF-файла. Один загружается и загружает в него внешне загруженный SWF-файл.

Вот код в первом загруженном SWF: # 1

var logo:Loader = new Loader();
logo.load(new URLRequest("images/Logo.png"));
logo.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadLogo);
function LoadLogo(e:Event):void
{
    addChild(logo);

}

/// The SWF I AM LOADING 

var Beau:Loader = new Loader();
Beau.load(new URLRequest("Beau.swf"));
Beau.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadBeau);

function LoadBeau(e:Event)
{
    addChild(Beau);

}

СЕЙЧАС ЗДЕСЬ КОД ДЛЯ SWF BEAU: # 2

import flash.display.MovieClip;


bird.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
   ////   I WANT TO BE ABLE TO ADD CODE TO CONTROL MOVIECLIPS 
   ////   AND CHILDREN form this externally loaded swf. How do
   ////   I do that? Below code does not work.

var logo:MovieClip;
var ControlLogo:MovieClip = MovieClip(logo.content);
    ControlLogo.alpha = .3;

}


EDIT

хорошо, ваш код и учебники великолепны. У меня серьезные проблемы с SANDBOX, когда я загружаю клип с внешнего URL. Я также кодирую для Android с помощью FLASH CS5.5. Это не позволяет мне использовать Security.allowDomain ("*");

BOTTOME LINE - это недавно загруженный SWF-файл, который не может получить доступ к РОДИТЕЛЮ БЕЗ РАЗРЕШЕНИЯ, НО Я НЕ ЗНАЮ, КАК ДАТЬ ЕГО РАЗРЕШЕНИЕ .... с помощью ИГРЫ ВОЗДУХА / ANDROID.

1 Ответ

1 голос
/ 11 марта 2012

использовать свойство parent

parent дает загрузчик

parent.parent дает swf # 1

Таким образом, вы можете написать функцию, как указано ниже

function fl_MouseClickHandler(event:MouseEvent):void
{

    var swf1:Object = parent.parent;

    var logo:Loader = swf1.logo;
    var ControlLogo:Bitmap = Bitmap(logo.content); // because logo loads an image
    ControlLogo.alpha = .3;


}

убедитесь, что logo не локальная переменная, а глобальная и общедоступная в swf # 1

public var logo:Loader = new Loader();

EDIT:

logo:Loader добавляется в SWF #1.Загружает изображение, поэтому содержимое является растровым.

beau:Loader добавляется на сцену.Загружает SWF (SWF # 2), поэтому содержимое - это MovieClip.

, поэтому

root - SWF # 1

, родительский элемент beau - SWF # 1

родительский элемент SWF # 2 - beau, а родительский beau - SWF # 1

, поэтому для SWF # 2 SWF # 1 является родительским для родительского элемента, поэтому parent.parent

Если вы не создаете общедоступные переменные, вы можете управлять этим с помощью свойства name.

var logo:Loader = new Loader();
logo.name = "logo";
...
...

var beau:Loader = new Loader();
beau.name = "beau";
...
...

Затем в любом месте swf # 2

var swf1:Object = parent.parent;

var logo:Loader = Loader(swf1.getChildByName("logo"));
....
....

Для доступа к содержимому этоРекомендуется использовать приведение типов, как я показал

var ControlLogo:Bitmap = Bitmap(logo.content); // because logo loads an image

, чтобы вы могли проверить, как показано ниже, и избежать ошибок времени выполнения

var ControlLogo:Bitmap = Bitmap(logo.content); 
if(ControlLogo){

}

Если вы хотите, чтобы что-то независимо от содержимого выполнялось какпоказано ниже

var ControlLogo:Object = logo.content; 
if(ControlLogo && ControlLogo.hasOwnProperty("alpha")){
   ControlLogo.alpha = 0.4;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...