0

2つのswfファイルがあります。1つがロードされ、外部からロードされた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);

}

ロードされたBEAUSWFのコードは次のとおりです:#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;

}


編集

わかりました、あなたのコードとチュートリアルは素晴らしいです。外部URLからクリップをロードすると、SANDBOXに大きな問題が発生します。FLASHCS5.5を使用してAndroidのコーディングも行っています。Security.allowDomain( "*");を使用できません。

BOTTOME LINEは、新しくロードされたSWFが許可なしに親にアクセスできないことですが、AIR /ANDROIDPLAYERを使用して許可を与える方法がわかりません。

4

1 に答える 1

1

プロパティを使用parent

parentローダーを与える

parent.parentswf#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();

編集:

logo:Loader SWF#1に追加されます。画像を読み込むので、コンテンツはビットマップです。

beau:Loaderステージに追加されます。swf(SWF#2)をロードするため、コンテンツはMovieClipです。

だから今

ルートはSWF#1です

の親beauはSWF#1です

SWF#2の親はSWF#1beauであり、の親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;
}
于 2012-03-10T20:57:26.247 に答える